TestWriter.cpp 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. #include "TestSuite.h"
  2. #ifdef JSON_WRITE_PRIORITY
  3. extern bool used_ascii_one;
  4. void myDoTests(bool asciichar);
  5. void myDoTests(bool asciichar){
  6. used_ascii_one = asciichar;
  7. #ifdef JSON_LIBRARY
  8. #define assertWrite(node, func, expected)\
  9. {\
  10. json_char * _temp = func(node);\
  11. assertCStringSame(_temp, expected);\
  12. json_free(_temp);\
  13. }
  14. JSONNODE * test1 = json_new(JSON_NODE);
  15. assertWrite(test1, json_write, JSON_TEXT("{}"));
  16. json_push_back(test1, json_new_a(JSON_TEXT("Hello"), JSON_TEXT("World")));
  17. json_push_back(test1, json_new_b(JSON_TEXT("libjson"), true));
  18. assertWrite(test1, json_write, JSON_TEXT("{\"Hello\":\"World\",\"libjson\":true}"));
  19. #ifdef JSON_NEWLINE
  20. assertEquals(JSON_NEWLINE, JSON_TEXT("\r\n"));
  21. #ifdef JSON_INDENT
  22. assertEquals(JSON_INDENT, JSON_TEXT(" "))
  23. assertWrite(test1, json_write_formatted, JSON_TEXT("{\r\n \"Hello\" : \"World\",\r\n \"libjson\" : true\r\n}"));
  24. #else
  25. assertWrite(test1, json_write_formatted, JSON_TEXT("{\r\n\t\"Hello\" : \"World\",\r\n\t\"libjson\" : true\r\n}"));
  26. #endif
  27. #else
  28. #ifdef JSON_INDENT
  29. assertEquals(JSON_INDENT, JSON_TEXT(" "))
  30. assertWrite(test1, json_write_formatted, JSON_TEXT("{\n \"Hello\" : \"World\",\n \"libjson\" : true\n}"));
  31. #else
  32. assertWrite(test1, json_write_formatted, JSON_TEXT("{\n\t\"Hello\" : \"World\",\n\t\"libjson\" : true\n}"));
  33. #endif
  34. #endif
  35. json_delete(test1);
  36. JSONNODE * test2 = json_new(JSON_ARRAY);
  37. assertWrite(test2, json_write, JSON_TEXT("[]"));
  38. json_delete(test2);
  39. JSONNODE * card = json_new(JSON_ARRAY);
  40. JSONNODE *c = json_new(JSON_ARRAY);
  41. json_push_back(c, json_new_a(JSON_TEXT("name"), JSON_TEXT("Entr\033e Audio Int\033gr\033e 1")));
  42. json_push_back(c, json_new_i(NULL, 0));
  43. json_push_back(card, c);
  44. #ifdef JSON_READ_PRIORITY
  45. #ifndef JSON_ESCAPE_WRITES
  46. assertWrite(card, json_write, JSON_TEXT("[[\"Entr\033e Audio Int\033gr\033e 1\",0]]"))
  47. JSONNODE * ass = json_parse(JSON_TEXT("[[\"Entr\033e Audio Int\033gr\033e 1\",0]]"));
  48. #else
  49. assertWrite(card, json_write, JSON_TEXT("[[\"Entr\\u001Be Audio Int\\u001Bgr\\u001Be 1\",0]]"))
  50. JSONNODE * ass = json_parse(JSON_TEXT("[[\"Entr\\u001Be Audio Int\\u001Bgr\\u001Be 1\",0]]"));
  51. #endif
  52. JSONNODE * item = json_at(json_at(ass, 0), 0);
  53. assertWrite(item, json_as_string, JSON_TEXT("Entr\033e Audio Int\033gr\033e 1"));
  54. json_delete(ass);
  55. #endif
  56. json_delete(card);
  57. #ifdef JSON_COMMENTS
  58. JSONNODE * test3 = json_new(JSON_NODE);
  59. json_push_back(test3, json_new_a(JSON_TEXT("Hi"), JSON_TEXT("\\There\\")));
  60. json_push_back(test3, json_new_a(JSON_TEXT("Hello"), JSON_TEXT("World")));
  61. json_set_comment(json_at(test3, 0), JSON_TEXT("Testing stuff"));
  62. json_set_comment(json_at(test3, 1), JSON_TEXT("Multi\r\nLine\nUnix and Windows"));
  63. assertWrite(test3, json_write, JSON_TEXT("{\"Hi\":\"\\\\There\\\\\",\"Hello\":\"World\"}"));
  64. #if !defined( JSON_INDENT) && !defined(JSON_NEWLINE)
  65. #ifdef JSON_WRITE_BASH_COMMENTS
  66. assertWrite(test3, json_write_formatted, JSON_TEXT("{\n\t\n\t#Testing stuff\n\t\"Hi\" : \"\\\\There\\\\\",\n\t\n\t#Multi\n\t#Line\n\t#Unix and Windows\n\t\"Hello\" : \"World\"\n}"));
  67. #elif defined(JSON_WRITE_SINGLE_LINE_COMMENTS)
  68. assertWrite(test3, json_write_formatted, JSON_TEXT("{\n\t\n\t//Testing stuff\n\t\"Hi\" : \"\\\\There\\\\\",\n\t\n\t//Multi\n\t//Line\n\t//Unix and Windows\n\t\"Hello\" : \"World\"\n}"));
  69. #else
  70. assertWrite(test3, json_write_formatted, JSON_TEXT("{\n\t\n\t//Testing stuff\n\t\"Hi\" : \"\\\\There\\\\\",\n\t\n\t/*\n\t\tMulti\n\t\tLine\n\t\tUnix and Windows\n\t*/\n\t\"Hello\" : \"World\"\n}"));
  71. #endif
  72. #endif
  73. json_delete(test3);
  74. #endif
  75. #ifdef JSON_ARRAY_SIZE_ON_ONE_LINE
  76. #if (JSON_ARRAY_SIZE_ON_ONE_LINE == 2)
  77. JSONNODE * arrarrr = json_new(JSON_ARRAY);
  78. json_push_back(arrarrr, json_new_i(JSON_TEXT(""), 12));
  79. json_push_back(arrarrr, json_new_i(JSON_TEXT(""), 8));
  80. assertWrite(arrarrr, json_write_formatted, JSON_TEXT("[12, 8]"));
  81. assertWrite(arrarrr, json_write, JSON_TEXT("[12,8]"));
  82. json_delete(arrarrr);
  83. #endif
  84. #endif
  85. #else
  86. JSONNode test1(JSON_NODE);
  87. assertEquals(test1.write(), JSON_TEXT("{}"));
  88. test1.push_back(JSONNode(JSON_TEXT("Hello"), JSON_TEXT("\\World\\")));
  89. test1.push_back(JSONNode(JSON_TEXT("libjson"), true));
  90. assertEquals(test1.write(), JSON_TEXT("{\"Hello\":\"\\\\World\\\\\",\"libjson\":true}"));
  91. #ifdef JSON_NEWLINE
  92. assertEquals(JSON_NEWLINE, JSON_TEXT("\r\n"));
  93. #ifdef JSON_INDENT
  94. assertEquals(JSON_INDENT, JSON_TEXT(" "))
  95. assertEquals(test1.write_formatted(), JSON_TEXT("{\r\n \"Hello\" : \"\\\\World\\\\\",\r\n \"libjson\" : true\r\n}"));
  96. #else
  97. assertEquals(test1.write_formatted(), JSON_TEXT("{\r\n\t\"Hello\" : \"\\\\World\\\\\",\r\n\t\"libjson\" : true\r\n}"));
  98. #endif
  99. #else
  100. #ifdef JSON_INDENT
  101. assertEquals(JSON_INDENT, JSON_TEXT(" "))
  102. assertEquals(test1.write_formatted(), JSON_TEXT("{\n \"Hello\" : \"\\\\World\\\\\",\n \"libjson\" : true\n}"));
  103. #else
  104. assertEquals(test1.write_formatted(), JSON_TEXT("{\n\t\"Hello\" : \"\\\\World\\\\\",\n\t\"libjson\" : true\n}"));
  105. #endif
  106. #endif
  107. JSONNode test2(JSON_ARRAY);
  108. assertEquals(test2.write(), JSON_TEXT("[]"));
  109. #ifdef JSON_COMMENTS
  110. JSONNode test3(JSON_NODE);
  111. test3.push_back(JSONNode(JSON_TEXT("Hi"), JSON_TEXT("There")));
  112. test3.push_back(JSONNode(JSON_TEXT("Hello"), JSON_TEXT("World")));
  113. test3[0].set_comment(JSON_TEXT("Testing stuff"));
  114. test3[1].set_comment(JSON_TEXT("Multi\r\nLine\nUnix and Windows"));
  115. assertEquals(test3.write(), JSON_TEXT("{\"Hi\":\"There\",\"Hello\":\"World\"}"));
  116. #if !defined( JSON_INDENT) && !defined(JSON_NEWLINE)
  117. #ifdef JSON_WRITE_BASH_COMMENTS
  118. assertEquals(test3.write_formatted(), JSON_TEXT("{\n\t\n\t#Testing stuff\n\t\"Hi\" : \"There\",\n\t\n\t#Multi\n\t#Line\n\t#Unix and Windows\n\t\"Hello\" : \"World\"\n}"));
  119. #elif defined(JSON_WRITE_SINGLE_LINE_COMMENTS)
  120. assertEquals(test3.write_formatted(), JSON_TEXT("{\n\t\n\t//Testing stuff\n\t\"Hi\" : \"There\",\n\t\n\t//Multi\n\t//Line\n\t//Unix and Windows\n\t\"Hello\" : \"World\"\n}"));
  121. #else
  122. assertEquals(test3.write_formatted(), JSON_TEXT("{\n\t\n\t//Testing stuff\n\t\"Hi\" : \"There\",\n\t\n\t/*\n\t\tMulti\n\t\tLine\n\t\tUnix and Windows\n\t*/\n\t\"Hello\" : \"World\"\n}"));
  123. #endif
  124. #endif
  125. #endif
  126. #ifdef JSON_READ_PRIORITY
  127. used_ascii_one = asciichar;
  128. const json_char * str = JSON_TEXT("{ \"mt\":\"\\\"str\\\"\" }"); // str={"mt":"\"str\""}
  129. json_string check = libjson::strip_white_space(str);
  130. assertEquals(check, JSON_TEXT("{\"mt\":\"\\\"str\\\"\"}"));
  131. used_ascii_one = asciichar;
  132. JSONNode obj = libjson::parse(str);
  133. json_string objstr = obj.write();
  134. assertEquals(objstr, JSON_TEXT("{\"mt\":\"\\\"str\\\"\"}"));
  135. UnitTest::SetPrefix("TestWriter.cpp - ascii one char");
  136. used_ascii_one = asciichar;
  137. JSONNode n = libjson::parse(JSON_TEXT("[ \"I said: \\\"foo!\\\"\" ]"));
  138. json_string result = n.write_formatted();
  139. assertEquals(result, JSON_TEXT("[\n\t\"I said: \\\"foo!\\\"\"\n]"));
  140. #endif
  141. #endif
  142. }
  143. void TestSuite::TestWriter(void){
  144. UnitTest::SetPrefix("TestWriter.cpp - Writing (no ascii one)");
  145. myDoTests(false);
  146. UnitTest::SetPrefix("TestWriter.cpp - Writing (yes ascii one)");
  147. myDoTests(true);
  148. }
  149. #endif