First cut at testsuite for json/prefs

This commit is contained in:
Aaron Culliney
2016-02-25 20:46:41 -08:00
parent b5dfd86310
commit 6e978810db
5 changed files with 264 additions and 200 deletions

View File

@@ -290,196 +290,3 @@ void json_destroy(JSON_s *parsedData) {
FREE(parsedData->jsonTokens);
}
#if TEST_JSON
bool do_logging = true;
FILE *error_log = NULL;
// Runs jsmn against an arbitrary a test_file.json
static void _dumpJSON(JSON_s parsedData) {
fprintf(stderr, "TOK COUNT:%d\n", parsedData.numTokens);
for (int i=0; i<parsedData.numTokens; i++) {
fprintf(stderr, "%6d %s", i, "type:");
switch(parsedData.jsonTokens[i].type) {
case JSMN_PRIMITIVE:
fprintf(stderr, "%s", "PRIMITIVE ");
break;
case JSMN_OBJECT:
fprintf(stderr, "%s", "OBJECT ");
break;
case JSMN_ARRAY:
fprintf(stderr, "%s", "ARRAY ");
break;
case JSMN_STRING:
fprintf(stderr, "%s", "STRING ");
break;
default:
fprintf(stderr, "%s", "UNKNOWN ");
break;
}
jsmntok_t tok = parsedData.jsonTokens[i];
int start = tok.start;
int end = tok.end;
fprintf(stderr, "start:%6d end:%6d size:%6d skipIdx:%6d parent:%3d", start, end, tok.size, tok.skip, tok.parent);
if (tok.type == JSMN_STRING || tok.type == JSMN_PRIMITIVE) {
char lastChar = parsedData.jsonString[end];
parsedData.jsonString[end] = '\0';
fprintf(stderr, " VALUE:%s", &parsedData.jsonString[start]);
parsedData.jsonString[end] = lastChar;
}
fprintf(stderr, "%s", "\n");
}
}
int main(int argc, char **argv) {
error_log = stderr;
if (argc < 2) {
fprintf(stderr, "Please specify a JSON file to parse on CLI, e.g. : %s path/to/some_file.json\n", argv[0]);
exit(1);
}
JSON_s parsedData = { 0 };
int tokCount = json_createFromFile(argv[1], &parsedData);
if (tokCount < 0) {
return 1;
}
fprintf(stderr, "-------------------------------------------------------------------------------\n");
fprintf(stderr, "DUMPING FILE %s ...\n", argv[1]);
fprintf(stderr, "-------------------------------------------------------------------------------\n");
fprintf(stderr, "\n");
_dumpJSON(parsedData);
json_destroy(&parsedData);
fprintf(stderr, "\n");
fprintf(stderr, "-------------------------------------------------------------------------------\n");
fprintf(stderr, "NOW TESTING MAP FUNCTIONS...\n");
fprintf(stderr, "-------------------------------------------------------------------------------\n");
fprintf(stderr, "\n");
const char *testMapStr0 =
" { "
" \"key0\" : \"a value zero\", "
" \"key1\" : \" \", "
" \"key2\" : { \n"
"} , "
" \"key3\" : { \n"
" \"subkey0\" : \"subval0\", "
" \"subkey1\" : { \"moar\" : \"recursion\" } , "
" \"subkey2\" : \"line0 \n"
" line1 "
" line2\" \n"
"}, "
" \"key4\" : [ \"Q\", \"W\", \"E\", "
" \"R\", \"T\", \"Y\", \"U\", \"I\", "
" \"O\", \"P\", { \"x\" : [ 22, 4, \"ab\" ] } ],"
" \"intKey0\" : 42 , "
" \"key5\" : \"\" , "
" \"intKey1\" : -101, "
" \"intKey2\" : -000000000, "
" \"intKey3\" : 0x2400, "
" \"intKey4\" : 10111111, "
" \"floatKey0\" : 0.0 , "
" \"floatKey1\" : -.0001220703125 ,"
" \"floatKey2\" : 3.1415928 , "
" \"floatKey3\" : -3.1e2 "
" } "
;
tokCount = json_createFromString(testMapStr0, &parsedData);
if (tokCount < 0) {
return 1;
}
_dumpJSON(parsedData);
long lVal;
float fVal;
char *val;
json_mapParseLongValue(&parsedData, "intKey2", &lVal, 10);
assert(lVal == 0);
json_mapCopyStringValue(&parsedData, "key0", &val);
assert(strcmp(val, "a value zero") == 0);
STRDUP_FREE(val);
json_mapCopyStringValue(&parsedData, "key1", &val);
assert(strcmp(val, " \t ") == 0);
STRDUP_FREE(val);
json_mapCopyStringValue(&parsedData, "key2", &val);
assert(strcmp(val, "{ \t \n}") == 0);
STRDUP_FREE(val);
json_mapCopyStringValue(&parsedData, "key3", &val);
assert(strcmp(val, "{ \t \n \"subkey0\" : \"subval0\", \"subkey1\" : { \"moar\" : \"recursion\" } , \"subkey2\" : \"line0 \n \tline1 \tline2\" \n}") == 0);
{
JSON_s parsedSubData = { 0 };
int tokSubCount = json_createFromString(val, &parsedSubData);
if (tokSubCount < 0) {
return 1;
}
char *subval;
json_mapCopyStringValue(&parsedSubData, "subkey0", &subval);
assert(strcmp(subval, "subval0") == 0);
STRDUP_FREE(subval);
json_mapCopyStringValue(&parsedSubData, "subkey1", &subval);
assert(strcmp(subval, "{ \"moar\" : \"recursion\" }") == 0);
STRDUP_FREE(subval);
json_mapCopyStringValue(&parsedSubData, "subkey2", &subval);
assert(strcmp(subval, "line0 \n \tline1 \tline2") == 0);
STRDUP_FREE(subval);
}
STRDUP_FREE(val);
json_mapCopyStringValue(&parsedData, "key4", &val);
assert(strcmp(val, "[ \"Q\", \"W\", \"E\", \"R\", \"T\", \"Y\", \"U\", \"I\", \"O\", \"P\", { \"x\" : [ 22, 4, \"ab\" ] } ]") == 0);
// TODO : subarray checks
STRDUP_FREE(val);
json_mapCopyStringValue(&parsedData, "key5", &val);
assert(strcmp(val, "") == 0);
STRDUP_FREE(val);
json_mapParseLongValue(&parsedData, "intKey0", &lVal, 10);
assert(lVal == 42);
json_mapParseLongValue(&parsedData, "intKey1", &lVal, 10);
assert(lVal == -101);
json_mapParseLongValue(&parsedData, "intKey3", &lVal, 16);
assert(lVal == 0x2400);
json_mapParseLongValue(&parsedData, "intKey4", &lVal, 2);
assert(lVal == 191);
json_mapParseLongValue(&parsedData, "intKey4", &lVal, 10);
assert(lVal == 10111111);
json_mapParseFloatValue(&parsedData, "floatKey0", &fVal);
assert(fVal == 0.f);
json_mapParseFloatValue(&parsedData, "floatKey1", &fVal);
assert(fVal == -.0001220703125);
json_mapParseFloatValue(&parsedData, "floatKey2", &fVal);
assert((long)(fVal*10000000) == 31415928);
json_mapParseFloatValue(&parsedData, "floatKey3", &fVal);
assert((long)fVal == -310);
json_destroy(&parsedData);
fprintf(stderr, "...map functions passed\n");
return 0;
}
#endif