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); }
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); }
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 */ }
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; }
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); }
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); }
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); }
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 */ }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }