TestNamespace.cpp 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290
  1. #include "TestSuite.h"
  2. #include "../Source/JSONGlobals.h"
  3. void TestSuite::TestNamespace(void){
  4. #ifdef JSON_LIBRARY
  5. UnitTest::SetPrefix("TestNamespace.cpp - Memory Manager");
  6. #ifdef JSON_MEMORY_MANAGE
  7. #define ASSERT_ZERO_ALLOCATIONS()\
  8. assertEquals(json_global(STRING_HANDLER).mymap.size(), 0);\
  9. assertEquals(json_global(NODE_HANDLER).mymap.size(), 0)
  10. ASSERT_ZERO_ALLOCATIONS();
  11. JSONNODE * test = json_new(JSON_NODE);
  12. json_set_a(test, JSON_TEXT("Hello"));
  13. assertCStringSame(json_as_string(test), JSON_TEXT("Hello"));
  14. test = json_new_f(JSON_TEXT("Hi"), 14.3f);
  15. assertCStringSame(json_name(test), JSON_TEXT("Hi"));
  16. assertEquals(json_global(STRING_HANDLER).mymap.size(), 2);
  17. assertEquals(json_global(NODE_HANDLER).mymap.size(), 2);
  18. json_delete(test);
  19. assertEquals(json_global(NODE_HANDLER).mymap.size(), 1);
  20. json_delete_all();
  21. assertEquals(json_global(NODE_HANDLER).mymap.size(), 0);
  22. json_free_all();
  23. ASSERT_ZERO_ALLOCATIONS();
  24. #else
  25. #define ASSERT_ZERO_ALLOCATIONS() (void)0
  26. #endif
  27. UnitTest::SetPrefix("TestNamespace.cpp - Stripper");
  28. {
  29. ASSERT_ZERO_ALLOCATIONS();
  30. const json_char * json = JSON_TEXT("{\n\t\"hello\" : \"world\"\r\n} ");
  31. const json_char * stripped = JSON_TEXT("{\"hello\":\"world\"}");
  32. json_char * res = json_strip_white_space(json);
  33. assertCStringSame(res, stripped);
  34. json_free(res);
  35. ASSERT_ZERO_ALLOCATIONS();
  36. }
  37. #ifndef JSON_STRICT
  38. {
  39. ASSERT_ZERO_ALLOCATIONS();
  40. const json_char * json = JSON_TEXT("/*comment*/{#comment\n\n\t\"hello\" ://comment\n \"world\"\r\n} ");
  41. const json_char * stripped = JSON_TEXT("{\"hello\":\"world\"}");
  42. json_char * res = json_strip_white_space(json);
  43. assertCStringSame(res, stripped);
  44. json_free(res);
  45. ASSERT_ZERO_ALLOCATIONS();
  46. }
  47. #endif
  48. {
  49. ASSERT_ZERO_ALLOCATIONS();
  50. const json_char * json = JSON_TEXT("[\n\t\"hello world\" , \"hello mars\"\r\n] ");
  51. const json_char * stripped = JSON_TEXT("[\"hello world\",\"hello mars\"]");
  52. json_char * res = json_strip_white_space(json);
  53. assertCStringSame(res, stripped);
  54. json_free(res);
  55. ASSERT_ZERO_ALLOCATIONS();
  56. }
  57. {
  58. ASSERT_ZERO_ALLOCATIONS();
  59. const json_char * json = JSON_TEXT(" {\n\t\"hello\" : true\r\n}");
  60. const json_char * stripped = JSON_TEXT("{\"hello\":true}");
  61. json_char * res = json_strip_white_space(json);
  62. assertCStringSame(res, stripped);
  63. json_free(res);
  64. ASSERT_ZERO_ALLOCATIONS();
  65. }
  66. {
  67. ASSERT_ZERO_ALLOCATIONS();
  68. const json_char * json = JSON_TEXT(" [\n\ttrue , false\r\n]");
  69. const json_char * stripped = JSON_TEXT("[true,false]");
  70. json_char * res = json_strip_white_space(json);
  71. assertCStringSame(res, stripped);
  72. json_free(res);
  73. ASSERT_ZERO_ALLOCATIONS();
  74. }
  75. {
  76. ASSERT_ZERO_ALLOCATIONS();
  77. const json_char * json = JSON_TEXT("[true,false]");
  78. const json_char * stripped = JSON_TEXT("[true,false]");
  79. json_char * res = json_strip_white_space(json);
  80. assertCStringSame(res, stripped);
  81. json_free(res);
  82. ASSERT_ZERO_ALLOCATIONS();
  83. }
  84. #ifdef JSON_SAFE
  85. UnitTest::SetPrefix("TestNamespace.cpp - Parser");
  86. {
  87. ASSERT_ZERO_ALLOCATIONS();
  88. const json_char * json = JSON_TEXT("[{\"a\":\"b\",\"c\":{\"d\":\"e\",\"f\":\"g\",\"e\":\"f ");
  89. assertNull(json_parse(json));
  90. ASSERT_ZERO_ALLOCATIONS();
  91. }
  92. #endif
  93. #ifdef JSON_VALIDATE
  94. UnitTest::SetPrefix("TestNamespace.cpp - Validator");
  95. assertTrue(json_is_valid(JSON_TEXT("[true,false] ")));
  96. assertTrue(json_is_valid(JSON_TEXT(" {\"hello\":\"world\"}")))
  97. assertTrue(json_is_valid(JSON_TEXT(" {\"hello\":null}")))
  98. #ifdef JSON_STRICT
  99. assertFalse(json_is_valid(JSON_TEXT(" {\"hello\":}")));
  100. assertFalse(json_is_valid(JSON_TEXT(" {\"hello\":, \"hi\" : \"Mars\"}")));
  101. #else
  102. assertTrue(json_is_valid(JSON_TEXT(" {\"hello\":}")));
  103. assertTrue(json_is_valid(JSON_TEXT(" {\"hello\":, \"hi\" : \"Mars\"}")));
  104. #endif
  105. assertTrue(json_is_valid(JSON_TEXT(" {\"hello\":null, \"hi\" : \"Mars\"}")));
  106. assertFalse(json_is_valid(JSON_TEXT("{\"hello\":\"world\"")));
  107. assertFalse(json_is_valid(JSON_TEXT("\"hello\":\"world\"")));
  108. assertFalse(json_is_valid(JSON_TEXT("true,false]")));
  109. assertFalse(json_is_valid(JSON_TEXT("[true,false")));
  110. assertFalse(json_is_valid(JSON_TEXT("hello")));
  111. assertFalse(json_is_valid(JSON_TEXT("")));
  112. #ifdef JSON_SAFE
  113. assertFalse(json_is_valid(JSON_TEXT(" {\"hello\":world\"}")));
  114. assertFalse(json_is_valid(JSON_TEXT("{\"hello\":\"world\",}")));
  115. #endif
  116. #endif
  117. #else
  118. UnitTest::SetPrefix("TestNamespace.cpp - Stripper");
  119. {
  120. json_string json = JSON_TEXT("{\n\t\"hello\" : \"world\"\r\n} ");
  121. json_string stripped = JSON_TEXT("{\"hello\":\"world\"}");
  122. assertEquals(libjson::strip_white_space(json), stripped);
  123. }
  124. #ifndef JSON_STRICT
  125. {
  126. json_string json = JSON_TEXT("/*comment*/{#comment\n\n\t\"hello\" ://comment\n \"world\"\r\n} ");
  127. json_string stripped = JSON_TEXT("{\"hello\":\"world\"}");
  128. assertEquals(libjson::strip_white_space(json), stripped);
  129. }
  130. #endif
  131. {
  132. json_string json = JSON_TEXT("[\n\t\"hello world\" , \"hello mars\"\r\n] ");
  133. json_string stripped = JSON_TEXT("[\"hello world\",\"hello mars\"]");
  134. assertEquals(libjson::strip_white_space(json), stripped);
  135. }
  136. {
  137. json_string json = JSON_TEXT(" {\n\t\"hello\" : true\r\n}");
  138. json_string stripped = JSON_TEXT("{\"hello\":true}");
  139. assertEquals(libjson::strip_white_space(json), stripped);
  140. }
  141. {
  142. json_string json = JSON_TEXT(" [\n\ttrue , false\r\n]");
  143. json_string stripped = JSON_TEXT("[true,false]");
  144. assertEquals(libjson::strip_white_space(json), stripped);
  145. }
  146. {
  147. json_string json = JSON_TEXT("[true,false]");
  148. json_string stripped = JSON_TEXT("[true,false]");
  149. assertEquals(libjson::strip_white_space(json), stripped);
  150. }
  151. #ifdef JSON_VALIDATE
  152. UnitTest::SetPrefix("TestNamespace.cpp - Validator");
  153. assertTrue(libjson::is_valid(JSON_TEXT("[true,false] ")));
  154. assertTrue(libjson::is_valid(JSON_TEXT(" {\"hello\":\"world\"}")));
  155. assertTrue(libjson::is_valid(JSON_TEXT(" {\"hello\":null}")));
  156. #ifdef JSON_STRICT
  157. assertFalse(libjson::is_valid(JSON_TEXT(" {\"hello\":}")));
  158. assertFalse(libjson::is_valid(JSON_TEXT(" {\"hello\":, \"hi\" : \"Mars\"}")));
  159. #else
  160. assertTrue(libjson::is_valid(JSON_TEXT(" {\"hello\":}")));
  161. assertTrue(libjson::is_valid(JSON_TEXT(" {\"hello\":, \"hi\" : \"Mars\"}")));
  162. #endif
  163. assertTrue(libjson::is_valid(JSON_TEXT(" {\"hello\":null, \"hi\" : \"Mars\"}")));
  164. assertFalse(libjson::is_valid(JSON_TEXT("{\"hello\":\"world\"")));
  165. assertFalse(libjson::is_valid(JSON_TEXT("\"hello\":\"world\"")));
  166. assertFalse(libjson::is_valid(JSON_TEXT("true,false]")));
  167. assertFalse(libjson::is_valid(JSON_TEXT("[true,false")));
  168. assertFalse(libjson::is_valid(JSON_TEXT("hello")));
  169. assertFalse(libjson::is_valid(JSON_TEXT("")));
  170. assertFalse(libjson::is_valid(JSON_TEXT(" {\"hello\":world\"}")));
  171. assertFalse(libjson::is_valid(JSON_TEXT("[\"hello\"\"world\"]")));
  172. assertFalse(libjson::is_valid(JSON_TEXT("{\"hello\"\"world\", \"hi\":\"mars\"}")));
  173. assertFalse(libjson::is_valid(JSON_TEXT("[\"hello\":\"world\"]")));
  174. #endif
  175. JSONNode tester;
  176. #ifdef JSON_READ_PRIORITY
  177. UnitTest::SetPrefix("TestNamespace.cpp - Parse");
  178. tester = libjson::parse(JSON_TEXT("\r\n{\"hello\":\"world\"}"));
  179. assertEquals(tester.type(), JSON_NODE);
  180. #ifdef JSON_UNIT_TEST
  181. #if !defined(JSON_PREPARSE) && defined(JSON_READ_PRIORITY)
  182. assertFalse(tester.internal -> fetched);
  183. tester.preparse();
  184. assertTrue(tester.internal -> fetched);
  185. assertTrue(tester[0].internal -> fetched);
  186. #endif
  187. #endif
  188. assertEquals(tester.size(), 1);
  189. assertEquals(tester[0].name(), JSON_TEXT("hello"));
  190. assertEquals(tester[0], JSON_TEXT("world"));
  191. #ifdef JSON_UNIT_TEST
  192. #if !defined(JSON_PREPARSE) && defined(JSON_READ_PRIORITY)
  193. assertTrue(tester.internal -> fetched);
  194. #endif
  195. #endif
  196. #ifdef JSON_SAFE
  197. assertException(libjson::parse(JSON_TEXT("{\"hello\":\"world\"")), std::invalid_argument);
  198. #endif
  199. assertException(libjson::parse(JSON_TEXT("\"hello\":\"world\"")), std::invalid_argument);
  200. tester = libjson::parse(JSON_TEXT(" [true, false]\r\n"));
  201. assertEquals(tester.type(), JSON_ARRAY);
  202. #ifdef JSON_UNIT_TEST
  203. #if !defined(JSON_PREPARSE) && defined(JSON_READ_PRIORITY)
  204. assertFalse(tester.internal -> fetched);
  205. #endif
  206. #endif
  207. assertEquals(tester.size(), 2);
  208. #ifdef JSON_UNIT_TEST
  209. #if !defined(JSON_PREPARSE) && defined(JSON_READ_PRIORITY)
  210. assertTrue(tester.internal -> fetched);
  211. #endif
  212. #endif
  213. assertException(libjson::parse(JSON_TEXT("true,false]")), std::invalid_argument);
  214. #ifdef JSON_SAFE
  215. assertException(libjson::parse(JSON_TEXT("[true,false")), std::invalid_argument);
  216. #endif
  217. assertException(libjson::parse(JSON_TEXT("hello")), std::invalid_argument);
  218. assertException(libjson::parse(JSON_TEXT("")), std::invalid_argument);
  219. TestSuite::testParsingItself(tester);
  220. tester = libjson::parse(JSON_TEXT(" [\"hello\", \"world\", \"mars\"]\r\n"));
  221. assertEquals(tester.type(), JSON_ARRAY);
  222. assertEquals(tester.size(), 3);
  223. assertEquals(tester[0], JSON_TEXT("hello"));
  224. assertEquals(tester[1], JSON_TEXT("world"));
  225. assertEquals(tester[2], JSON_TEXT("mars"));
  226. TestSuite::testParsingItself(tester);
  227. tester = libjson::parse(JSON_TEXT("{\"\":{},\"\":2}"));
  228. assertEquals(tester.type(), JSON_NODE);
  229. assertEquals(tester.size(), 2);
  230. assertEquals(tester[0].type(), JSON_NODE);
  231. assertTrue(tester[0].empty());
  232. assertEquals(tester[1].type(), JSON_NUMBER);
  233. assertEquals(tester[1], 2);
  234. assertEquals(tester, libjson::parse(JSON_TEXT("{\"\":{},\"\":2}")));
  235. TestSuite::testParsingItself(tester);
  236. tester = libjson::parse(JSON_TEXT("\r\n{\"hello\":\"world\", \"hi\":\"mars\"}"));
  237. assertEquals(tester.type(), JSON_NODE);
  238. #ifdef JSON_UNIT_TEST
  239. #if !defined(JSON_PREPARSE) && defined(JSON_READ_PRIORITY)
  240. assertFalse(tester.internal -> fetched);
  241. #endif
  242. #endif
  243. assertEquals(tester.size(), 2);
  244. assertEquals(tester[0].name(), JSON_TEXT("hello"));
  245. assertEquals(tester[0], JSON_TEXT("world"));
  246. assertEquals(tester[1].name(), JSON_TEXT("hi"));
  247. assertEquals(tester[1], JSON_TEXT("mars"));
  248. TestSuite::testParsingItself(tester);
  249. tester = libjson::parse(JSON_TEXT("\r\n{\"hello\":\"world\", \"hi\":\"mars\", \"and\":\"pluto\"}"));
  250. assertEquals(tester.type(), JSON_NODE);
  251. #ifdef JSON_UNIT_TEST
  252. #if !defined(JSON_PREPARSE) && defined(JSON_READ_PRIORITY)
  253. assertFalse(tester.internal -> fetched);
  254. #endif
  255. #endif
  256. assertEquals(tester.size(), 3);
  257. assertEquals(tester[0].name(), JSON_TEXT("hello"));
  258. assertEquals(tester[0], JSON_TEXT("world"));
  259. assertEquals(tester[1].name(), JSON_TEXT("hi"));
  260. assertEquals(tester[1], JSON_TEXT("mars"));
  261. assertEquals(tester[2].name(), JSON_TEXT("and"));
  262. assertEquals(tester[2], JSON_TEXT("pluto"));
  263. TestSuite::testParsingItself(tester);
  264. #ifdef JSON_SAFE
  265. assertException(libjson::parse(JSON_TEXT("[{\"a\":\"b\",\"c\":{\"d\":\"e\",\"f\":\"g\",\"e\":\"f ")), std::invalid_argument);
  266. #endif
  267. #endif
  268. #endif
  269. }