mirror of
https://github.com/mauiaaron/apple2.git
synced 2025-06-05 10:45:49 +00:00
Moar JSON/prefs tests including new array tests
This commit is contained in:
parent
b065da9f4b
commit
a03c074a52
@ -90,23 +90,29 @@ TEST test_json_map_0(JSON_ref parsedData) {
|
||||
long lVal;
|
||||
float fVal;
|
||||
char *val;
|
||||
bool ok = false;
|
||||
|
||||
json_mapParseLongValue(parsedData, "intKey2", &lVal, 10);
|
||||
ok = json_mapParseLongValue(parsedData, "intKey2", &lVal, 10);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 0);
|
||||
|
||||
json_mapCopyStringValue(parsedData, "key0", &val);
|
||||
ok = json_mapCopyStringValue(parsedData, "key0", &val);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(val, "a value zero") == 0);
|
||||
FREE(val);
|
||||
|
||||
json_mapCopyStringValue(parsedData, "key1", &val);
|
||||
ok = json_mapCopyStringValue(parsedData, "key1", &val);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(val, " \t ") == 0);
|
||||
FREE(val);
|
||||
|
||||
json_mapCopyStringValue(parsedData, "key2", &val);
|
||||
ok = json_mapCopyStringValue(parsedData, "key2", &val);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(val, "{ \t \n}") == 0);
|
||||
FREE(val);
|
||||
|
||||
json_mapCopyStringValue(parsedData, "key3", &val);
|
||||
ok = json_mapCopyStringValue(parsedData, "key3", &val);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(val, "{ \t \n \"subkey0\" : \"subval0\", \"subkey1\" : { \"moar\" : \"recursion\" } , \"subkey2\" : \"line0 \n \tline1 \tline2\" \n}") == 0);
|
||||
do {
|
||||
JSON_ref parsedSubData = NULL;
|
||||
@ -114,15 +120,18 @@ TEST test_json_map_0(JSON_ref parsedData) {
|
||||
ASSERT(tokSubCount > 0);
|
||||
|
||||
char *subval;
|
||||
json_mapCopyStringValue(parsedSubData, "subkey0", &subval);
|
||||
ok = json_mapCopyStringValue(parsedSubData, "subkey0", &subval);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(subval, "subval0") == 0);
|
||||
FREE(subval);
|
||||
|
||||
json_mapCopyStringValue(parsedSubData, "subkey1", &subval);
|
||||
ok = json_mapCopyStringValue(parsedSubData, "subkey1", &subval);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(subval, "{ \"moar\" : \"recursion\" }") == 0);
|
||||
FREE(subval);
|
||||
|
||||
json_mapCopyStringValue(parsedSubData, "subkey2", &subval);
|
||||
ok = json_mapCopyStringValue(parsedSubData, "subkey2", &subval);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(subval, "line0 \n \tline1 \tline2") == 0);
|
||||
FREE(subval);
|
||||
|
||||
@ -130,40 +139,110 @@ TEST test_json_map_0(JSON_ref parsedData) {
|
||||
} while (0);
|
||||
FREE(val);
|
||||
|
||||
json_mapCopyStringValue(parsedData, "key4", &val);
|
||||
ok = json_mapCopyStringValue(parsedData, "key4", &val);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(val, "[ \"Q\", \"W\", \"E\", \"R\", \"T\", \"Y\", \"U\", \"I\", \"O\", \"P\", { \"x\" : [ 22, 4, \"ab\" ] } ]") == 0);
|
||||
// TODO : subarray checks
|
||||
FREE(val);
|
||||
|
||||
json_mapCopyStringValue(parsedData, "key5", &val);
|
||||
JSON_ref array = NULL;
|
||||
int errCount = json_mapCopyJSON(parsedData, "key4", &array);
|
||||
ASSERT(errCount > 0);
|
||||
ASSERT(array);
|
||||
ASSERT(!json_isMap(array));
|
||||
ASSERT(json_isArray(array));
|
||||
ASSERT(json_isMap(parsedData));
|
||||
ASSERT(!json_isArray(parsedData));
|
||||
|
||||
ok = json_arrayCount(array, &lVal);
|
||||
ASSERT(lVal == 11);
|
||||
|
||||
ok = json_arrayCopyStringValueAtIndex(array, 3, &val);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(val, "R") == 0);
|
||||
FREE(val);
|
||||
|
||||
do {
|
||||
JSON_ref submap = NULL;
|
||||
|
||||
errCount = json_arrayCopyJSONAtIndex(array, 42, &submap);
|
||||
ASSERT(errCount < 0);
|
||||
ASSERT(!submap);
|
||||
|
||||
errCount = json_arrayCopyJSONAtIndex(array, -1, &submap);
|
||||
ASSERT(errCount < 0);
|
||||
ASSERT(!submap);
|
||||
|
||||
errCount = json_arrayCopyJSONAtIndex(array, 10, &submap);
|
||||
ASSERT(errCount > 0);
|
||||
ASSERT(submap);
|
||||
ASSERT(json_isMap(submap));
|
||||
|
||||
do {
|
||||
JSON_ref subary = NULL;
|
||||
errCount = json_mapCopyJSON(submap, "x", &subary);
|
||||
ASSERT(errCount > 1);
|
||||
ASSERT(subary);
|
||||
ASSERT(json_isArray(subary));
|
||||
|
||||
ok = json_arrayCount(subary, &lVal);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 3);
|
||||
|
||||
ok = json_arrayParseLongValueAtIndex(subary, 0, &lVal, /*base:*/10);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 22);
|
||||
|
||||
ok = json_arrayParseFloatValueAtIndex(subary, 1, &fVal);
|
||||
ASSERT(ok);
|
||||
ASSERT(fVal == 4.f);
|
||||
|
||||
json_destroy(&subary);
|
||||
} while (0);
|
||||
|
||||
json_destroy(&submap);
|
||||
} while (0);
|
||||
|
||||
json_destroy(&array);
|
||||
|
||||
ok = json_mapCopyStringValue(parsedData, "key5", &val);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(val, "") == 0);
|
||||
FREE(val);
|
||||
|
||||
json_mapParseLongValue(parsedData, "intKey0", &lVal, 10);
|
||||
ok = json_mapParseLongValue(parsedData, "intKey0", &lVal, 10);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 42);
|
||||
|
||||
json_mapParseLongValue(parsedData, "intKey1", &lVal, 10);
|
||||
ok = json_mapParseLongValue(parsedData, "intKey1", &lVal, 10);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == -101);
|
||||
|
||||
json_mapParseLongValue(parsedData, "intKey3", &lVal, 16);
|
||||
ok = json_mapParseLongValue(parsedData, "intKey3", &lVal, 16);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 0x2400);
|
||||
|
||||
json_mapParseLongValue(parsedData, "intKey4", &lVal, 2);
|
||||
ok = json_mapParseLongValue(parsedData, "intKey4", &lVal, 2);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 191);
|
||||
|
||||
json_mapParseLongValue(parsedData, "intKey4", &lVal, 10);
|
||||
ok = json_mapParseLongValue(parsedData, "intKey4", &lVal, 10);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 10111111);
|
||||
|
||||
json_mapParseFloatValue(parsedData, "floatKey0", &fVal);
|
||||
ok = json_mapParseFloatValue(parsedData, "floatKey0", &fVal);
|
||||
ASSERT(ok);
|
||||
ASSERT(fVal == 0.f);
|
||||
|
||||
json_mapParseFloatValue(parsedData, "floatKey1", &fVal);
|
||||
ok = json_mapParseFloatValue(parsedData, "floatKey1", &fVal);
|
||||
ASSERT(ok);
|
||||
ASSERT(fVal == -.0001220703125);
|
||||
|
||||
json_mapParseFloatValue(parsedData, "floatKey2", &fVal);
|
||||
ok = json_mapParseFloatValue(parsedData, "floatKey2", &fVal);
|
||||
ASSERT(ok);
|
||||
ASSERT((long)(fVal*10000000) == 31415928);
|
||||
|
||||
json_mapParseFloatValue(parsedData, "floatKey3", &fVal);
|
||||
ok = json_mapParseFloatValue(parsedData, "floatKey3", &fVal);
|
||||
ASSERT(ok);
|
||||
ASSERT((long)fVal == -310);
|
||||
|
||||
PASS();
|
||||
@ -212,68 +291,101 @@ TEST test_json_serialization() {
|
||||
|
||||
TEST test_json_serialization_pretty() {
|
||||
|
||||
bool ok = false;
|
||||
|
||||
const char *testMapStr0 = get_sample_json_0();
|
||||
|
||||
JSON_ref parsedData = NULL;
|
||||
int tokCount = json_createFromString(testMapStr0, &parsedData);
|
||||
ASSERT(tokCount > 0);
|
||||
ASSERT(parsedData);
|
||||
|
||||
char *str = STRDUP("/tmp/json-pretty-XXXXXX");
|
||||
int fd = mkstemp(str);
|
||||
ASSERT(fd > 0);
|
||||
FREE(str);
|
||||
|
||||
json_serialize(parsedData, fd, /*pretty:*/true);
|
||||
ok = json_serialize(parsedData, fd, /*pretty:*/true);
|
||||
ASSERT(ok);
|
||||
json_destroy(&parsedData);
|
||||
ASSERT(!parsedData);
|
||||
|
||||
lseek(fd, 0, SEEK_SET);
|
||||
tokCount = json_createFromFD(fd, &parsedData);
|
||||
ASSERT(tokCount > 0);
|
||||
ASSERT(parsedData);
|
||||
|
||||
close(fd);
|
||||
|
||||
do {
|
||||
long lVal;
|
||||
float fVal;
|
||||
char *val;
|
||||
long lVal = 42;
|
||||
float fVal = -1.f;
|
||||
char *val = (char *)0xdeadc0de;
|
||||
|
||||
json_mapParseLongValue(parsedData, "intKey2", &lVal, 10);
|
||||
ok = json_mapParseLongValue(parsedData, "nonexistentKey0", &lVal, 10);
|
||||
ASSERT(!ok);
|
||||
ASSERT(lVal == 42);
|
||||
|
||||
ok = json_mapParseFloatValue(parsedData, "nonexistentKey1", &fVal);
|
||||
ASSERT(!ok);
|
||||
ASSERT(fVal == -1.f);
|
||||
|
||||
ok = json_mapCopyStringValue(parsedData, "nonexistentKey2", &val);
|
||||
ASSERT(!ok);
|
||||
ASSERT(val == (char *)0xdeadc0de);
|
||||
|
||||
ok = json_mapParseLongValue(parsedData, "intKey2", &lVal, 10);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 0);
|
||||
|
||||
json_mapCopyStringValue(parsedData, "key0", &val);
|
||||
ok = json_mapCopyStringValue(parsedData, "key0", &val);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(val, "a value zero") == 0);
|
||||
FREE(val);
|
||||
|
||||
json_mapCopyStringValue(parsedData, "key1", &val);
|
||||
ok = json_mapCopyStringValue(parsedData, "key1", &val);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(val, " \t ") == 0);
|
||||
FREE(val);
|
||||
|
||||
json_mapCopyStringValue(parsedData, "key2", &val);
|
||||
ok = json_mapCopyStringValue(parsedData, "key2", &val);
|
||||
ASSERT(ok);
|
||||
do {
|
||||
JSON_ref parsedSubData = NULL;
|
||||
int tokSubCount = json_createFromString(val, &parsedSubData);
|
||||
ASSERT(tokSubCount == 1);
|
||||
ASSERT(parsedSubData);
|
||||
ASSERT(((JSON_s *)parsedSubData)->jsonTokens[0].type == JSMN_OBJECT);
|
||||
ASSERT(json_isMap(parsedSubData));
|
||||
json_destroy(&parsedSubData);
|
||||
} while (0);
|
||||
FREE(val);
|
||||
|
||||
json_mapCopyStringValue(parsedData, "key3", &val);
|
||||
ok = json_mapCopyStringValue(parsedData, "key3", &val);
|
||||
ASSERT(ok);
|
||||
do {
|
||||
JSON_ref parsedSubData = NULL;
|
||||
int tokSubCount = json_createFromString(val, &parsedSubData);
|
||||
ASSERT(tokSubCount == 9);
|
||||
ASSERT(parsedSubData);
|
||||
|
||||
char *subval;
|
||||
json_mapCopyStringValue(parsedSubData, "subkey0", &subval);
|
||||
char *subval = NULL;
|
||||
ok = json_mapCopyStringValue(parsedSubData, "subkey0", &subval);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(subval, "subval0") == 0);
|
||||
FREE(subval);
|
||||
|
||||
json_mapCopyStringValue(parsedSubData, "subkey1", &subval);
|
||||
ok = json_mapCopyStringValue(parsedSubData, "subkey1", &subval);
|
||||
ASSERT(ok);
|
||||
do {
|
||||
JSON_ref parsedSubSubData = NULL;
|
||||
int tokSubSubCount = json_createFromString(subval, &parsedSubSubData);
|
||||
ASSERT(tokSubSubCount == 3);
|
||||
ASSERT(parsedSubSubData);
|
||||
|
||||
char *subsubval;
|
||||
json_mapCopyStringValue(parsedSubSubData, "moar", &subsubval);
|
||||
ok = json_mapCopyStringValue(parsedSubSubData, "moar", &subsubval);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(subsubval, "recursion") == 0);
|
||||
FREE(subsubval);
|
||||
|
||||
@ -281,7 +393,8 @@ TEST test_json_serialization_pretty() {
|
||||
} while (0);
|
||||
FREE(subval);
|
||||
|
||||
json_mapCopyStringValue(parsedSubData, "subkey2", &subval);
|
||||
ok = json_mapCopyStringValue(parsedSubData, "subkey2", &subval);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(subval, "line0 \n \tline1 \tline2") == 0);
|
||||
FREE(subval);
|
||||
|
||||
@ -289,45 +402,59 @@ TEST test_json_serialization_pretty() {
|
||||
} while (0);
|
||||
FREE(val);
|
||||
|
||||
json_mapCopyStringValue(parsedData, "key4", &val);
|
||||
ok = json_mapCopyStringValue(parsedData, "key4", &val);
|
||||
ASSERT(ok);
|
||||
do {
|
||||
JSON_ref parsedSubData = NULL;
|
||||
int tokSubCount = json_createFromString(val, &parsedSubData);
|
||||
ASSERT(tokSubCount == 17);
|
||||
// TODO : subarray checks
|
||||
ASSERT(parsedSubData);
|
||||
ASSERT(json_isArray(parsedSubData));
|
||||
ok = json_arrayCount(parsedSubData, &lVal);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 11);
|
||||
json_destroy(&parsedSubData);
|
||||
} while (0);
|
||||
FREE(val);
|
||||
|
||||
json_mapCopyStringValue(parsedData, "key5", &val);
|
||||
ok = json_mapCopyStringValue(parsedData, "key5", &val);
|
||||
ASSERT(strcmp(val, "") == 0);
|
||||
FREE(val);
|
||||
|
||||
json_mapParseLongValue(parsedData, "intKey0", &lVal, 10);
|
||||
ok = json_mapParseLongValue(parsedData, "intKey0", &lVal, 10);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 42);
|
||||
|
||||
json_mapParseLongValue(parsedData, "intKey1", &lVal, 10);
|
||||
ok = json_mapParseLongValue(parsedData, "intKey1", &lVal, 10);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == -101);
|
||||
|
||||
json_mapParseLongValue(parsedData, "intKey3", &lVal, 16);
|
||||
ok = json_mapParseLongValue(parsedData, "intKey3", &lVal, 16);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 0x2400);
|
||||
|
||||
json_mapParseLongValue(parsedData, "intKey4", &lVal, 2);
|
||||
ok = json_mapParseLongValue(parsedData, "intKey4", &lVal, 2);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 191);
|
||||
|
||||
json_mapParseLongValue(parsedData, "intKey4", &lVal, 10);
|
||||
ok = json_mapParseLongValue(parsedData, "intKey4", &lVal, 10);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 10111111);
|
||||
|
||||
json_mapParseFloatValue(parsedData, "floatKey0", &fVal);
|
||||
ok = json_mapParseFloatValue(parsedData, "floatKey0", &fVal);
|
||||
ASSERT(ok);
|
||||
ASSERT(fVal == 0.f);
|
||||
|
||||
json_mapParseFloatValue(parsedData, "floatKey1", &fVal);
|
||||
ok = json_mapParseFloatValue(parsedData, "floatKey1", &fVal);
|
||||
ASSERT(ok);
|
||||
ASSERT(fVal == -.0001220703125);
|
||||
|
||||
json_mapParseFloatValue(parsedData, "floatKey2", &fVal);
|
||||
ok = json_mapParseFloatValue(parsedData, "floatKey2", &fVal);
|
||||
ASSERT(ok);
|
||||
ASSERT((long)(fVal*10000000) == 31415928);
|
||||
|
||||
json_mapParseFloatValue(parsedData, "floatKey3", &fVal);
|
||||
ok = json_mapParseFloatValue(parsedData, "floatKey3", &fVal);
|
||||
ASSERT(ok);
|
||||
ASSERT((long)fVal == -310);
|
||||
} while (0);
|
||||
|
||||
@ -337,6 +464,240 @@ TEST test_json_serialization_pretty() {
|
||||
PASS();
|
||||
}
|
||||
|
||||
TEST test_json_resilient_api() {
|
||||
JSON_ref map = NULL;
|
||||
JSON_ref array = NULL;
|
||||
|
||||
bool ok = true;
|
||||
bool bVal = false;
|
||||
long lVal = 0;
|
||||
float fVal = 0.f;
|
||||
char *val = NULL;
|
||||
JSON_ref jsonRef = NULL;
|
||||
|
||||
int errCount = json_createFromString("{ \"aKey\" : \"42\", \"aKey2\" : true }", &map);
|
||||
ASSERT(errCount == 5);
|
||||
ASSERT(map);
|
||||
ASSERT(json_isMap(map));
|
||||
|
||||
errCount = json_createFromString("[ \"item0\", \"item1\" ]", &array);
|
||||
ASSERT(errCount == 3);
|
||||
ASSERT(array);
|
||||
ASSERT(json_isArray(array));
|
||||
|
||||
// ...
|
||||
|
||||
ASSERT(!json_isMap((JSON_ref)NULL));
|
||||
ASSERT(!json_isArray((JSON_ref)NULL));
|
||||
|
||||
// ...
|
||||
|
||||
errCount = json_mapCopyJSON((JSON_ref)NULL, "aKey", &jsonRef);
|
||||
ASSERT(errCount < 0);
|
||||
ASSERT(!jsonRef);
|
||||
|
||||
errCount = json_mapCopyJSON(map, NULL, &jsonRef);
|
||||
ASSERT(errCount < 0);
|
||||
ASSERT(!jsonRef);
|
||||
|
||||
errCount = json_mapCopyJSON(map, "aKey", (JSON_ref *)NULL);
|
||||
ASSERT(errCount < 0);
|
||||
|
||||
// ...
|
||||
|
||||
ok = json_mapCopyStringValue((JSON_ref)NULL, "aKey", &val);
|
||||
ASSERT(!ok);
|
||||
ASSERT(!val);
|
||||
|
||||
ok = json_mapCopyStringValue(map, NULL, &val);
|
||||
ASSERT(!ok);
|
||||
ASSERT(!val);
|
||||
|
||||
ok = json_mapCopyStringValue(map, "aKey", (char **)NULL);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
|
||||
ok = json_mapParseLongValue((JSON_ref)NULL, "aKey", &lVal, /*base:*/10);
|
||||
ASSERT(!ok);
|
||||
ASSERT(lVal == 0);
|
||||
|
||||
ok = json_mapParseLongValue(map, NULL, &lVal, /*base:*/10);
|
||||
ASSERT(!ok);
|
||||
ASSERT(lVal == 0);
|
||||
|
||||
ok = json_mapParseLongValue(map, "aKey", (long *)NULL, /*base:*/10);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
|
||||
ok = json_mapParseFloatValue((JSON_ref)NULL, "aKey", &fVal);
|
||||
ASSERT(!ok);
|
||||
ASSERT(fVal == 0.f);
|
||||
|
||||
ok = json_mapParseFloatValue(map, NULL, &fVal);
|
||||
ASSERT(!ok);
|
||||
ASSERT(fVal == 0.f);
|
||||
|
||||
ok = json_mapParseFloatValue(map, "aKey", (float *)NULL);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
|
||||
ok = json_mapParseBoolValue((JSON_ref)NULL, "aKey2", &bVal);
|
||||
ASSERT(!ok);
|
||||
ASSERT(bVal == 0.f);
|
||||
|
||||
ok = json_mapParseBoolValue(map, NULL, &bVal);
|
||||
ASSERT(!ok);
|
||||
ASSERT(bVal == 0.f);
|
||||
|
||||
ok = json_mapParseBoolValue(map, "aKey2", (bool *)NULL);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
|
||||
ok = json_mapSetStringValue((JSON_ref)NULL, "aKey", "aVal");
|
||||
ASSERT(!ok);
|
||||
|
||||
ok = json_mapSetStringValue(map, NULL, "aVal");
|
||||
ASSERT(!ok);
|
||||
|
||||
ok = json_mapSetStringValue((JSON_ref)map, "aKey", NULL);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
|
||||
ok = json_mapSetRawStringValue((JSON_ref)NULL, "aKey", "\"aVal\"");
|
||||
ASSERT(!ok);
|
||||
|
||||
ok = json_mapSetRawStringValue(map, NULL, "\"aVal\"");
|
||||
ASSERT(!ok);
|
||||
|
||||
ok = json_mapSetRawStringValue((JSON_ref)map, "aKey", NULL);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
|
||||
ok = json_mapSetJSONValue((JSON_ref)NULL, "aKey", array);
|
||||
ASSERT(!ok);
|
||||
|
||||
ok = json_mapSetJSONValue(map, NULL, array);
|
||||
ASSERT(!ok);
|
||||
|
||||
ok = json_mapSetJSONValue((JSON_ref)map, "aKey", NULL);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
|
||||
ok = json_mapSetLongValue((JSON_ref)NULL, "aKey", 22);
|
||||
ASSERT(!ok);
|
||||
|
||||
ok = json_mapSetLongValue(map, NULL, 22);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
|
||||
ok = json_mapSetBoolValue((JSON_ref)NULL, "aKey", true);
|
||||
ASSERT(!ok);
|
||||
|
||||
ok = json_mapSetBoolValue(map, NULL, true);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
|
||||
ok = json_mapSetFloatValue((JSON_ref)NULL, "aKey", -1.25);
|
||||
ASSERT(!ok);
|
||||
|
||||
ok = json_mapSetFloatValue(map, NULL, -1.25);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
|
||||
ok = json_mapParseLongValue(map, "aKey", &lVal, /*base:*/10);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 42);
|
||||
|
||||
ok = json_mapParseBoolValue(map, "aKey2", &bVal);
|
||||
ASSERT(ok);
|
||||
ASSERT(bVal == true);
|
||||
|
||||
// ...
|
||||
|
||||
errCount = json_arrayCopyJSONAtIndex((JSON_ref)NULL, 0, &jsonRef);
|
||||
ASSERT(errCount < 0);
|
||||
ASSERT(!jsonRef);
|
||||
|
||||
errCount = json_arrayCopyJSONAtIndex(array, 100, &jsonRef);
|
||||
ASSERT(errCount < 0);
|
||||
ASSERT(!jsonRef);
|
||||
|
||||
errCount = json_arrayCopyJSONAtIndex(array, 0, (JSON_ref *)NULL);
|
||||
ASSERT(errCount < 0);
|
||||
|
||||
// ...
|
||||
|
||||
ok = json_arrayCopyStringValueAtIndex((JSON_ref)NULL, 0, &val);
|
||||
ASSERT(!ok);
|
||||
ASSERT(!val);
|
||||
|
||||
ok = json_arrayCopyStringValueAtIndex(array, 100, &val);
|
||||
ASSERT(!ok);
|
||||
ASSERT(!val);
|
||||
|
||||
ok = json_arrayCopyStringValueAtIndex(array, 0, (char **)NULL);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
lVal = 0;
|
||||
|
||||
ok = json_arrayParseLongValueAtIndex((JSON_ref)NULL, 0, &lVal, /*base:*/10);
|
||||
ASSERT(!ok);
|
||||
ASSERT(lVal == 0);
|
||||
|
||||
ok = json_arrayParseLongValueAtIndex(array, 100, &lVal, /*base:*/10);
|
||||
ASSERT(!ok);
|
||||
ASSERT(lVal == 0);
|
||||
|
||||
ok = json_arrayParseLongValueAtIndex(array, 0, (long *)NULL, /*base:*/10);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
fVal = 0.0;
|
||||
|
||||
ok = json_arrayParseFloatValueAtIndex((JSON_ref)NULL, 0, &fVal);
|
||||
ASSERT(!ok);
|
||||
ASSERT(fVal == 0.f);
|
||||
|
||||
ok = json_arrayParseFloatValueAtIndex(array, 100, &fVal);
|
||||
ASSERT(!ok);
|
||||
ASSERT(fVal == 0.f);
|
||||
|
||||
ok = json_arrayParseFloatValueAtIndex(array, 0, (float *)NULL);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
bVal = false;
|
||||
|
||||
ok = json_arrayParseBoolValueAtIndex((JSON_ref)NULL, 0, &bVal);
|
||||
ASSERT(!ok);
|
||||
ASSERT(bVal == 0.f);
|
||||
|
||||
ok = json_arrayParseBoolValueAtIndex(array, 100, &bVal);
|
||||
ASSERT(!ok);
|
||||
ASSERT(bVal == 0.f);
|
||||
|
||||
ok = json_arrayParseBoolValueAtIndex(array, 0, (bool *)NULL);
|
||||
ASSERT(!ok);
|
||||
|
||||
// ...
|
||||
|
||||
json_destroy(&array);
|
||||
json_destroy(&map);
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
TEST test_json_raw_bool() {
|
||||
|
||||
JSON_ref parsedData = NULL;
|
||||
@ -1241,8 +1602,8 @@ TEST test_json_map_mutation_1() {
|
||||
do {
|
||||
JSON_ref parsedSubData = NULL;
|
||||
|
||||
ok = json_mapCopyJSON(parsedData, "key2", &parsedSubData);
|
||||
ASSERT(ok);
|
||||
int errCount = json_mapCopyJSON(parsedData, "key2", &parsedSubData);
|
||||
ASSERT(errCount > 0);
|
||||
ASSERT(parsedSubData);
|
||||
|
||||
ok = json_mapCopyStringValue(parsedSubData, "foo", &val);
|
||||
@ -1256,8 +1617,8 @@ TEST test_json_map_mutation_1() {
|
||||
FREE(val);
|
||||
do {
|
||||
JSON_ref parsedSubSubData = NULL;
|
||||
ok = json_mapCopyJSON(parsedSubData, "subKey0", &parsedSubSubData);
|
||||
ASSERT(ok);
|
||||
errCount = json_mapCopyJSON(parsedSubData, "subKey0", &parsedSubSubData);
|
||||
ASSERT(errCount > 0);
|
||||
ASSERT(parsedSubSubData);
|
||||
|
||||
ok = json_mapCopyStringValue(parsedSubSubData, "subFoo", &val);
|
||||
@ -1292,6 +1653,82 @@ TEST test_json_map_mutation_1() {
|
||||
PASS();
|
||||
}
|
||||
|
||||
TEST test_json_array() {
|
||||
|
||||
long lVal = 0;
|
||||
float fVal = 0.f;
|
||||
bool bVal = false;
|
||||
char *val = NULL;
|
||||
|
||||
JSON_ref array = NULL;
|
||||
int errCount = json_createFromString("[ [ \"bar\" ], \"foo\", -21, 123.125e2, true, { \"aKey\" : \"aVal\" } ]", &array);
|
||||
ASSERT(errCount == 10);
|
||||
ASSERT(array);
|
||||
ASSERT(json_isArray(array));
|
||||
bool ok = json_arrayCount(array, &lVal);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == 6);
|
||||
|
||||
int index = 0;
|
||||
|
||||
do {
|
||||
JSON_ref subary = NULL;
|
||||
errCount = json_arrayCopyJSONAtIndex(array, index++, &subary);
|
||||
ASSERT(errCount == 2);
|
||||
ASSERT(subary);
|
||||
ASSERT(json_isArray(subary));
|
||||
|
||||
ok = json_arrayCopyStringValueAtIndex(subary, 0, &val);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(val, "bar") == 0);
|
||||
FREE(val);
|
||||
|
||||
json_destroy(&subary);
|
||||
} while (0);
|
||||
|
||||
ok = json_arrayCopyStringValueAtIndex(array, index++, &val);
|
||||
ASSERT(ok);
|
||||
ASSERT(strcmp(val, "foo") == 0);
|
||||
FREE(val);
|
||||
|
||||
ok = json_arrayParseLongValueAtIndex(array, index++, &lVal, /*base:*/10);
|
||||
ASSERT(ok);
|
||||
ASSERT(lVal == -21);
|
||||
|
||||
ok = json_arrayParseFloatValueAtIndex(array, index++, &fVal);
|
||||
ASSERT(ok);
|
||||
ASSERT(fVal == 12312.5);
|
||||
|
||||
ok = json_arrayParseBoolValueAtIndex(array, index++, &bVal);
|
||||
ASSERT(ok);
|
||||
ASSERT(bVal == true);
|
||||
|
||||
do {
|
||||
JSON_ref submap = NULL;
|
||||
errCount = json_arrayCopyJSONAtIndex(array, index++, &submap);
|
||||
ASSERT(errCount == 3);
|
||||
ASSERT(submap);
|
||||
ASSERT(json_isMap(submap));
|
||||
|
||||
ok = json_mapCopyStringValue(submap, "aKey", &val);
|
||||
ASSERT(ok);
|
||||
ASSERT(val);
|
||||
ASSERT(strcmp(val, "aVal") == 0);
|
||||
FREE(val);
|
||||
|
||||
json_destroy(&submap);
|
||||
} while (0);
|
||||
|
||||
ok = json_arrayCopyStringValueAtIndex(array, index++, &val);
|
||||
ASSERT(!ok);
|
||||
ASSERT(!val);
|
||||
FREE(val);
|
||||
|
||||
json_destroy(&array);
|
||||
|
||||
PASS();
|
||||
}
|
||||
|
||||
TEST test_prefs_loadString_1() {
|
||||
const char *prefsJSON = get_default_preferences();
|
||||
prefs_loadString(prefsJSON);
|
||||
@ -1486,6 +1923,8 @@ GREATEST_SUITE(test_suite_prefs) {
|
||||
RUN_TESTp(test_json_serialization);
|
||||
RUN_TESTp(test_json_serialization_pretty);
|
||||
|
||||
RUN_TESTp(test_json_resilient_api);
|
||||
|
||||
RUN_TESTp(test_json_raw_bool);
|
||||
RUN_TESTp(test_json_invalid_raw_bool);
|
||||
RUN_TESTp(test_json_raw_null);
|
||||
@ -1517,6 +1956,7 @@ GREATEST_SUITE(test_suite_prefs) {
|
||||
RUN_TESTp(test_json_map_invalid_arrayKey);
|
||||
|
||||
RUN_TESTp(test_json_map_mutation_1);
|
||||
RUN_TESTp(test_json_array);
|
||||
|
||||
RUN_TESTp(test_prefs_loadString_1);
|
||||
RUN_TESTp(test_prefs_set_props);
|
||||
|
Loading…
x
Reference in New Issue
Block a user