• source navigation  • diff markup  • identifier search  • freetext search  • 

Sources/json-c/tests/test1.c

  1 #include <assert.h>
  2 #include <stddef.h>
  3 #include <stdio.h>
  4 #include <stdlib.h>
  5 #include <string.h>
  6 
  7 #include "json.h"
  8 #include "parse_flags.h"
  9 
 10 static int sort_fn(const void *j1, const void *j2)
 11 {
 12         json_object *const *jso1, *const *jso2;
 13         int i1, i2;
 14 
 15         jso1 = (json_object *const *)j1;
 16         jso2 = (json_object *const *)j2;
 17         if (!*jso1 && !*jso2)
 18                 return 0;
 19         if (!*jso1)
 20                 return -1;
 21         if (!*jso2)
 22                 return 1;
 23 
 24         i1 = json_object_get_int(*jso1);
 25         i2 = json_object_get_int(*jso2);
 26 
 27         return i1 - i2;
 28 }
 29 
 30 #ifdef TEST_FORMATTED
 31 static const char *to_json_string(json_object *obj, int flags)
 32 {
 33         size_t length;
 34         char *copy;
 35         const char *result;
 36 
 37         result = json_object_to_json_string_length(obj, flags, &length);
 38         copy = strdup(result);
 39         if (copy == NULL)
 40                 printf("to_json_string: Allocation failed!\n");
 41         else
 42         {
 43                 result = json_object_to_json_string_ext(obj, flags);
 44                 if (length != strlen(result))
 45                         printf("to_json_string: Length mismatch!\n");
 46                 if (strcmp(copy, result) != 0)
 47                         printf("to_json_string: Comparison Failed!\n");
 48                 free(copy);
 49         }
 50         return result;
 51 }
 52 #define json_object_to_json_string(obj) to_json_string(obj, sflags)
 53 #else
 54 /* no special define */
 55 #endif
 56 
 57 json_object *make_array(void);
 58 json_object *make_array()
 59 {
 60         json_object *my_array;
 61 
 62         my_array = json_object_new_array();
 63         json_object_array_add(my_array, json_object_new_int(1));
 64         json_object_array_add(my_array, json_object_new_int(2));
 65         json_object_array_add(my_array, json_object_new_int(3));
 66         json_object_array_put_idx(my_array, 4, json_object_new_int(5));
 67         json_object_array_put_idx(my_array, 3, json_object_new_int(4));
 68         json_object_array_put_idx(my_array, 6, json_object_new_int(7));
 69 
 70         return my_array;
 71 }
 72 
 73 void test_array_del_idx(void);
 74 void test_array_del_idx()
 75 {
 76         int rc;
 77         size_t ii;
 78         size_t orig_array_len;
 79         json_object *my_array;
 80 #ifdef TEST_FORMATTED
 81         int sflags = 0;
 82 #endif
 83 
 84         my_array = make_array();
 85         orig_array_len = json_object_array_length(my_array);
 86 
 87         printf("my_array=\n");
 88         for (ii = 0; ii < json_object_array_length(my_array); ii++)
 89         {
 90                 json_object *obj = json_object_array_get_idx(my_array, ii);
 91                 printf("\t[%d]=%s\n", (int)ii, json_object_to_json_string(obj));
 92         }
 93         printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));
 94 
 95         for (ii = 0; ii < orig_array_len; ii++)
 96         {
 97                 rc = json_object_array_del_idx(my_array, 0, 1);
 98                 printf("after del_idx(0,1)=%d, my_array.to_string()=%s\n", rc,
 99                        json_object_to_json_string(my_array));
100         }
101 
102         /* One more time, with the empty array: */
103         rc = json_object_array_del_idx(my_array, 0, 1);
104         printf("after del_idx(0,1)=%d, my_array.to_string()=%s\n", rc,
105                json_object_to_json_string(my_array));
106 
107         json_object_put(my_array);
108 
109         /* Delete all array indexes at once */
110         my_array = make_array();
111         rc = json_object_array_del_idx(my_array, 0, orig_array_len);
112         printf("after del_idx(0,%d)=%d, my_array.to_string()=%s\n", (int)orig_array_len, rc,
113                json_object_to_json_string(my_array));
114 
115         json_object_put(my_array);
116 
117         /* Delete *more* than all array indexes at once */
118         my_array = make_array();
119         rc = json_object_array_del_idx(my_array, 0, orig_array_len + 1);
120         printf("after del_idx(0,%d)=%d, my_array.to_string()=%s\n", (int)(orig_array_len + 1), rc,
121                json_object_to_json_string(my_array));
122 
123         json_object_put(my_array);
124 
125         /* Delete some array indexes, then add more */
126         my_array = make_array();
127         rc = json_object_array_del_idx(my_array, 0, orig_array_len - 1);
128         printf("after del_idx(0,%d)=%d, my_array.to_string()=%s\n", (int)(orig_array_len - 1), rc,
129                json_object_to_json_string(my_array));
130         json_object_array_add(my_array, json_object_new_string("s1"));
131         json_object_array_add(my_array, json_object_new_string("s2"));
132         json_object_array_add(my_array, json_object_new_string("s3"));
133 
134         printf("after adding more entries, my_array.to_string()=%s\n",
135                json_object_to_json_string(my_array));
136         json_object_put(my_array);
137 }
138 
139 void test_array_list_expand_internal(void);
140 void test_array_list_expand_internal()
141 {
142         int rc;
143         size_t ii;
144         size_t idx;
145         json_object *my_array;
146 #ifdef TEST_FORMATTED
147         int sflags = 0;
148 #endif
149 
150         my_array = make_array();
151         printf("my_array=\n");
152         for (ii = 0; ii < json_object_array_length(my_array); ii++)
153         {
154                 json_object *obj = json_object_array_get_idx(my_array, ii);
155                 printf("\t[%d]=%s\n", (int)ii, json_object_to_json_string(obj));
156         }
157         printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));
158 
159         /* Put iNdex < array->size, no expand. */
160         rc = json_object_array_put_idx(my_array, 5, json_object_new_int(6));
161         printf("put_idx(5,6)=%d\n", rc);
162 
163         /* array->size < Put Index < array->size * 2 <= SIZE_T_MAX, the size = array->size * 2. */
164         idx = ARRAY_LIST_DEFAULT_SIZE * 2 - 1;
165         rc = json_object_array_put_idx(my_array, idx, json_object_new_int(0));
166         printf("put_idx(%d,0)=%d\n", (int)(idx), rc);
167 
168         /* array->size * 2 < Put Index, the size = Put Index. */
169         idx = ARRAY_LIST_DEFAULT_SIZE * 2 * 2 + 1;
170         rc = json_object_array_put_idx(my_array, idx, json_object_new_int(0));
171         printf("put_idx(%d,0)=%d\n", (int)(idx), rc);
172 
173         /* SIZE_T_MAX <= Put Index, it will fail and the size will no change. */
174         idx = SIZE_MAX; // SIZE_MAX = SIZE_T_MAX
175         json_object *tmp = json_object_new_int(10);
176         rc = json_object_array_put_idx(my_array, idx, tmp);
177         printf("put_idx(SIZE_T_MAX,0)=%d\n", rc);
178         if (rc == -1)
179         {
180                 json_object_put(tmp);
181         }
182 
183         json_object_put(my_array);
184 }
185 
186 int main(int argc, char **argv)
187 {
188         json_object *my_string, *my_int, *my_null, *my_object, *my_array;
189         size_t i;
190 #ifdef TEST_FORMATTED
191         int sflags = 0;
192 #endif
193 
194         MC_SET_DEBUG(1);
195 
196 #ifdef TEST_FORMATTED
197         sflags = parse_flags(argc, argv);
198 #endif
199 
200         my_string = json_object_new_string("\t");
201         printf("my_string=%s\n", json_object_get_string(my_string));
202         printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
203         json_object_put(my_string);
204 
205         my_string = json_object_new_string("\\");
206         printf("my_string=%s\n", json_object_get_string(my_string));
207         printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
208         json_object_put(my_string);
209 
210         my_string = json_object_new_string("/");
211         printf("my_string=%s\n", json_object_get_string(my_string));
212         printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
213         printf("my_string.to_string(NOSLASHESCAPE)=%s\n",
214                json_object_to_json_string_ext(my_string, JSON_C_TO_STRING_NOSLASHESCAPE));
215         json_object_put(my_string);
216 
217         my_string = json_object_new_string("/foo/bar/baz");
218         printf("my_string=%s\n", json_object_get_string(my_string));
219         printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
220         printf("my_string.to_string(NOSLASHESCAPE)=%s\n",
221                json_object_to_json_string_ext(my_string, JSON_C_TO_STRING_NOSLASHESCAPE));
222         json_object_put(my_string);
223 
224         my_string = json_object_new_string("foo");
225         printf("my_string=%s\n", json_object_get_string(my_string));
226         printf("my_string.to_string()=%s\n", json_object_to_json_string(my_string));
227 
228         my_int = json_object_new_int(9);
229         printf("my_int=%d\n", json_object_get_int(my_int));
230         printf("my_int.to_string()=%s\n", json_object_to_json_string(my_int));
231 
232         my_null = json_object_new_null();
233         printf("my_null.to_string()=%s\n", json_object_to_json_string(my_null));
234 
235         my_array = json_object_new_array();
236         json_object_array_add(my_array, json_object_new_int(1));
237         json_object_array_add(my_array, json_object_new_int(2));
238         json_object_array_add(my_array, json_object_new_int(3));
239         json_object_array_put_idx(my_array, 4, json_object_new_int(5));
240         printf("my_array=\n");
241         for (i = 0; i < json_object_array_length(my_array); i++)
242         {
243                 json_object *obj = json_object_array_get_idx(my_array, i);
244                 printf("\t[%d]=%s\n", (int)i, json_object_to_json_string(obj));
245         }
246         printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));
247 
248         json_object_put(my_array);
249 
250         test_array_del_idx();
251         test_array_list_expand_internal();
252 
253         my_array = json_object_new_array_ext(5);
254         json_object_array_add(my_array, json_object_new_int(3));
255         json_object_array_add(my_array, json_object_new_int(1));
256         json_object_array_add(my_array, json_object_new_int(2));
257         json_object_array_put_idx(my_array, 4, json_object_new_int(0));
258         printf("my_array=\n");
259         for (i = 0; i < json_object_array_length(my_array); i++)
260         {
261                 json_object *obj = json_object_array_get_idx(my_array, i);
262                 printf("\t[%d]=%s\n", (int)i, json_object_to_json_string(obj));
263         }
264         printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));
265         json_object_array_sort(my_array, sort_fn);
266         printf("my_array=\n");
267         for (i = 0; i < json_object_array_length(my_array); i++)
268         {
269                 json_object *obj = json_object_array_get_idx(my_array, i);
270                 printf("\t[%d]=%s\n", (int)i, json_object_to_json_string(obj));
271         }
272         printf("my_array.to_string()=%s\n", json_object_to_json_string(my_array));
273 
274         json_object *one = json_object_new_int(1);
275         json_object *result = json_object_array_bsearch(one, my_array, sort_fn);
276         printf("find json_object(1) in my_array successfully: %s\n",
277                json_object_to_json_string(result));
278         json_object_put(one);
279 
280         my_object = json_object_new_object();
281         int rc = json_object_object_add(my_object, "abc", my_object);
282         if (rc != -1)
283         {
284                 printf("ERROR: able to successfully add object to itself!\n");
285                 fflush(stdout);
286         }
287         json_object_object_add(my_object, "abc", json_object_new_int(12));
288         json_object_object_add(my_object, "foo", json_object_new_string("bar"));
289         json_object_object_add(my_object, "bool0", json_object_new_boolean(0));
290         json_object_object_add(my_object, "bool1", json_object_new_boolean(1));
291         json_object_object_add(my_object, "baz", json_object_new_string("bang"));
292 
293         json_object *baz_obj = json_object_new_string("fark");
294         json_object_get(baz_obj);
295         json_object_object_add(my_object, "baz", baz_obj);
296         json_object_object_del(my_object, "baz");
297 
298         /* baz_obj should still be valid */
299         printf("baz_obj.to_string()=%s\n", json_object_to_json_string(baz_obj));
300         json_object_put(baz_obj);
301 
302         /*json_object_object_add(my_object, "arr", my_array);*/
303         printf("my_object=\n");
304         json_object_object_foreach(my_object, key, val)
305         {
306                 printf("\t%s: %s\n", key, json_object_to_json_string(val));
307         }
308         printf("my_object.to_string()=%s\n", json_object_to_json_string(my_object));
309 
310         json_object_put(my_string);
311         json_object_put(my_int);
312         json_object_put(my_null);
313         json_object_put(my_object);
314         json_object_put(my_array);
315 
316         return EXIT_SUCCESS;
317 }
318 

This page was automatically generated by LXR 0.3.1.  •  OpenWrt