| 1311 cxJsonValueFree(b[i]); |
1311 cxJsonValueFree(b[i]); |
| 1312 } |
1312 } |
| 1313 } |
1313 } |
| 1314 |
1314 |
| 1315 CX_TEST(test_json_compare_objects) { |
1315 CX_TEST(test_json_compare_objects) { |
| 1316 CxJsonValue *json[7]; |
1316 CxJsonValue *json[10]; |
| 1317 cxJsonFromString(NULL, "{ }", &json[0]); |
1317 cxJsonFromString(NULL, "{ }", &json[0]); |
| 1318 cxJsonFromString(NULL, "{ }", &json[1]); |
1318 cxJsonFromString(NULL, "{ }", &json[1]); |
| 1319 cxJsonFromString(NULL, "{ \"name\": \"value\" }", &json[2]); |
1319 cxJsonFromString(NULL, "{ \"name\": \"value\" }", &json[2]); |
| |
1320 cxJsonFromString(NULL, "{ \"name\": \"value\" }", &json[7]); |
| 1320 cxJsonFromString(NULL, "{ \"key0\": \"value0\", \"key1\": \"value1\", \"key2\":null }", &json[3]); |
1321 cxJsonFromString(NULL, "{ \"key0\": \"value0\", \"key1\": \"value1\", \"key2\":null }", &json[3]); |
| 1321 cxJsonFromString(NULL, "{ \"key1\": \"value1\", \"key2\":null, \"key0\": \"value0\" }", &json[4]); |
1322 cxJsonFromString(NULL, "{ \"key1\": \"value1\", \"key2\":null, \"key0\": \"value0\" }", &json[4]); |
| 1322 |
1323 |
| 1323 const char *json_complex_object = |
1324 const char *json_complex_object = |
| 1324 "{\n" |
1325 "{\n" |
| 1337 " ]\n" |
1338 " ]\n" |
| 1338 " }\n" |
1339 " }\n" |
| 1339 "}\n"; |
1340 "}\n"; |
| 1340 cxJsonFromString(NULL, json_complex_object, &json[5]); |
1341 cxJsonFromString(NULL, json_complex_object, &json[5]); |
| 1341 cxJsonFromString(NULL, json_complex_object, &json[6]); |
1342 cxJsonFromString(NULL, json_complex_object, &json[6]); |
| |
1343 const char *json_complex_object_int_array_mismatch = |
| |
1344 "{\n" |
| |
1345 " \"bool\": false,\n" |
| |
1346 " \"int\": 47,\n" |
| |
1347 " \"strings\": [ \"hello\", \"world\" ],\n" |
| |
1348 " \"nested\": {\n" |
| |
1349 " \"string\": \"test\",\n" |
| |
1350 " \"floats\": [ 3.1415, 47.11, 8.15 ],\n" |
| |
1351 " \"ints\": [ 4, 8, 16, 15, 23, 42 ],\n" |
| |
1352 " \"literals\": [ true, null, false ],\n" |
| |
1353 " \"objects\": [\n" |
| |
1354 " {},\n" |
| |
1355 " { \"unicode\": \"\\u03a3\\u29b0\" },\n" |
| |
1356 " { \"array\": [ 1,2,3] }\n" |
| |
1357 " ]\n" |
| |
1358 " }\n" |
| |
1359 "}\n"; |
| |
1360 cxJsonFromString(NULL, json_complex_object_int_array_mismatch, &json[8]); |
| |
1361 const char *json_complex_object_different_order = |
| |
1362 "{\n" |
| |
1363 " \"bool\": false,\n" |
| |
1364 " \"nested\": {\n" |
| |
1365 " \"string\": \"test\",\n" |
| |
1366 " \"ints\": [ 4, 8, 15, 16, 23, 42 ],\n" |
| |
1367 " \"floats\": [ 3.1415, 47.11, 8.15 ],\n" |
| |
1368 " \"objects\": [\n" |
| |
1369 " {},\n" |
| |
1370 " { \"unicode\": \"\\u03a3\\u29b0\" },\n" |
| |
1371 " { \"array\": [ 1,2,3] }\n" |
| |
1372 " ],\n" |
| |
1373 " \"literals\": [ true, null, false ]\n" |
| |
1374 " },\n" |
| |
1375 " \"int\": 47,\n" |
| |
1376 " \"strings\": [ \"hello\", \"world\" ]\n" |
| |
1377 "}\n"; |
| |
1378 cxJsonFromString(NULL, json_complex_object_different_order, &json[9]); |
| 1342 |
1379 |
| 1343 CX_TEST_DO { |
1380 CX_TEST_DO { |
| 1344 for(int i=0;i<7;i++) { |
1381 for (unsigned i = 0; i < cx_nmemb(json); i++) { |
| 1345 CX_TEST_ASSERT(cxJsonIsObject(json[i])); |
1382 CX_TEST_ASSERT(cxJsonIsObject(json[i])); |
| 1346 } |
1383 } |
| 1347 |
1384 |
| 1348 CX_TEST_ASSERT(cxJsonCompare(json[0], json[0]) == 0); |
1385 CX_TEST_ASSERT(cxJsonCompare(json[0], json[0]) == 0); |
| 1349 CX_TEST_ASSERT(cxJsonCompare(json[0], json[1]) == 0); |
1386 CX_TEST_ASSERT(cxJsonCompare(json[0], json[1]) == 0); |
| 1350 CX_TEST_ASSERT(cxJsonCompare(json[2], json[2]) == 0); // <-- fail |
1387 CX_TEST_ASSERT(cxJsonCompare(json[1], json[0]) == 0); |
| 1351 |
1388 CX_TEST_ASSERT(cxJsonCompare(json[2], json[7]) == 0); |
| 1352 // compare empty object with all other objects |
1389 CX_TEST_ASSERT(cxJsonCompare(json[7], json[2]) == 0); |
| 1353 for(int i=2;i<6;i++) { |
|
| 1354 CX_TEST_ASSERT(cxJsonCompare(json[0], json[i]) != 0); |
|
| 1355 } |
|
| 1356 |
1390 |
| 1357 // compare different objects |
1391 // compare different objects |
| 1358 CX_TEST_ASSERT(cxJsonCompare(json[2], json[3]) != 0); |
1392 CX_TEST_ASSERT(cxJsonCompare(json[2], json[3]) != 0); |
| 1359 CX_TEST_ASSERT(cxJsonCompare(json[2], json[5]) != 0); |
1393 CX_TEST_ASSERT(cxJsonCompare(json[2], json[5]) != 0); |
| 1360 |
1394 |
| 1361 // compare equal objects with different orders |
1395 // compare equal objects with different orders |
| 1362 CX_TEST_ASSERT(cxJsonCompare(json[3], json[4]) == 0); // <-- fail |
1396 CX_TEST_ASSERT(cxJsonCompare(json[3], json[4]) == 0); |
| 1363 |
1397 |
| 1364 // test the same complex object |
1398 // test the same complex object |
| 1365 CX_TEST_ASSERT(cxJsonCompare(json[6], json[7])); // <-- fail, even with hashmap |
1399 CX_TEST_ASSERT(cxJsonCompare(json[5], json[6]) == 0); |
| |
1400 CX_TEST_ASSERT(cxJsonCompare(json[6], json[5]) == 0); |
| |
1401 |
| |
1402 // object has a deep difference |
| |
1403 CX_TEST_ASSERT(cxJsonCompare(json[5], json[8]) != 0); |
| |
1404 CX_TEST_ASSERT(cxJsonCompare(json[8], json[5]) != 0); |
| |
1405 |
| |
1406 // equal except for the member order |
| |
1407 CX_TEST_ASSERT(cxJsonCompare(json[5], json[9]) == 0); |
| |
1408 CX_TEST_ASSERT(cxJsonCompare(json[6], json[9]) == 0); |
| |
1409 CX_TEST_ASSERT(cxJsonCompare(json[9], json[5]) == 0); |
| |
1410 CX_TEST_ASSERT(cxJsonCompare(json[9], json[6]) == 0); |
| 1366 } |
1411 } |
| 1367 |
1412 |
| 1368 for(int i=0;i<7;i++) { |
1413 for(unsigned i=0;i<cx_nmemb(json);i++) { |
| 1369 cxJsonValueFree(json[i]); |
1414 cxJsonValueFree(json[i]); |
| 1370 } |
1415 } |
| 1371 } |
1416 } |
| 1372 |
1417 |
| 1373 CX_TEST(test_json_compare_arrays) { |
1418 CX_TEST(test_json_compare_arrays) { |