JsonParser_Array_Tests.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. #include <gtest/gtest.h>
  2. #include <ArduinoJson/StaticJsonBuffer.hpp>
  3. #include <ArduinoJson/JsonValue.hpp>
  4. using namespace ArduinoJson;
  5. class JsonParser_Array_Tests : public testing::Test
  6. {
  7. protected:
  8. void whenInputIs(const char *json)
  9. {
  10. strcpy(_jsonString, json);
  11. _array = _jsonBuffer.parseArray(_jsonString);
  12. }
  13. void parseMustSucceed()
  14. {
  15. EXPECT_TRUE(_array.success());
  16. }
  17. void parseMustFail()
  18. {
  19. EXPECT_FALSE(_array.success());
  20. EXPECT_EQ(0, _array.size());
  21. }
  22. void sizeMustBe(int expected)
  23. {
  24. EXPECT_EQ(expected, _array.size());
  25. }
  26. template<typename T>
  27. void firstElementMustBe(T expected)
  28. {
  29. elementAtIndexMustBe(0, expected);
  30. }
  31. template<typename T>
  32. void secondElementMustBe(T expected)
  33. {
  34. elementAtIndexMustBe(1, expected);
  35. }
  36. template<typename T>
  37. void elementAtIndexMustBe(int index, T expected)
  38. {
  39. EXPECT_EQ(expected, _array[index].as<T>());
  40. }
  41. void elementAtIndexMustBe(int index, const char* expected)
  42. {
  43. EXPECT_STREQ(expected, _array[index].as<const char*>());
  44. }
  45. StaticJsonBuffer<42> _jsonBuffer;
  46. JsonArray _array;
  47. char _jsonString[256];
  48. };
  49. TEST_F(JsonParser_Array_Tests, EmptyArray)
  50. {
  51. whenInputIs("[]");
  52. parseMustSucceed();
  53. sizeMustBe(0);
  54. }
  55. TEST_F(JsonParser_Array_Tests, ArrayWithNoEnd)
  56. {
  57. whenInputIs("[");
  58. parseMustFail();
  59. }
  60. TEST_F(JsonParser_Array_Tests, EmptyArrayWithLeadingSpaces)
  61. {
  62. whenInputIs(" []");
  63. parseMustSucceed();
  64. sizeMustBe(0);
  65. }
  66. TEST_F(JsonParser_Array_Tests, Garbage)
  67. {
  68. whenInputIs("%*$£¤");
  69. parseMustFail();
  70. }
  71. TEST_F(JsonParser_Array_Tests, OneInteger)
  72. {
  73. whenInputIs("[42]");
  74. parseMustSucceed();
  75. sizeMustBe(1);
  76. firstElementMustBe(42);
  77. }
  78. TEST_F(JsonParser_Array_Tests, OneIntegerWithSpacesBefore)
  79. {
  80. whenInputIs("[ \t\r\n42]");
  81. parseMustSucceed();
  82. sizeMustBe(1);
  83. firstElementMustBe(42);
  84. }
  85. TEST_F(JsonParser_Array_Tests, OneIntegerWithSpaceAfter)
  86. {
  87. whenInputIs("[42 \t\r\n]");
  88. parseMustSucceed();
  89. sizeMustBe(1);
  90. firstElementMustBe(42);
  91. }
  92. TEST_F(JsonParser_Array_Tests, TwoIntegers)
  93. {
  94. whenInputIs("[42,84]");
  95. parseMustSucceed();
  96. sizeMustBe(2);
  97. firstElementMustBe(42);
  98. secondElementMustBe(84);
  99. }
  100. TEST_F(JsonParser_Array_Tests, TwoDoubles)
  101. {
  102. whenInputIs("[4.2,8.4]");
  103. parseMustSucceed();
  104. sizeMustBe(2);
  105. firstElementMustBe(4.2);
  106. secondElementMustBe(8.4);
  107. }
  108. TEST_F(JsonParser_Array_Tests, TwoBooleans)
  109. {
  110. whenInputIs("[true,false]");
  111. parseMustSucceed();
  112. sizeMustBe(2);
  113. firstElementMustBe(true);
  114. secondElementMustBe(false);
  115. }
  116. TEST_F(JsonParser_Array_Tests, TwoNulls)
  117. {
  118. const char* const nullCharPtr = 0;
  119. whenInputIs("[null,null]");
  120. parseMustSucceed();
  121. sizeMustBe(2);
  122. firstElementMustBe(nullCharPtr);
  123. secondElementMustBe(nullCharPtr);
  124. }
  125. TEST_F(JsonParser_Array_Tests, TwoStrings)
  126. {
  127. whenInputIs("[\"hello\",\"world\"]");
  128. parseMustSucceed();
  129. sizeMustBe(2);
  130. firstElementMustBe("hello");
  131. secondElementMustBe("world");
  132. }