JsonParser_Array_Tests.cpp 3.1 KB

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