Exemplo n.º 1
0
static void
test_string_parser_without_parameter_parses_a_word(void)
{
  assert_parser_success(r_parser_string, "foo", NULL, NULL, "foo");
  assert_parser_success(r_parser_string, "foo bar", NULL, NULL, "foo");
  assert_parser_success(r_parser_string, "foo123 bar", NULL, NULL, "foo123");
  assert_parser_success(r_parser_string, "foo{}", NULL, NULL, "foo");
  assert_parser_success(r_parser_string, "foo[]", NULL, NULL, "foo");
  assert_parser_failure(r_parser_string, "", NULL, NULL);
}
Exemplo n.º 2
0
END_TEST

START_TEST (absolute_multi_step)
{
    char *expression = "$.foo.baz..yobble.thingum";
    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, 5);
    assert_root_step(path);
    assert_single_name_step(path, 1, "foo");
    assert_single_name_step(path, 2, "baz");
    assert_recursive_name_step(path, 3, "yobble");
    assert_single_name_step(path, 4, "thingum");
    assert_no_predicate(path, 1);
    assert_no_predicate(path, 2);
    assert_no_predicate(path, 3);
    assert_no_predicate(path, 4);

    path_free(path);    
    parser_free(context);
}
Exemplo n.º 3
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);
}
Exemplo n.º 4
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);
}
Exemplo n.º 5
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);
}
Exemplo n.º 6
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);
}
Exemplo n.º 7
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);
}
Exemplo n.º 8
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);
}
Exemplo n.º 9
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);
}
Exemplo n.º 10
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);
}
Exemplo n.º 11
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);
}
Exemplo n.º 12
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);
}
Exemplo n.º 13
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);
}
Exemplo n.º 14
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);
}
Exemplo n.º 15
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);
}
Exemplo n.º 16
0
static void
assert_qstring_parser_success(const gchar *str, gchar *quotes, const gchar *expected_string)
{
  assert_parser_success(r_parser_qstring, str, quotes, compile_qstring_state(quotes), expected_string);
}
Exemplo n.º 17
0
static void
test_string_parser_with_additional_end_characters(void)
{
  assert_parser_success(r_parser_string, "foo", "X", NULL, "foo");
  assert_parser_success(r_parser_string, "foo=bar", "=", NULL, "foo=bar");
}