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