tests/test_json.c

changeset 1588
5c4ee11417c1
parent 1586
7f1cadc3ebc1
child 1589
7ab8b302d187
equal deleted inserted replaced
1587:7156d6699410 1588:5c4ee11417c1
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) {

mercurial