annotate src/lib/test-json-tree.c @ 22664:fea53c2725c0

director: Fix director_max_parallel_moves/kicks type Should be uint, not time.
author Timo Sirainen <timo.sirainen@dovecot.fi>
date Thu, 09 Nov 2017 12:24:16 +0200
parents 2e2563132d5f
children cb108f786fb4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
21390
2e2563132d5f Updated copyright notices to include the year 2017.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19552
diff changeset
1 /* Copyright (c) 2015-2017 Dovecot authors, see the included COPYING file */
18399
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3 #include "test-lib.h"
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
4 #include "json-tree.h"
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
5
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
6 struct {
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
7 enum json_type type;
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
8 const char *value;
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
9 } test_input[] = {
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
10 { JSON_TYPE_OBJECT_KEY, "key-str" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
11 { JSON_TYPE_STRING, "string" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
12 { JSON_TYPE_OBJECT_KEY, "key-num" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
13 { JSON_TYPE_NUMBER, "1234" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
14 { JSON_TYPE_OBJECT_KEY, "key-true" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
15 { JSON_TYPE_TRUE, "true" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
16 { JSON_TYPE_OBJECT_KEY, "key-false" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
17 { JSON_TYPE_FALSE, "false" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
18 { JSON_TYPE_OBJECT_KEY, "key-null" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19 { JSON_TYPE_NULL, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
20
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
21 { JSON_TYPE_OBJECT_KEY, "key-obj-empty" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
22 { JSON_TYPE_OBJECT, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
23 { JSON_TYPE_OBJECT_END, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
24
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 { JSON_TYPE_OBJECT_KEY, "key-obj" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
26 { JSON_TYPE_OBJECT, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
27 { JSON_TYPE_OBJECT_KEY, "sub" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
28 { JSON_TYPE_STRING, "value" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 { JSON_TYPE_OBJECT_END, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
31 { JSON_TYPE_OBJECT_KEY, "key-arr-empty" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
32 { JSON_TYPE_ARRAY, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
33 { JSON_TYPE_ARRAY_END, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
34
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
35 { JSON_TYPE_OBJECT_KEY, "key-arr" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 { JSON_TYPE_ARRAY, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
37 { JSON_TYPE_STRING, "foo" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
38 { JSON_TYPE_ARRAY, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39 { JSON_TYPE_TRUE, "true" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
40 { JSON_TYPE_ARRAY_END, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
41 { JSON_TYPE_OBJECT, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 { JSON_TYPE_OBJECT_KEY, "aobj" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
43 { JSON_TYPE_ARRAY, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
44 { JSON_TYPE_ARRAY_END, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
45 { JSON_TYPE_OBJECT_END, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
46 { JSON_TYPE_OBJECT, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
47 { JSON_TYPE_OBJECT_KEY, "aobj-key" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
48 { JSON_TYPE_STRING, "value1" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
49 { JSON_TYPE_OBJECT_END, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
50 { JSON_TYPE_OBJECT, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
51 { JSON_TYPE_OBJECT_KEY, "aobj-key" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
52 { JSON_TYPE_STRING, "value2" },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
53 { JSON_TYPE_OBJECT_END, NULL },
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
54 { JSON_TYPE_ARRAY_END, NULL }
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
55 };
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
56
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
57 void test_json_tree(void)
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
58 {
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
59 struct json_tree *tree;
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
60 struct json_tree_node *root, *node, *node1, *node2;
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
61 unsigned int i;
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
62
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
63 test_begin("json tree");
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
64 tree = json_tree_init();
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
65 for (i = 0; i < N_ELEMENTS(test_input); i++) {
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
66 test_assert_idx(json_tree_append(tree, test_input[i].type,
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
67 test_input[i].value) == 0, i);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
68 }
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
69
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
70 root = json_tree_root(tree);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
71 i_assert(root != NULL);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
72 test_assert(root->value_type == JSON_TYPE_OBJECT);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
73 root = root->value.child;
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
74 i_assert(root != NULL);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
75
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
76 for (i = 0; i < 10+2; i += 2) {
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
77 node = json_tree_find_key(root, test_input[i].value);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
78 test_assert(node != NULL &&
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
79 node->value_type == test_input[i+1].type &&
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
80 null_strcmp(node->value.str, test_input[i+1].value) == 0);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
81 }
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
82
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
83 node = json_tree_find_key(root, "key-obj");
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
84 test_assert(node != NULL);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
85
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
86 node = json_tree_find_key(root, "key-arr-empty");
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
87 test_assert(node != NULL && node->value_type == JSON_TYPE_ARRAY &&
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
88 node->value.child == NULL);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
89
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
90 node = json_tree_find_key(root, "key-arr");
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
91 test_assert(node != NULL && node->value_type == JSON_TYPE_ARRAY);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
92 node = node->value.child;
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
93 test_assert(node != NULL && node->value_type == JSON_TYPE_STRING &&
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
94 strcmp(node->value.str, "foo") == 0);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
95 node = node->next;
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
96 test_assert(node != NULL && node->value_type == JSON_TYPE_ARRAY &&
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
97 node->value.child != NULL &&
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
98 node->value.child->next == NULL &&
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
99 node->value.child->value_type == JSON_TYPE_TRUE);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
100 node = node->next;
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
101 test_assert(node != NULL && node->value_type == JSON_TYPE_OBJECT &&
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
102 node->value.child != NULL &&
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
103 node->value.child->next == NULL &&
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
104 node->value.child->value_type == JSON_TYPE_ARRAY &&
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
105 node->value.child->value.child == NULL);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
106
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
107 node1 = json_tree_find_child_with(node->parent, "aobj-key", "value1");
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
108 node2 = json_tree_find_child_with(node->parent, "aobj-key", "value2");
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
109 test_assert(node1 != NULL && node2 != NULL && node1 != node2);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
110 test_assert(json_tree_find_child_with(node->parent, "aobj-key", "value3") == NULL);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
111
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
112 json_tree_deinit(&tree);
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
113 test_end();
6bde7868cffd lib: Added json-tree API for parsing JSON input into a tree structure.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
114 }