Exemplo n.º 1
0
END_TEST

START_TEST (load_from_file)
{
    size_t yaml_size = strlen((char *)YAML);

    FILE *input = tmpfile();
    size_t written = fwrite(YAML, sizeof(char), yaml_size, input);
    assert_uint_eq(written, yaml_size);
    int ret = fflush(input);
    assert_int_eq(0, ret);

    rewind(input);

    loader_context *loader = make_file_loader(input);    
    assert_not_null(loader);
    assert_int_eq(LOADER_SUCCESS, loader_status(loader));
    document_model *model = load(loader);
    assert_not_null(model);

    assert_model_state(loader, model);

    fclose(input);
    model_free(model);
    loader_free(loader);
}
Exemplo n.º 2
0
END_TEST

START_TEST (document_type)
{
    reset_errno();
    size_t c = model_size(model);
    assert_noerr();
    assert_uint_eq(1, c);
    
    reset_errno();
    Document *d = model_document(model, 0);
    assert_noerr();
    assert_not_null(d);
    
    reset_errno();
    Node *bogus = model_document(model, 1);
    assert_errno(EINVAL);
    assert_null(bogus);
    
    reset_errno();
    Node *r1 = model_document_root(model, 0);
    assert_noerr();
    assert_not_null(r1);
    assert_node_kind(r1, MAPPING);

    reset_errno();
    Node *r2 = document_root(d);
    assert_noerr();
    assert_not_null(r2);
    assert_ptr_eq(r1, r2);
}
Exemplo n.º 3
0
END_TEST

START_TEST (nodes)
{
    reset_errno();
    Node *r = model_document_root(model, 0);
    assert_noerr();
    assert_not_null(r);
    assert_node_kind(r, MAPPING);

    reset_errno();
    unsigned char *n = node_name(r);
    assert_noerr();
    assert_null(n);

    reset_errno();
    size_t s = node_size(r);
    assert_noerr();
    assert_uint_eq(4, s);
}
Exemplo n.º 4
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.º 5
0
END_TEST

START_TEST (sequence_iteration)
{
    reset_errno();
    Node *r = model_document_root(model, 0);
    assert_noerr();
    assert_not_null(r);
    assert_node_kind(r, MAPPING);
    
    reset_errno();
    Node *s = mapping_get(mapping(r), (uint8_t *)"one", 3ul);
    assert_noerr();
    assert_not_null(s);
    assert_node_kind(s, SEQUENCE);
    assert_node_size(s, 2);
    
    size_t count = 0;
    reset_errno();
    assert_true(sequence_iterate(sequence(s), check_sequence, &count));
    assert_noerr();
    assert_uint_eq(2, count);
}
Exemplo n.º 6
0
END_TEST

