Пример #1
0
END_TEST

START_TEST (quoted_empty_step)
{
    char *expression = "$.foo.''.bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_failure(expression, context, path, ERR_EXPECTED_NAME_CHAR, 7);
    
    parser_free(context);
    path_free(path);
}
Пример #2
0
END_TEST

START_TEST (negative_subscript_predicate)
{
    char *expression = "$.foo[ -3].bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    // xxx - fixme! this should be ERR_EXPECTED_INTEGER instead!
    assert_parser_failure(expression, context, path, ERR_UNSUPPORTED_PRED_TYPE, 7);
    path_free(path);
    parser_free(context);
}
Пример #3
0
int main(int argc, char *argv[])
{
    srand(time(0));
    set_signals();
    getargs(argc, argv);
    open_files();
    reader();
    lr0();
    lalr();
    make_parser();
    graph();
    finalize_closure();
    verbose();
    output();
    done(0);
    /*NOTREACHED */
}
Пример #4
0
int main(int argc, char *argv[])
{
#if defined(THINK_C) || defined(__MWERKS__)
	argc = ccommand(&argv);
#endif
    set_signals();
    getargs(argc, argv);
    open_files();
    reader();
    lr0();
    lalr();
    make_parser();
    verbose();
    output();
    done(0);
    /*NOTREACHED*/
    return 0;
}
Пример #5
0
END_TEST

START_TEST (dollar_only)
{
    char *expression = "$";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, 1);
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 1);
    assert_root_step(path);

    path_free(path);
    parser_free(context);
}
Пример #6
0
END_TEST

START_TEST (zero_step_slice_predicate)
{
    char *expression = "$.foo[::0].bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    // xxx - fix me! this should be ERR_STEP_CANNOT_BE_ZERO instead
    // xxx - fix me! this should be position 8 instead, need a non-zero signed int parser
    assert_parser_failure(expression, context, path, ERR_UNSUPPORTED_PRED_TYPE, 9);

    path_free(path);
    parser_free(context);
}
Пример #7
0
END_TEST

START_TEST (absolute_recursive_step)
{
    char *expression = "$..foo";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, 6);
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 2);
    assert_root_step(path);
    assert_recursive_name_step(path, 1, "foo");
    assert_no_predicate(path, 0);

    path_free(path);    
    parser_free(context);
}
Пример #8
0
int
main(int argc, char *argv[])
{
    SRexpect = -1;
    RRexpect = -1;
    exit_code = EXIT_SUCCESS;

    set_signals();
    getargs(argc, argv);
    open_files();
    reader();
    lr0();
    lalr();
    make_parser();
    graph();
    finalize_closure();
    verbose();
    output();
    done(exit_code);
    /*NOTREACHED */
}
Пример #9
0
END_TEST

START_TEST (iteration)
{
    char *expression = "$.foo.bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);

    unsigned long counter = 0;
    assert_true(path_iterate(path, count, &counter));
    assert_uint_eq(3, counter);

    path_free(path);
    parser_free(context);
}
Пример #10
0
END_TEST

START_TEST (type_test_with_subscript_predicate)
{
    char *expression = "$.foo.array()[0]";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_no_predicate(path, 1);
    assert_single_type_step(path, 2, ARRAY_TEST);
    assert_subscript_predicate(path, 2, 0);

    path_free(path);
    parser_free(context);
}
Пример #11
0
END_TEST

START_TEST (subscript_predicate_with_whitespace)
{
    char *expression = "$.foo  [\t42\r]\n.bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_subscript_predicate(path, 1, 42);
    assert_single_name_step(path, 2, "bar");
    assert_no_predicate(path, 2);

    path_free(path);
    parser_free(context);
}
Пример #12
0
END_TEST

START_TEST (boolean_type_test)
{
    char *expression = "$.foo.boolean()";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_single_type_step(path, 2, BOOLEAN_TEST);
    assert_no_predicate(path, 1);
    assert_no_predicate(path, 2);

    path_free(path);
    parser_free(context);
}
Пример #13
0
END_TEST

START_TEST (recursive_wildcard)
{
    char *expression = "$.foo..*";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_recursive_wildcard_step(path, 2);
    assert_no_predicate(path, 1);
    assert_no_predicate(path, 2);

    path_free(path);
    parser_free(context);
}
Пример #14
0
END_TEST

START_TEST (slice_predicate_form2_with_step)
{
    char *expression = "$.foo[-1::2].bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_slice_predicate(path, 1, -1, INT_FAST32_MAX, 2);
    assert_single_name_step(path, 2, "bar");
    assert_no_predicate(path, 2);

    path_free(path);
    parser_free(context);
}
Пример #15
0
END_TEST

START_TEST (negative_step_slice_predicate)
{
    char *expression = "$.foo[1:3:-3].bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 3);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_slice_predicate(path, 1, 1, 3, -3);
    assert_single_name_step(path, 2, "bar");
    assert_no_predicate(path, 2);

    path_free(path);
    parser_free(context);
}
Пример #16
0
END_TEST

START_TEST (relative_multi_step)
{
    char *expression = "foo.bar..baz";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, RELATIVE_PATH, 3);
    assert_single_name_step(path, 0, "foo");
    assert_single_name_step(path, 1, "bar");
    assert_recursive_name_step(path, 2, "baz");
    assert_no_predicate(path, 0);
    assert_no_predicate(path, 1);
    assert_no_predicate(path, 2);

    path_free(path);    
    parser_free(context);
}
Пример #17
0
END_TEST

START_TEST (wildcard_predicate)
{
    char *expression = "$.store.book[*].author";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 4);
    assert_root_step(path);
    assert_single_name_step(path, 1, "store");
    assert_no_predicate(path, 1);
    assert_single_name_step(path, 2, "book");
    assert_wildcard_predicate(path, 2);
    assert_single_name_step(path, 3, "author");
    assert_no_predicate(path, 3);

    path_free(path);
    parser_free(context);
}
Пример #18
0
END_TEST

START_TEST (whitespace)
{
    char *expression = "  $ \r\n. foo \n.\n. \t'happy fun ball' . \t string()";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 4);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_recursive_name_step(path, 2, "happy fun ball");
    assert_single_type_step(path, 3, STRING_TEST);
    assert_no_predicate(path, 1);
    assert_no_predicate(path, 2);
    assert_no_predicate(path, 3);

    path_free(path);    
    parser_free(context);
}
Пример #19
0
END_TEST

START_TEST (quoted_multi_step)
{
    char *expression = "$.foo.'happy fun ball'.bar";
    reset_errno();
    parser_context *context = make_parser((uint8_t *)expression, strlen(expression));
    assert_not_null(context);
    assert_noerr();

    jsonpath *path = parse(context);
    
    assert_parser_success(expression, context, path, ABSOLUTE_PATH, 4);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_single_name_step(path, 2, "happy fun ball");
    assert_single_name_step(path, 3, "bar");
    assert_no_predicate(path, 1);
    assert_no_predicate(path, 2);
    assert_no_predicate(path, 3);

    path_free(path);    
    parser_free(context);
}