JsonHashTableTests.cpp 4.2 KB

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