static void assert_model_state(loader_context *loader, document_model *model)
{
    assert_int_eq(LOADER_SUCCESS, loader_status(loader));
    assert_not_null(model);
    assert_uint_eq(1, model_document_count(model));

    reset_errno();
    node *root = model_document_root(model, 0);
    assert_noerr();
    assert_not_null(root);
    
    assert_node_kind(root, MAPPING);
    assert_node_size(root, 5);

    reset_errno();
    node *one = mapping_get(root, (uint8_t *)"one", 3ul);
    assert_noerr();
    assert_not_null(one);
    assert_node_kind(one, SEQUENCE);
    assert_node_size(one, 2);

    reset_errno();
    node *one_0 = sequence_get(one, 0);
    assert_noerr();
    assert_node_kind(one_0, SCALAR);
    assert_scalar_value(one_0, "foo1");
    assert_scalar_kind(one_0, SCALAR_STRING);
    reset_errno();
    node *one_1 = sequence_get(one, 1);
    assert_noerr();
    assert_node_kind(one_1, SCALAR);
    assert_scalar_value(one_1, "bar1");
    assert_scalar_kind(one_1, SCALAR_STRING);

    reset_errno();
    node *two = mapping_get(root, (uint8_t *)"two", 3ul);
    assert_noerr();
    assert_not_null(two);
    assert_node_kind(two, SCALAR);
    assert_scalar_value(two, "foo2");
    assert_scalar_kind(two, SCALAR_STRING);

    reset_errno();
    node *three = mapping_get(root, (uint8_t *)"three", 5ul);
    assert_noerr();
    assert_not_null(three);
    assert_node_kind(three, SCALAR);
    assert_scalar_value(three, "null");
    assert_scalar_kind(three, SCALAR_NULL);

    reset_errno();
    node *four = mapping_get(root, (uint8_t *)"four", 4ul);
    assert_noerr();
    assert_not_null(four);
    assert_node_kind(four, SEQUENCE);

    reset_errno();
    node *four_0 = sequence_get(four, 0);
    assert_noerr();
    assert_node_kind(four_0, SCALAR);
    assert_scalar_value(four_0, "true");
    assert_scalar_kind(four_0, SCALAR_BOOLEAN);
    assert_true(scalar_boolean_is_true(four_0));
    assert_false(scalar_boolean_is_false(four_0));
    reset_errno();
    node *four_1 = sequence_get(four, 1);
    assert_noerr();
    assert_node_kind(four_0, SCALAR);
    assert_scalar_value(four_1, "false");
    assert_scalar_kind(four_1, SCALAR_BOOLEAN);
    assert_true(scalar_boolean_is_false(four_1));
    assert_false(scalar_boolean_is_true(four_1));

    reset_errno();
    node *five = mapping_get(root, (uint8_t *)"five", 4ul);
    assert_noerr();
    assert_not_null(five);
    assert_node_kind(five, SEQUENCE);
    node *five_0 = sequence_get(five, 0);
    assert_noerr();
    assert_node_kind(five_0, SCALAR);
    assert_scalar_value(five_0, "1.5");
    assert_scalar_kind(five_0, SCALAR_REAL);
    reset_errno();
    node *five_1 = sequence_get(five, 1);
    assert_noerr();
    assert_node_kind(five_1, SCALAR);
    assert_scalar_value(five_1, "42");
    assert_scalar_kind(five_1, SCALAR_INTEGER);
    reset_errno();
    node *five_2 = sequence_get(five, 2);
    assert_noerr();
    assert_node_kind(five_2, SCALAR);
    assert_scalar_value(five_2, "1978-07-26 10:15");
    assert_scalar_kind(five_2, SCALAR_TIMESTAMP);
    reset_errno();
}
Exemplo n.º 7
0
END_TEST

START_TEST (sequence_type)
{
    reset_errno();
    Node *r = model_document_root(model, 0);
    assert_noerr();
    assert_not_null(r);
    assert_node_kind(r, MAPPING);

    reset_errno();
    Node *s = mapping_get(mapping(r), (uint8_t *)"one", 3ul);
    assert_noerr();
    assert_not_null(s);
    assert_node_kind(s, SEQUENCE);
    assert_node_size(s, 2);
    
    reset_errno();
    Node *zero = sequence_get(sequence(s), 0);
    assert_noerr();
    assert_not_null(zero);
    assert_node_kind(zero, SCALAR);
    
    reset_errno();
    Node *one = sequence_get(sequence(s), 1);
    assert_noerr();
    assert_not_null(one);
    assert_node_kind(one, SCALAR);

    reset_errno();
    Scalar *x = make_scalar_node((uint8_t *)"x", 1, SCALAR_STRING);
    assert_noerr();
    assert_not_null(x);
    reset_errno();
    Scalar *y = make_scalar_node((uint8_t *)"y", 1, SCALAR_STRING);
    assert_noerr();
    assert_not_null(y);
    reset_errno();
    Scalar *z = make_scalar_node((uint8_t *)"z", 1, SCALAR_STRING);
    assert_noerr();
    assert_not_null(z);
    reset_errno();
    Sequence *xyz = make_sequence_node();
    assert_noerr();
    assert_not_null(xyz);

    reset_errno();
    sequence_add(xyz, node(x));
    assert_noerr();
    reset_errno();
    sequence_add(xyz, node(y));
    assert_noerr();
    reset_errno();
    sequence_add(xyz, node(z));
    assert_noerr();
    assert_uint_eq(3, node_size(node(xyz)));
    assert_ptr_eq(node(x), sequence_get(xyz, 0));
    assert_ptr_eq(node(y), sequence_get(xyz, 1));
    assert_ptr_eq(node(z), sequence_get(xyz, 2));
    node_free(node(xyz));
}