JsonArrayTests.cpp 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. #include "CppUnitTest.h"
  2. #include "JsonArray.h"
  3. #include "JsonHashTable.h"
  4. using namespace Microsoft::VisualStudio::CppUnitTestFramework;
  5. namespace JsonGeneratorTests
  6. {
  7. TEST_CLASS(JsonArrayTests)
  8. {
  9. public:
  10. TEST_METHOD(Empty)
  11. {
  12. returns(2);
  13. jsonIs("[]");
  14. }
  15. TEST_METHOD(Null)
  16. {
  17. addValue((char*)0);
  18. returns(6);
  19. jsonIs("[null]");
  20. }
  21. TEST_METHOD(OneString)
  22. {
  23. addValue("hello");
  24. returns(9);
  25. jsonIs("[\"hello\"]");
  26. }
  27. TEST_METHOD(TwoStrings)
  28. {
  29. addValue("hello");
  30. addValue("world");
  31. returns(17);
  32. jsonIs("[\"hello\",\"world\"]");
  33. }
  34. TEST_METHOD(OneStringOverCapacity)
  35. {
  36. addValue("hello");
  37. addValue("world");
  38. addValue("lost");
  39. returns(17);
  40. jsonIs("[\"hello\",\"world\"]");
  41. }
  42. TEST_METHOD(OneNumber)
  43. {
  44. addValue(3.14);
  45. returns(6);
  46. jsonIs("[3.14]");
  47. }
  48. TEST_METHOD(TwoNumbers)
  49. {
  50. addValue(3.14);
  51. addValue(2.72);
  52. returns(11);
  53. jsonIs("[3.14,2.72]");
  54. }
  55. TEST_METHOD(OneNumberOverCapacity)
  56. {
  57. addValue(3.14);
  58. addValue(2.72);
  59. addValue(1.41);
  60. returns(11);
  61. jsonIs("[3.14,2.72]");
  62. }
  63. TEST_METHOD(OneTrue)
  64. {
  65. addValue(true);
  66. returns(6);
  67. jsonIs("[true]");
  68. }
  69. TEST_METHOD(OneFalse)
  70. {
  71. addValue(false);
  72. returns(7);
  73. jsonIs("[false]");
  74. }
  75. TEST_METHOD(TwoBooleans)
  76. {
  77. addValue(false);
  78. addValue(true);
  79. returns(12);
  80. jsonIs("[false,true]");
  81. }
  82. TEST_METHOD(OneBooleanOverCapacity)
  83. {
  84. addValue(false);
  85. addValue(true);
  86. addValue(false);
  87. returns(12);
  88. jsonIs("[false,true]");
  89. }
  90. TEST_METHOD(OneEmptyNestedArray)
  91. {
  92. JsonArray<1> nestedArray;
  93. addNested(nestedArray);
  94. returns(4);
  95. jsonIs("[[]]");
  96. }
  97. TEST_METHOD(OneEmptyNestedHash)
  98. {
  99. JsonHashTable<1> nestedHash;
  100. addNested(nestedHash);
  101. returns(4);
  102. jsonIs("[{}]");
  103. }
  104. TEST_METHOD(OneNestedArrayWithOneItem)
  105. {
  106. JsonArray<1> nestedArray;
  107. nestedArray.add(3.14);
  108. addNested(nestedArray);
  109. returns(8);
  110. jsonIs("[[3.14]]");
  111. }
  112. private:
  113. JsonArray<2> arr;
  114. char buffer[256];
  115. void addNested(JsonObjectBase& value)
  116. {
  117. arr.add(value);
  118. }
  119. template<typename T>
  120. void addValue(T value)
  121. {
  122. arr.add(value);
  123. }
  124. void jsonIs(const char* expected)
  125. {
  126. arr.writeTo(buffer, sizeof(buffer));
  127. Assert::AreEqual(expected, buffer);
  128. }
  129. void returns(size_t expected)
  130. {
  131. size_t actual = arr.writeTo(buffer, sizeof(buffer));
  132. Assert::AreEqual(expected, actual);
  133. }
  134. };
  135. }