JsonHashTableTests.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. /*
  2. * Arduino JSON library
  3. * Benoit Blanchon 2014 - MIT License
  4. */
  5. #define ARDUINO_JSON_NO_DEPRECATED_WARNING
  6. #include "CppUnitTest.h"
  7. #include "JsonParser.h"
  8. #include <string>
  9. using namespace std;
  10. using namespace Microsoft::VisualStudio::CppUnitTestFramework;
  11. using namespace ArduinoJson::Parser;
  12. namespace ArduinoJsonParserTests
  13. {
  14. TEST_CLASS(JsonHashTableTests)
  15. {
  16. JsonHashTable hashTable;
  17. JsonArray nestedArray;
  18. char json[256];
  19. jsmntok_t tokens[32];
  20. JsonParserBase parser = JsonParserBase(tokens, 32);
  21. public:
  22. TEST_METHOD(EmptyString)
  23. {
  24. whenInputIs("");
  25. parseMustFail();
  26. }
  27. TEST_METHOD(EmptyHashTable)
  28. {
  29. whenInputIs("{}");
  30. parseMustSucceed();
  31. }
  32. TEST_METHOD(NotEnoughTokens)
  33. {
  34. setTokenCountTo(2);
  35. whenInputIs("{\"key\":0}");
  36. parseMustFail();
  37. itemMustNotExist("key");
  38. }
  39. TEST_METHOD(TwoIntegers)
  40. {
  41. setTokenCountTo(5);
  42. whenInputIs("{\"key1\":1,\"key2\":2}");
  43. parseMustSucceed();
  44. itemMustBe("key1", 1L);
  45. itemMustBe("key2", 2L);
  46. itemMustNotExist("key3");
  47. }
  48. TEST_METHOD(TwoBooleans)
  49. {
  50. setTokenCountTo(5);
  51. whenInputIs("{\"key1\":true,\"key2\":false}");
  52. parseMustSucceed();
  53. itemMustBe("key1", true);
  54. itemMustBe("key2", false);
  55. itemMustNotExist("key3");
  56. }
  57. TEST_METHOD(TwoStrings)
  58. {
  59. setTokenCountTo(5);
  60. whenInputIs("{\"key1\":\"hello\",\"key2\":\"world\"}");
  61. parseMustSucceed();
  62. itemMustBe("key1", "hello");
  63. itemMustBe("key2", "world");
  64. itemMustNotExist("key3");
  65. }
  66. TEST_METHOD(TwoNestedArrays)
  67. {
  68. setTokenCountTo(9);
  69. whenInputIs("{\"key1\":[1,2],\"key2\":[3,4]}");
  70. parseMustSucceed();
  71. itemMustBeAnArray("key1");
  72. arrayLengthMustBe(2);
  73. arrayItemMustBe(0, 1L);
  74. arrayItemMustBe(1, 2L);
  75. arrayItemMustBe(2, 0L);
  76. itemMustBeAnArray("key2");
  77. arrayLengthMustBe(2);
  78. arrayItemMustBe(0, 3L);
  79. arrayItemMustBe(1, 4L);
  80. arrayItemMustBe(2, 0L);
  81. itemMustNotExist("key3");
  82. }
  83. private:
  84. void setTokenCountTo(int n)
  85. {
  86. parser = JsonParserBase(tokens, n);
  87. }
  88. void whenInputIs(const char* input)
  89. {
  90. strcpy(json, input);
  91. hashTable = parser.parseHashTable(json);
  92. }
  93. void parseMustFail()
  94. {
  95. Assert::IsFalse(hashTable.success());
  96. }
  97. void parseMustSucceed()
  98. {
  99. Assert::IsTrue(hashTable.success());
  100. }
  101. void itemMustBe(const char* key, long expected)
  102. {
  103. Assert::AreEqual(expected, hashTable.getLong(key));
  104. }
  105. void itemMustBe(const char* key, bool expected)
  106. {
  107. Assert::AreEqual(expected, hashTable.getBool(key));
  108. }
  109. void itemMustBe(const char* key, const char* expected)
  110. {
  111. Assert::AreEqual(expected, hashTable.getString(key));
  112. }
  113. void itemMustNotExist(const char* key)
  114. {
  115. Assert::IsFalse(hashTable.containsKey(key));
  116. Assert::IsFalse(hashTable.getHashTable(key).success());
  117. Assert::IsFalse(hashTable.getArray(key).success());
  118. Assert::IsFalse(hashTable.getBool(key));
  119. Assert::AreEqual(0.0, hashTable.getDouble(key));
  120. Assert::AreEqual(0L, hashTable.getLong(key));
  121. Assert::IsNull(hashTable.getString(key));
  122. }
  123. void itemMustBeAnArray(const char* key)
  124. {
  125. nestedArray = hashTable.getArray(key);
  126. Assert::IsTrue(nestedArray.success());
  127. }
  128. void arrayLengthMustBe(int expected)
  129. {
  130. Assert::AreEqual(expected, nestedArray.getLength());
  131. }
  132. void arrayItemMustBe(int index, long expected)
  133. {
  134. Assert::AreEqual(expected, nestedArray.getLong(index));
  135. }
  136. };
  137. }