| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165 |
- /*
- * Arduino JSON library
- * Benoit Blanchon 2014 - MIT License
- */
- #include "CppUnitTest.h"
- #include "JsonParser.h"
- #include <string>
- using namespace std;
- using namespace Microsoft::VisualStudio::CppUnitTestFramework;
- using namespace ArduinoJson::Parser;
- namespace ArduinoJsonParserTests
- {
- TEST_CLASS(JsonHashTableTests)
- {
- JsonHashTable hashTable;
- JsonArray nestedArray;
- char json[256];
- jsmntok_t tokens[32];
- JsonParserBase parser = JsonParserBase(tokens, 32);
- public:
- TEST_METHOD(EmptyHashTable)
- {
- whenInputIs("{}");
- parseMustSucceed();
- }
- TEST_METHOD(NotEnoughTokens)
- {
- setTokenCountTo(2);
- whenInputIs("{\"key\":0}");
- parseMustFail();
- itemMustNotExist("key");
- }
- TEST_METHOD(TwoIntegers)
- {
- setTokenCountTo(5);
- whenInputIs("{\"key1\":1,\"key2\":2}");
- parseMustSucceed();
- itemMustBe("key1", 1L);
- itemMustBe("key2", 2L);
- itemMustNotExist("key3");
- }
- TEST_METHOD(TwoBooleans)
- {
- setTokenCountTo(5);
- whenInputIs("{\"key1\":true,\"key2\":false}");
- parseMustSucceed();
- itemMustBe("key1", true);
- itemMustBe("key2", false);
- itemMustNotExist("key3");
- }
- TEST_METHOD(TwoStrings)
- {
- setTokenCountTo(5);
- whenInputIs("{\"key1\":\"hello\",\"key2\":\"world\"}");
- parseMustSucceed();
- itemMustBe("key1", "hello");
- itemMustBe("key2", "world");
- itemMustNotExist("key3");
- }
- TEST_METHOD(TwoNestedArrays)
- {
- setTokenCountTo(9);
- whenInputIs("{\"key1\":[1,2],\"key2\":[3,4]}");
- parseMustSucceed();
- itemMustBeAnArray("key1");
- arrayLengthMustBe(2);
- arrayItemMustBe(0, 1L);
- arrayItemMustBe(1, 2L);
- arrayItemMustBe(2, 0L);
- itemMustBeAnArray("key2");
- arrayLengthMustBe(2);
- arrayItemMustBe(0, 3L);
- arrayItemMustBe(1, 4L);
- arrayItemMustBe(2, 0L);
- itemMustNotExist("key3");
- }
- private:
- void setTokenCountTo(int n)
- {
- parser = JsonParserBase(tokens, n);
- }
- void whenInputIs(const char* input)
- {
- strcpy(json, input);
- hashTable = parser.parseHashTable(json);
- }
- void parseMustFail()
- {
- Assert::IsFalse(hashTable.success());
- }
- void parseMustSucceed()
- {
- Assert::IsTrue(hashTable.success());
- }
- void itemMustBe(const char* key, long expected)
- {
- Assert::AreEqual(expected, hashTable.getLong(key));
- }
- void itemMustBe(const char* key, bool expected)
- {
- Assert::AreEqual(expected, hashTable.getBool(key));
- }
- void itemMustBe(const char* key, const char* expected)
- {
- Assert::AreEqual(expected, hashTable.getString(key));
- }
- void itemMustNotExist(const char* key)
- {
- Assert::IsFalse(hashTable.containsKey(key));
- Assert::IsFalse(hashTable.getHashTable(key).success());
- Assert::IsFalse(hashTable.getArray(key).success());
- Assert::IsFalse(hashTable.getBool(key));
- Assert::AreEqual(0.0, hashTable.getDouble(key));
- Assert::AreEqual(0L, hashTable.getLong(key));
- Assert::IsNull(hashTable.getString(key));
- }
- void itemMustBeAnArray(const char* key)
- {
- nestedArray = hashTable.getArray(key);
- Assert::IsTrue(nestedArray.success());
- }
- void arrayLengthMustBe(int expected)
- {
- Assert::AreEqual(expected, nestedArray.getLength());
- }
- void arrayItemMustBe(int index, long expected)
- {
- Assert::AreEqual(expected, nestedArray.getLong(index));
- }
- };
- }
|