| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- #include "TestSuite.h"
- #include "../Source/JSONNode.h"
- #include <cstdlib>
- void TestSuite::TestInspectors(void){
- UnitTest::SetPrefix("TestInspectors.cpp - Inspectors");
- #ifdef JSON_LIBRARY
- JSONNODE * test = json_new(JSON_NULL);
- assertEquals(json_type(test), JSON_NULL);
- json_char * res = json_as_string(test);
- assertCStringSame(res, JSON_TEXT(""));
- json_free(res);
- assertEquals_Primitive(json_as_int(test), 0);
- assertEquals_Primitive(json_as_float(test), 0.0f);
- assertEquals(json_as_bool(test), false);
- json_set_f(test, 15.5f);
- assertEquals(json_type(test), JSON_NUMBER);
- #ifdef JSON_CASTABLE
- res = json_as_string(test);
- assertCStringSame(res, JSON_TEXT("15.5"));
- json_free(res);
- #endif
- assertEquals_Primitive(json_as_int(test), 15);
- assertEquals_Primitive(json_as_float(test), 15.5f);
- #ifdef JSON_CASTABLE
- assertEquals(json_as_bool(test), true);
- #endif
- json_set_f(test, 0.0f);
- assertEquals(json_type(test), JSON_NUMBER);
- #ifdef JSON_CASTABLE
- res = json_as_string(test);
- assertCStringSame(res, JSON_TEXT("0"));
- json_free(res);
- #endif
- assertEquals_Primitive(json_as_int(test), 0);
- assertEquals_Primitive(json_as_float(test), 0.0f);
- #ifdef JSON_CASTABLE
- assertEquals(json_as_bool(test), false);
- #endif
-
- json_set_b(test, true);
- assertEquals(json_type(test), JSON_BOOL);
- #ifdef JSON_CASTABLE
- res = json_as_string(test);
- assertCStringSame(res, JSON_TEXT("true"));
- json_free(res);
- assertEquals_Primitive(json_as_int(test), 1);
- assertEquals_Primitive(json_as_float(test), 1.0f);
- #endif
- assertEquals(json_as_bool(test), true);
- json_set_b(test, false);
- assertEquals(json_type(test), JSON_BOOL);
- #ifdef JSON_CASTABLE
- res = json_as_string(test);
- assertCStringSame(res, JSON_TEXT("false"));
- json_free(res);
- assertEquals_Primitive(json_as_int(test), 0);
- assertEquals_Primitive(json_as_float(test), 0.0f);
- #endif
- assertEquals(json_as_bool(test), false);
- #ifdef JSON_CASTABLE
- json_cast(test, JSON_NODE);
- assertEquals(json_type(test), JSON_NODE);
- assertEquals(json_size(test), 0);
- json_push_back(test, json_new_a(JSON_TEXT("hi"), JSON_TEXT("world")));
- json_push_back(test, json_new_a(JSON_TEXT("hello"), JSON_TEXT("mars")));
- json_push_back(test, json_new_a(JSON_TEXT("salut"), JSON_TEXT("france")));
- assertEquals(json_size(test), 3);
- TestSuite::testParsingItself(test);
- JSONNODE * casted = json_as_array(test);
- #ifdef JSON_UNIT_TEST
- assertNotEquals(((JSONNode*)casted) -> internal, ((JSONNode*)test) -> internal);
- #endif
- assertEquals(json_type(casted), JSON_ARRAY);
- assertEquals(json_type(test), JSON_NODE);
- assertEquals(json_size(test), 3);
- assertEquals(json_size(casted), 3);
- TestSuite::testParsingItself(casted);
- #endif
- UnitTest::SetPrefix("TestInspectors.cpp - Location");
- #ifdef JSON_CASTABLE
- #define CheckAt(parent, locale, text)\
- if(JSONNODE * temp = json_at(parent, locale)){\
- json_char * _res = json_as_string(temp);\
- assertCStringSame(_res, text);\
- json_free(_res);\
- } else {\
- FAIL(std::string("CheckAt: ") + #parent + "[" + #locale + "]");\
- }
- #define CheckNameAt(parent, locale, text)\
- if(JSONNODE * temp = json_at(parent, locale)){\
- json_char * _res = json_name(temp);\
- assertCStringSame(_res, text);\
- json_free(_res);\
- } else {\
- FAIL(std::string("CheckNameAt: ") + #parent + "[" + #locale + "]");\
- }
- CheckAt(casted, 0, JSON_TEXT("world"));
- CheckAt(casted, 1, JSON_TEXT("mars"));
- CheckAt(casted, 2, JSON_TEXT("france"));
- CheckNameAt(casted, 0, JSON_TEXT(""));
- CheckNameAt(casted, 1, JSON_TEXT(""));
- CheckNameAt(casted, 2, JSON_TEXT(""));
-
- CheckAt(test, 0, JSON_TEXT("world"));
- CheckAt(test, 1, JSON_TEXT("mars"));
- CheckAt(test, 2, JSON_TEXT("france"));
- CheckNameAt(test, 0, JSON_TEXT("hi"));
- CheckNameAt(test, 1, JSON_TEXT("hello"));
- CheckNameAt(test, 2, JSON_TEXT("salut"));
-
- #define CheckGet(parent, locale, text)\
- if(JSONNODE * temp = json_get(parent, locale)){\
- json_char * _res = json_as_string(temp);\
- assertCStringSame(_res, text);\
- json_free(_res);\
- } else {\
- FAIL(std::string("CheckGet: ") + #parent + "[" + #locale + "]");\
- }
- #ifdef JSON_CASE_INSENSITIVE_FUNCTIONS
- #define CheckGetNoCase(parent, locale, text)\
- if(JSONNODE * temp = json_get_nocase(parent, locale)){\
- json_char * _res = json_as_string(temp);\
- assertCStringSame(_res, text);\
- json_free(_res);\
- } else {\
- FAIL(std::string("CheckGetNoCase: ") + #parent + "[" + #locale + "]");\
- }
- #else
- #define CheckGetNoCase(parent, locale, text)
- #endif
- CheckGet(test, JSON_TEXT("hi"), JSON_TEXT("world"));
- CheckGetNoCase(test, JSON_TEXT("HI"), JSON_TEXT("world"));
- CheckGet(test, JSON_TEXT("hello"), JSON_TEXT("mars"));
- CheckGetNoCase(test, JSON_TEXT("HELLO"), JSON_TEXT("mars"));
- CheckGet(test, JSON_TEXT("salut"), JSON_TEXT("france"));
- CheckGetNoCase(test, JSON_TEXT("SALUT"), JSON_TEXT("france"));
-
- assertNull(json_get(test, JSON_TEXT("meh")));
- #ifdef JSON_CASE_INSENSITIVE_FUNCTIONS
- assertNull(json_get_nocase(test, JSON_TEXT("meh")));
- #endif
- #endif
- #ifdef JSON_ITERATORS
- #ifdef JSON_CASTABLE
- UnitTest::SetPrefix("TestInspectors.cpp - Iterators");
- for(JSONNODE_ITERATOR it = json_begin(casted), end = json_end(casted); it != end; ++it){
- json_char * _res = json_name(*it);
- assertCStringSame(_res, JSON_TEXT(""));
- json_free(_res);
- }
- #endif
- #endif
- #ifdef JSON_BINARY
- UnitTest::SetPrefix("TestInspectors.cpp - Binary");
- json_set_binary(test, (const unsigned char *)"Hello World", 11);
- assertEquals(json_type(test), JSON_STRING);
- json_char * _res = json_as_string(test);
- assertCStringSame(_res, JSON_TEXT("SGVsbG8gV29ybGQ="));
- json_free(_res);
- unsigned long i;
- if(char * bin = (char*)json_as_binary(test, &i)){
- assertEquals(i, 11);
- char * terminated = (char*)std::memcpy(std::malloc(i + 1), bin, i);
- terminated[i] = '\0';
- assertCStringEquals(terminated, "Hello World");
- json_free(bin);
- std::free(terminated);
- } else {
- FAIL("as_binary failed");
- }
- json_set_a(test, JSON_TEXT("Hello World"));
- assertEquals(json_type(test), JSON_STRING);
- _res = json_as_string(test);
- assertCStringSame(_res, JSON_TEXT("Hello World"));
- json_free(_res);
- #ifdef JSON_SAFE
- assertEquals(json_as_binary(test, &i), 0);
- assertEquals(i, 0);
- #endif
- #endif
- json_delete(test);
- #ifdef JSON_CASTABLE
- json_delete(casted);
- #endif
- #else
- JSONNode test = JSONNode(JSON_NULL);
- #ifdef JSON_CASTABLE
- assertEquals(test.as_string(), JSON_TEXT(""));
- assertEquals(test.as_int(), 0);
- assertEquals(test.as_float(), 0.0f);
- assertEquals(test.as_bool(), false);
- #endif
- test = 15.5f;
- assertEquals(test.type(), JSON_NUMBER);
- #ifdef JSON_CASTABLE
- assertEquals(test.as_string(), JSON_TEXT("15.5"));
- #endif
- assertEquals(test.as_int(), 15);
- assertEquals(test.as_float(), 15.5f);
- #ifdef JSON_CASTABLE
- assertEquals(test.as_bool(), true);
- #endif
- test = 0.0f;
- assertEquals(test.type(), JSON_NUMBER);
- #ifdef JSON_CASTABLE
- assertEquals(test.as_string(), JSON_TEXT("0"));
- #endif
- assertEquals(test.as_int(), 0);
- assertEquals(test.as_float(), 0.0f);
- #ifdef JSON_CASTABLE
- assertEquals(test.as_bool(), false);
- #endif
- test = true;
- assertEquals(test.type(), JSON_BOOL);
- #ifdef JSON_CASTABLE
- assertEquals(test.as_string(), JSON_TEXT("true"));
- assertEquals(test.as_int(), 1);
- assertEquals(test.as_float(), 1.0f);
- #endif
- assertEquals(test.as_bool(), true);
- test = false;
- assertEquals(test.type(), JSON_BOOL);
- #ifdef JSON_CASTABLE
- assertEquals(test.as_string(), JSON_TEXT("false"));
- assertEquals(test.as_int(), 0);
- assertEquals(test.as_float(), 0.0f);
- #endif
- assertEquals(test.as_bool(), false);
- #ifdef JSON_CASTABLE
- test.cast(JSON_NODE);
- #else
- test = JSONNode(JSON_NODE);
- #endif
- assertEquals(test.type(), JSON_NODE);
- assertEquals(test.size(), 0);
- test.push_back(JSONNode(JSON_TEXT("hi"), JSON_TEXT("world")));
- test.push_back(JSONNode(JSON_TEXT("hello"), JSON_TEXT("mars")));
- test.push_back(JSONNode(JSON_TEXT("salut"), JSON_TEXT("france")));
- assertEquals(test.size(), 3);
- TestSuite::testParsingItself(test);
- #ifdef JSON_CASTABLE
- JSONNode casted = test.as_array();
- #ifdef JSON_UNIT_TEST
- assertNotEquals(casted.internal, test.internal);
- #endif
- assertEquals(casted.type(), JSON_ARRAY);
- assertEquals(test.type(), JSON_NODE);
- assertEquals(test.size(), 3);
- assertEquals(casted.size(), 3);
- TestSuite::testParsingItself(casted);
- #endif
- UnitTest::SetPrefix("TestInspectors.cpp - Location");
- try {
- #ifdef JSON_CASTABLE
- assertEquals(casted.at(0), JSON_TEXT("world"));
- assertEquals(casted.at(1), JSON_TEXT("mars"));
- assertEquals(casted.at(2), JSON_TEXT("france"));
- assertEquals(casted.at(0).name(), JSON_TEXT(""));
- assertEquals(casted.at(1).name(), JSON_TEXT(""));
- assertEquals(casted.at(2).name(), JSON_TEXT(""));
- #endif
- assertEquals(test.at(0), JSON_TEXT("world"));
- assertEquals(test.at(1), JSON_TEXT("mars"));
- assertEquals(test.at(2), JSON_TEXT("france"));
- assertEquals(test.at(0).name(), JSON_TEXT("hi"));
- assertEquals(test.at(1).name(), JSON_TEXT("hello"));
- assertEquals(test.at(2).name(), JSON_TEXT("salut"));
- } catch (std::out_of_range){
- FAIL("exception caught");
- }
- try {
- assertEquals(test.at(JSON_TEXT("hi")), JSON_TEXT("world"));
- assertEquals(test.at(JSON_TEXT("hello")), JSON_TEXT("mars"));
- assertEquals(test.at(JSON_TEXT("salut")), JSON_TEXT("france"));
- #ifdef JSON_CASE_INSENSITIVE_FUNCTIONS
- assertEquals(test.at_nocase(JSON_TEXT("SALUT")), JSON_TEXT("france"));
- assertEquals(test.at_nocase(JSON_TEXT("HELLO")), JSON_TEXT("mars"));
- assertEquals(test.at_nocase(JSON_TEXT("HI")), JSON_TEXT("world"));
- #endif
- } catch (std::out_of_range){
- FAIL("exception caught");
- }
- assertException(test.at(JSON_TEXT("meh")), std::out_of_range);
- #ifdef JSON_CASE_INSENSITIVE_FUNCTIONS
- assertException(test.at_nocase(JSON_TEXT("meh")), std::out_of_range);
- #endif
- assertEquals(test[JSON_TEXT("hi")], json_string(JSON_TEXT("world")));
- assertEquals(test[JSON_TEXT("hello")], json_string(JSON_TEXT("mars")));
- assertEquals(test[JSON_TEXT("salut")], json_string(JSON_TEXT("france")));
- assertEquals(test[0], JSON_TEXT("world"));
- assertEquals(test[1], JSON_TEXT("mars"));
- assertEquals(test[2], JSON_TEXT("france"));
- #ifdef JSON_ITERATORS
- #ifdef JSON_CASTABLE
- UnitTest::SetPrefix("TestInspectors.cpp - Iterators");
- for(JSONNode::iterator it = casted.begin(), end = casted.end(); it != end; ++it){
- assertEquals((*it).name(), JSON_TEXT(""));
- }
- #endif
- #endif
- #ifdef JSON_BINARY
- UnitTest::SetPrefix("TestInspectors.cpp - Binary");
- test.set_binary((const unsigned char *)"Hello World", 11);
- assertEquals(test.type(), JSON_STRING);
- assertEquals(test.as_string(), JSON_TEXT("SGVsbG8gV29ybGQ="));
- assertEquals(test.as_binary(), "Hello World");
- assertEquals(test.as_binary().size(), 11);
- test = JSON_TEXT("Hello World");
- assertEquals(test.type(), JSON_STRING);
- assertEquals(test.as_string(), JSON_TEXT("Hello World"));
- #ifdef JSON_SAFE
- assertEquals(test.as_binary(), "");
- #endif
- #endif
-
- #ifdef JSON_READ_PRIORITY
- //This is a regression test for a bug in at()
- json_string buffer(JSON_TEXT("{ \"myValue1\" : \"foo\", \"myValue2\" : \"bar\"}"));
- JSONNode current = libjson::parse(buffer);
- try {
- JSONNode & value1 = current[JSON_TEXT("myValue1")];
- assertEquals(value1.as_string(), JSON_TEXT("foo"));
- JSONNode & value2 = current[JSON_TEXT("myValue2")];
- assertEquals(value2.as_string(), JSON_TEXT("bar"));
- } catch (...){
- assertTrue(false);
- }
- #endif
- #endif
- }
|