JsonObjectTests.cpp 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  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(EmptyHashTable)
  22. {
  23. whenInputIs("{}");
  24. parseMustSucceed();
  25. }
  26. TEST_METHOD(NotEnoughTokens)
  27. {
  28. setTokenCountTo(2);
  29. whenInputIs("{\"key\":0}");
  30. parseMustFail();
  31. itemMustNotExist("key");
  32. }
  33. TEST_METHOD(TwoIntegers)
  34. {
  35. setTokenCountTo(5);
  36. whenInputIs("{\"key1\":1,\"key2\":2}");
  37. parseMustSucceed();
  38. itemMustBe("key1", 1L);
  39. itemMustBe("key2", 2L);
  40. itemMustNotExist("key3");
  41. }
  42. TEST_METHOD(TwoBooleans)
  43. {
  44. setTokenCountTo(5);
  45. whenInputIs("{\"key1\":true,\"key2\":false}");
  46. parseMustSucceed();
  47. itemMustBe("key1", true);
  48. itemMustBe("key2", false);
  49. itemMustNotExist("key3");
  50. }
  51. TEST_METHOD(TwoStrings)
  52. {
  53. setTokenCountTo(5);
  54. whenInputIs("{\"key1\":\"hello\",\"key2\":\"world\"}");
  55. parseMustSucceed();
  56. itemMustBe("key1", "hello");
  57. itemMustBe("key2", "world");
  58. itemMustNotExist("key3");
  59. }
  60. TEST_METHOD(TwoNestedArrays)
  61. {
  62. setTokenCountTo(9);
  63. whenInputIs("{\"key1\":[1,2],\"key2\":[3,4]}");
  64. parseMustSucceed();
  65. itemMustBeAnArray("key1");
  66. arrayLengthMustBe(2);
  67. arrayItemMustBe(0, 1L);
  68. arrayItemMustBe(1, 2L);
  69. arrayItemMustBe(2, 0L);
  70. itemMustBeAnArray("key2");
  71. arrayLengthMustBe(2);
  72. arrayItemMustBe(0, 3L);
  73. arrayItemMustBe(1, 4L);
  74. arrayItemMustBe(2, 0L);
  75. itemMustNotExist("key3");
  76. }
  77. private:
  78. void setTokenCountTo(int n)
  79. {
  80. parser = JsonParserBase(tokens, n);
  81. }
  82. void whenInputIs(const char* input)
  83. {
  84. strcpy(json, input);
  85. hashTable = parser.parseHashTable(json);
  86. }
  87. void parseMustFail()
  88. {
  89. Assert::IsFalse(hashTable.success());
  90. }
  91. void parseMustSucceed()
  92. {
  93. Assert::IsTrue(hashTable.success());
  94. }
  95. void itemMustBe(const char* key, long expected)
  96. {
  97. Assert::AreEqual(expected, hashTable.getLong(key));
  98. }
  99. void itemMustBe(const char* key, bool expected)
  100. {
  101. Assert::AreEqual(expected, hashTable.getBool(key));
  102. }
  103. void itemMustBe(const char* key, const char* expected)
  104. {
  105. Assert::AreEqual(expected, hashTable.getString(key));
  106. }
  107. void itemMustNotExist(const char* key)
  108. {
  109. Assert::IsFalse(hashTable.containsKey(key));
  110. Assert::IsFalse(hashTable.getHashTable(key).success());
  111. Assert::IsFalse(hashTable.getArray(key).success());
  112. Assert::IsFalse(hashTable.getBool(key));
  113. Assert::AreEqual(0.0, hashTable.getDouble(key));
  114. Assert::AreEqual(0L, hashTable.getLong(key));
  115. Assert::IsNull(hashTable.getString(key));
  116. }
  117. void itemMustBeAnArray(const char* key)
  118. {
  119. nestedArray = hashTable.getArray(key);
  120. Assert::IsTrue(nestedArray.success());
  121. }
  122. void arrayLengthMustBe(int expected)
  123. {
  124. Assert::AreEqual(expected, nestedArray.getLength());
  125. }
  126. void arrayItemMustBe(int index, long expected)
  127. {
  128. Assert::AreEqual(expected, nestedArray.getLong(index));
  129. }
  130. };
  131. }