Mercurial > dovecot > core-2.2
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 |
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 } |