JsonHashTableTests.cpp 3.7 KB

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