TestStreams.cpp 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. #include "TestSuite.h"
  2. #ifdef JSON_STREAM
  3. unsigned int counter = 0;
  4. unsigned int errorCounter = 0;
  5. void errorCallback(void *);
  6. void errorCallback(void *){
  7. ++errorCounter;
  8. }
  9. #ifdef JSON_LIBRARY
  10. void Callback(JSONNODE * test, void *);
  11. void Callback(JSONNODE * test, void *){
  12. ++counter;
  13. switch(counter){
  14. case 1:
  15. assertEquals(json_type(test), JSON_NODE);
  16. assertTrue(json_empty(test));
  17. break;
  18. case 2:
  19. assertEquals(json_type(test), JSON_ARRAY);
  20. assertTrue(json_empty(test));
  21. break;
  22. case 3:{
  23. assertEquals(json_type(test), JSON_NODE);
  24. assertEquals(json_size(test), 1);
  25. json_char * temp = json_name(json_at(test, 0));
  26. assertCStringSame(temp, JSON_TEXT("hello"));
  27. json_free(temp);
  28. assertEquals(json_as_int(json_at(test, 0)), 1);
  29. break;}
  30. case 4:
  31. assertEquals(json_type(test), JSON_ARRAY);
  32. assertEquals(json_size(test), 3);
  33. break;
  34. case 5:{
  35. assertEquals(json_type(test), JSON_NODE);
  36. assertEquals(json_size(test), 1);
  37. json_char * temp = json_name(json_at(test, 0));
  38. assertCStringSame(temp, JSON_TEXT("hi"));
  39. json_free(temp);
  40. assertEquals(json_size(json_at(test, 0)), 1);
  41. assertEquals(json_type(json_at(json_at(test, 0),0)), JSON_NUMBER);
  42. temp = json_name(json_at(json_at(test, 0),0));
  43. assertCStringSame(temp, JSON_TEXT("one"));
  44. json_free(temp);
  45. assertEquals(json_as_int(json_at(json_at(test, 0),0)), 1);
  46. break;}
  47. }
  48. }
  49. #else
  50. void Callback(JSONNode & test, void * ide);
  51. void Callback(JSONNode & test, void * ide){
  52. assertEquals(ide, (void*)0xDEADBEEF);
  53. ++counter;
  54. switch(counter){
  55. case 1:
  56. assertEquals(test.type(), JSON_NODE);
  57. assertTrue(test.empty());
  58. break;
  59. case 2:
  60. assertEquals(test.type(), JSON_ARRAY);
  61. assertTrue(test.empty());
  62. break;
  63. case 3:
  64. assertEquals(test.type(), JSON_NODE);
  65. assertEquals(test.size(), 1);
  66. assertEquals(test[0].name(), JSON_TEXT("hello"));
  67. assertEquals(test[0].as_int(), 1);
  68. break;
  69. case 4:
  70. assertEquals(test.type(), JSON_ARRAY);
  71. assertEquals(test.size(), 3);
  72. break;
  73. case 5:
  74. assertEquals(test.type(), JSON_NODE);
  75. assertEquals(test.size(), 1);
  76. assertEquals(test[0].name(), JSON_TEXT("hi"));
  77. assertEquals(test[0].size(), 1)
  78. assertEquals(test[0][0].type(), JSON_NUMBER);
  79. assertEquals(test[0][0].name(), JSON_TEXT("one"));
  80. assertEquals(test[0][0].as_int(), 1);
  81. break;
  82. }
  83. }
  84. #endif //library
  85. #endif //stream
  86. void TestSuite::TestStreams(void){
  87. #ifdef JSON_STREAM
  88. UnitTest::SetPrefix("TestStreams.cpp - Streams");
  89. counter = 0;
  90. errorCounter = 0;
  91. #ifdef JSON_LIBRARY
  92. JSONSTREAM * test = json_new_stream(Callback, errorCallback, (void*)0xDEADBEEF);
  93. json_stream_push(test, JSON_TEXT("{}[]"));
  94. assertEquals(2, counter);
  95. assertEquals(0, errorCounter);
  96. json_stream_push(test, JSON_TEXT("{\"hel"));
  97. assertEquals(2, counter);
  98. assertEquals(0, errorCounter);
  99. json_stream_push(test, JSON_TEXT("lo\" : 1"));
  100. assertEquals(2, counter);
  101. assertEquals(0, errorCounter);
  102. json_stream_push(test, JSON_TEXT("}["));
  103. assertEquals(3, counter);
  104. assertEquals(0, errorCounter);
  105. json_stream_push(test, JSON_TEXT("1,2,3]{\"hi\" : { \"one\" : 1}"));
  106. assertEquals(4, counter);
  107. assertEquals(0, errorCounter);
  108. json_stream_push(test, JSON_TEXT("}"));
  109. assertEquals(5, counter);
  110. assertEquals(0, errorCounter);
  111. #ifdef JSON_SAFE
  112. json_stream_push(test, JSON_TEXT("{\"hello\":12keaueuataueaouhe"));
  113. assertEquals(1, errorCounter);
  114. #endif
  115. json_delete_stream(test);
  116. #else
  117. JSONStream test(Callback, errorCallback, (void*)0xDEADBEEF);
  118. test << JSON_TEXT("{}[]");
  119. assertEquals(2, counter);
  120. assertEquals(0, errorCounter);
  121. test << JSON_TEXT("{\"hel");
  122. assertEquals(2, counter);
  123. assertEquals(0, errorCounter);
  124. test << JSON_TEXT("lo\" : 1");
  125. assertEquals(2, counter);
  126. assertEquals(0, errorCounter);
  127. test << JSON_TEXT("}[");
  128. assertEquals(3, counter);
  129. assertEquals(0, errorCounter);
  130. test << JSON_TEXT("1,2,3]{\"hi\" : { \"one\" : 1}");
  131. assertEquals(4, counter);
  132. assertEquals(0, errorCounter);
  133. test << JSON_TEXT("}");
  134. assertEquals(5, counter);
  135. assertEquals(0, errorCounter);
  136. #ifdef JSON_SAFE
  137. test << JSON_TEXT("{\"hello\":12keaueuataueaouhe");
  138. assertEquals(1, errorCounter);
  139. #endif
  140. #ifdef JSON_SECURITY_MAX_STREAM_OBJECTS
  141. test.reset();
  142. unsigned int currentCount = errorCounter;
  143. json_string safe;
  144. for(int i = 0; i < JSON_SECURITY_MAX_STREAM_OBJECTS; ++i){
  145. safe += JSON_TEXT("{}");
  146. }
  147. test << safe;
  148. assertEquals(133, counter);
  149. assertEquals(currentCount, errorCounter);
  150. test.reset();
  151. json_string unsafe;
  152. for(int i = 0; i <= JSON_SECURITY_MAX_STREAM_OBJECTS + 1; ++i){
  153. unsafe += JSON_TEXT("{}");
  154. }
  155. test << unsafe;
  156. assertEquals(261, counter);
  157. assertEquals(currentCount + 1, errorCounter);
  158. #endif
  159. #endif
  160. #endif
  161. }