| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290 |
- #include "TestSuite.h"
- #include "../Source/JSONGlobals.h"
- void TestSuite::TestNamespace(void){
- #ifdef JSON_LIBRARY
- UnitTest::SetPrefix("TestNamespace.cpp - Memory Manager");
- #ifdef JSON_MEMORY_MANAGE
- #define ASSERT_ZERO_ALLOCATIONS()\
- assertEquals(json_global(STRING_HANDLER).mymap.size(), 0);\
- assertEquals(json_global(NODE_HANDLER).mymap.size(), 0)
- ASSERT_ZERO_ALLOCATIONS();
- JSONNODE * test = json_new(JSON_NODE);
- json_set_a(test, JSON_TEXT("Hello"));
- assertCStringSame(json_as_string(test), JSON_TEXT("Hello"));
- test = json_new_f(JSON_TEXT("Hi"), 14.3f);
- assertCStringSame(json_name(test), JSON_TEXT("Hi"));
- assertEquals(json_global(STRING_HANDLER).mymap.size(), 2);
- assertEquals(json_global(NODE_HANDLER).mymap.size(), 2);
- json_delete(test);
- assertEquals(json_global(NODE_HANDLER).mymap.size(), 1);
- json_delete_all();
- assertEquals(json_global(NODE_HANDLER).mymap.size(), 0);
- json_free_all();
- ASSERT_ZERO_ALLOCATIONS();
- #else
- #define ASSERT_ZERO_ALLOCATIONS() (void)0
- #endif
- UnitTest::SetPrefix("TestNamespace.cpp - Stripper");
- {
- ASSERT_ZERO_ALLOCATIONS();
- const json_char * json = JSON_TEXT("{\n\t\"hello\" : \"world\"\r\n} ");
- const json_char * stripped = JSON_TEXT("{\"hello\":\"world\"}");
- json_char * res = json_strip_white_space(json);
- assertCStringSame(res, stripped);
- json_free(res);
- ASSERT_ZERO_ALLOCATIONS();
- }
- #ifndef JSON_STRICT
- {
- ASSERT_ZERO_ALLOCATIONS();
- const json_char * json = JSON_TEXT("/*comment*/{#comment\n\n\t\"hello\" ://comment\n \"world\"\r\n} ");
- const json_char * stripped = JSON_TEXT("{\"hello\":\"world\"}");
- json_char * res = json_strip_white_space(json);
- assertCStringSame(res, stripped);
- json_free(res);
- ASSERT_ZERO_ALLOCATIONS();
- }
- #endif
- {
- ASSERT_ZERO_ALLOCATIONS();
- const json_char * json = JSON_TEXT("[\n\t\"hello world\" , \"hello mars\"\r\n] ");
- const json_char * stripped = JSON_TEXT("[\"hello world\",\"hello mars\"]");
- json_char * res = json_strip_white_space(json);
- assertCStringSame(res, stripped);
- json_free(res);
- ASSERT_ZERO_ALLOCATIONS();
- }
- {
- ASSERT_ZERO_ALLOCATIONS();
- const json_char * json = JSON_TEXT(" {\n\t\"hello\" : true\r\n}");
- const json_char * stripped = JSON_TEXT("{\"hello\":true}");
- json_char * res = json_strip_white_space(json);
- assertCStringSame(res, stripped);
- json_free(res);
- ASSERT_ZERO_ALLOCATIONS();
- }
- {
- ASSERT_ZERO_ALLOCATIONS();
- const json_char * json = JSON_TEXT(" [\n\ttrue , false\r\n]");
- const json_char * stripped = JSON_TEXT("[true,false]");
- json_char * res = json_strip_white_space(json);
- assertCStringSame(res, stripped);
- json_free(res);
- ASSERT_ZERO_ALLOCATIONS();
- }
- {
- ASSERT_ZERO_ALLOCATIONS();
- const json_char * json = JSON_TEXT("[true,false]");
- const json_char * stripped = JSON_TEXT("[true,false]");
- json_char * res = json_strip_white_space(json);
- assertCStringSame(res, stripped);
- json_free(res);
- ASSERT_ZERO_ALLOCATIONS();
- }
-
- #ifdef JSON_SAFE
- UnitTest::SetPrefix("TestNamespace.cpp - Parser");
- {
- ASSERT_ZERO_ALLOCATIONS();
- const json_char * json = JSON_TEXT("[{\"a\":\"b\",\"c\":{\"d\":\"e\",\"f\":\"g\",\"e\":\"f ");
- assertNull(json_parse(json));
- ASSERT_ZERO_ALLOCATIONS();
- }
- #endif
-
-
- #ifdef JSON_VALIDATE
- UnitTest::SetPrefix("TestNamespace.cpp - Validator");
- assertTrue(json_is_valid(JSON_TEXT("[true,false] ")));
- assertTrue(json_is_valid(JSON_TEXT(" {\"hello\":\"world\"}")))
- assertTrue(json_is_valid(JSON_TEXT(" {\"hello\":null}")))
- #ifdef JSON_STRICT
- assertFalse(json_is_valid(JSON_TEXT(" {\"hello\":}")));
- assertFalse(json_is_valid(JSON_TEXT(" {\"hello\":, \"hi\" : \"Mars\"}")));
- #else
- assertTrue(json_is_valid(JSON_TEXT(" {\"hello\":}")));
- assertTrue(json_is_valid(JSON_TEXT(" {\"hello\":, \"hi\" : \"Mars\"}")));
- #endif
- assertTrue(json_is_valid(JSON_TEXT(" {\"hello\":null, \"hi\" : \"Mars\"}")));
- assertFalse(json_is_valid(JSON_TEXT("{\"hello\":\"world\"")));
- assertFalse(json_is_valid(JSON_TEXT("\"hello\":\"world\"")));
- assertFalse(json_is_valid(JSON_TEXT("true,false]")));
- assertFalse(json_is_valid(JSON_TEXT("[true,false")));
- assertFalse(json_is_valid(JSON_TEXT("hello")));
- assertFalse(json_is_valid(JSON_TEXT("")));
- #ifdef JSON_SAFE
- assertFalse(json_is_valid(JSON_TEXT(" {\"hello\":world\"}")));
- assertFalse(json_is_valid(JSON_TEXT("{\"hello\":\"world\",}")));
- #endif
- #endif
- #else
- UnitTest::SetPrefix("TestNamespace.cpp - Stripper");
- {
- json_string json = JSON_TEXT("{\n\t\"hello\" : \"world\"\r\n} ");
- json_string stripped = JSON_TEXT("{\"hello\":\"world\"}");
- assertEquals(libjson::strip_white_space(json), stripped);
- }
- #ifndef JSON_STRICT
- {
- json_string json = JSON_TEXT("/*comment*/{#comment\n\n\t\"hello\" ://comment\n \"world\"\r\n} ");
- json_string stripped = JSON_TEXT("{\"hello\":\"world\"}");
- assertEquals(libjson::strip_white_space(json), stripped);
- }
- #endif
- {
- json_string json = JSON_TEXT("[\n\t\"hello world\" , \"hello mars\"\r\n] ");
- json_string stripped = JSON_TEXT("[\"hello world\",\"hello mars\"]");
- assertEquals(libjson::strip_white_space(json), stripped);
- }
- {
- json_string json = JSON_TEXT(" {\n\t\"hello\" : true\r\n}");
- json_string stripped = JSON_TEXT("{\"hello\":true}");
- assertEquals(libjson::strip_white_space(json), stripped);
- }
- {
- json_string json = JSON_TEXT(" [\n\ttrue , false\r\n]");
- json_string stripped = JSON_TEXT("[true,false]");
- assertEquals(libjson::strip_white_space(json), stripped);
- }
- {
- json_string json = JSON_TEXT("[true,false]");
- json_string stripped = JSON_TEXT("[true,false]");
- assertEquals(libjson::strip_white_space(json), stripped);
- }
- #ifdef JSON_VALIDATE
- UnitTest::SetPrefix("TestNamespace.cpp - Validator");
- assertTrue(libjson::is_valid(JSON_TEXT("[true,false] ")));
- assertTrue(libjson::is_valid(JSON_TEXT(" {\"hello\":\"world\"}")));
- assertTrue(libjson::is_valid(JSON_TEXT(" {\"hello\":null}")));
- #ifdef JSON_STRICT
- assertFalse(libjson::is_valid(JSON_TEXT(" {\"hello\":}")));
- assertFalse(libjson::is_valid(JSON_TEXT(" {\"hello\":, \"hi\" : \"Mars\"}")));
- #else
- assertTrue(libjson::is_valid(JSON_TEXT(" {\"hello\":}")));
- assertTrue(libjson::is_valid(JSON_TEXT(" {\"hello\":, \"hi\" : \"Mars\"}")));
- #endif
- assertTrue(libjson::is_valid(JSON_TEXT(" {\"hello\":null, \"hi\" : \"Mars\"}")));
- assertFalse(libjson::is_valid(JSON_TEXT("{\"hello\":\"world\"")));
- assertFalse(libjson::is_valid(JSON_TEXT("\"hello\":\"world\"")));
- assertFalse(libjson::is_valid(JSON_TEXT("true,false]")));
- assertFalse(libjson::is_valid(JSON_TEXT("[true,false")));
- assertFalse(libjson::is_valid(JSON_TEXT("hello")));
- assertFalse(libjson::is_valid(JSON_TEXT("")));
- assertFalse(libjson::is_valid(JSON_TEXT(" {\"hello\":world\"}")));
- assertFalse(libjson::is_valid(JSON_TEXT("[\"hello\"\"world\"]")));
- assertFalse(libjson::is_valid(JSON_TEXT("{\"hello\"\"world\", \"hi\":\"mars\"}")));
- assertFalse(libjson::is_valid(JSON_TEXT("[\"hello\":\"world\"]")));
- #endif
- JSONNode tester;
- #ifdef JSON_READ_PRIORITY
- UnitTest::SetPrefix("TestNamespace.cpp - Parse");
- tester = libjson::parse(JSON_TEXT("\r\n{\"hello\":\"world\"}"));
- assertEquals(tester.type(), JSON_NODE);
- #ifdef JSON_UNIT_TEST
- #if !defined(JSON_PREPARSE) && defined(JSON_READ_PRIORITY)
- assertFalse(tester.internal -> fetched);
- tester.preparse();
- assertTrue(tester.internal -> fetched);
- assertTrue(tester[0].internal -> fetched);
- #endif
- #endif
- assertEquals(tester.size(), 1);
- assertEquals(tester[0].name(), JSON_TEXT("hello"));
- assertEquals(tester[0], JSON_TEXT("world"));
- #ifdef JSON_UNIT_TEST
- #if !defined(JSON_PREPARSE) && defined(JSON_READ_PRIORITY)
- assertTrue(tester.internal -> fetched);
- #endif
- #endif
- #ifdef JSON_SAFE
- assertException(libjson::parse(JSON_TEXT("{\"hello\":\"world\"")), std::invalid_argument);
- #endif
- assertException(libjson::parse(JSON_TEXT("\"hello\":\"world\"")), std::invalid_argument);
- tester = libjson::parse(JSON_TEXT(" [true, false]\r\n"));
- assertEquals(tester.type(), JSON_ARRAY);
- #ifdef JSON_UNIT_TEST
- #if !defined(JSON_PREPARSE) && defined(JSON_READ_PRIORITY)
- assertFalse(tester.internal -> fetched);
- #endif
- #endif
- assertEquals(tester.size(), 2);
- #ifdef JSON_UNIT_TEST
- #if !defined(JSON_PREPARSE) && defined(JSON_READ_PRIORITY)
- assertTrue(tester.internal -> fetched);
- #endif
- #endif
- assertException(libjson::parse(JSON_TEXT("true,false]")), std::invalid_argument);
- #ifdef JSON_SAFE
- assertException(libjson::parse(JSON_TEXT("[true,false")), std::invalid_argument);
- #endif
- assertException(libjson::parse(JSON_TEXT("hello")), std::invalid_argument);
- assertException(libjson::parse(JSON_TEXT("")), std::invalid_argument);
- TestSuite::testParsingItself(tester);
- tester = libjson::parse(JSON_TEXT(" [\"hello\", \"world\", \"mars\"]\r\n"));
- assertEquals(tester.type(), JSON_ARRAY);
- assertEquals(tester.size(), 3);
- assertEquals(tester[0], JSON_TEXT("hello"));
- assertEquals(tester[1], JSON_TEXT("world"));
- assertEquals(tester[2], JSON_TEXT("mars"));
- TestSuite::testParsingItself(tester);
- tester = libjson::parse(JSON_TEXT("{\"\":{},\"\":2}"));
- assertEquals(tester.type(), JSON_NODE);
- assertEquals(tester.size(), 2);
- assertEquals(tester[0].type(), JSON_NODE);
- assertTrue(tester[0].empty());
- assertEquals(tester[1].type(), JSON_NUMBER);
- assertEquals(tester[1], 2);
- assertEquals(tester, libjson::parse(JSON_TEXT("{\"\":{},\"\":2}")));
- TestSuite::testParsingItself(tester);
- tester = libjson::parse(JSON_TEXT("\r\n{\"hello\":\"world\", \"hi\":\"mars\"}"));
- assertEquals(tester.type(), JSON_NODE);
- #ifdef JSON_UNIT_TEST
- #if !defined(JSON_PREPARSE) && defined(JSON_READ_PRIORITY)
- assertFalse(tester.internal -> fetched);
- #endif
- #endif
- assertEquals(tester.size(), 2);
- assertEquals(tester[0].name(), JSON_TEXT("hello"));
- assertEquals(tester[0], JSON_TEXT("world"));
- assertEquals(tester[1].name(), JSON_TEXT("hi"));
- assertEquals(tester[1], JSON_TEXT("mars"));
- TestSuite::testParsingItself(tester);
- tester = libjson::parse(JSON_TEXT("\r\n{\"hello\":\"world\", \"hi\":\"mars\", \"and\":\"pluto\"}"));
- assertEquals(tester.type(), JSON_NODE);
- #ifdef JSON_UNIT_TEST
- #if !defined(JSON_PREPARSE) && defined(JSON_READ_PRIORITY)
- assertFalse(tester.internal -> fetched);
- #endif
- #endif
- assertEquals(tester.size(), 3);
- assertEquals(tester[0].name(), JSON_TEXT("hello"));
- assertEquals(tester[0], JSON_TEXT("world"));
- assertEquals(tester[1].name(), JSON_TEXT("hi"));
- assertEquals(tester[1], JSON_TEXT("mars"));
- assertEquals(tester[2].name(), JSON_TEXT("and"));
- assertEquals(tester[2], JSON_TEXT("pluto"));
- TestSuite::testParsingItself(tester);
-
- #ifdef JSON_SAFE
- assertException(libjson::parse(JSON_TEXT("[{\"a\":\"b\",\"c\":{\"d\":\"e\",\"f\":\"g\",\"e\":\"f ")), std::invalid_argument);
- #endif
- #endif
- #endif
- }
|