Files
ArduinoJson/JsonParserTests/JsonObjectTests.cpp

171 lines
4.3 KiB
C++
Raw Permalink Normal View History

2014-07-03 13:58:08 +02:00
/*
* 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:
2014-07-14 12:29:57 +02:00
TEST_METHOD(EmptyString)
2014-07-14 11:48:46 +02:00
{
2014-07-14 12:29:57 +02:00
whenInputIs("");
parseMustFail();
}
2014-07-14 12:29:57 +02:00
TEST_METHOD(EmptyHashTable)
{
whenInputIs("{}");
parseMustSucceed();
}
TEST_METHOD(NotEnoughTokens)
{
setTokenCountTo(2);
whenInputIs("{\"key\":0}");
parseMustFail();
2014-07-14 14:42:30 +02:00
itemMustNotExist("key");
}
2014-07-14 12:29:57 +02:00
TEST_METHOD(TwoIntegers)
{
setTokenCountTo(5);
2014-07-14 12:29:57 +02:00
whenInputIs("{\"key1\":1,\"key2\":2}");
2014-07-14 12:29:57 +02:00
parseMustSucceed();
itemMustBe("key1", 1L);
itemMustBe("key2", 2L);
2014-07-14 14:42:30 +02:00
itemMustNotExist("key3");
}
2014-07-14 12:29:57 +02:00
TEST_METHOD(TwoBooleans)
{
setTokenCountTo(5);
2014-07-14 12:29:57 +02:00
whenInputIs("{\"key1\":true,\"key2\":false}");
2014-07-14 12:29:57 +02:00
parseMustSucceed();
itemMustBe("key1", true);
itemMustBe("key2", false);
2014-07-14 14:42:30 +02:00
itemMustNotExist("key3");
}
2014-07-14 12:29:57 +02:00
TEST_METHOD(TwoStrings)
{
setTokenCountTo(5);
2014-07-14 12:29:57 +02:00
whenInputIs("{\"key1\":\"hello\",\"key2\":\"world\"}");
2014-07-14 12:29:57 +02:00
parseMustSucceed();
itemMustBe("key1", "hello");
itemMustBe("key2", "world");
2014-07-14 14:42:30 +02:00
itemMustNotExist("key3");
}
2014-07-14 12:29:57 +02:00
TEST_METHOD(TwoNestedArrays)
{
setTokenCountTo(9);
2014-07-14 12:29:57 +02:00
whenInputIs("{\"key1\":[1,2],\"key2\":[3,4]}");
parseMustSucceed();
2014-07-14 11:48:46 +02:00
2014-07-14 12:29:57 +02:00
itemMustBeAnArray("key1");
arrayLengthMustBe(2);
arrayItemMustBe(0, 1L);
arrayItemMustBe(1, 2L);
arrayItemMustBe(2, 0L);
2014-07-14 11:48:46 +02:00
2014-07-14 12:29:57 +02:00
itemMustBeAnArray("key2");
arrayLengthMustBe(2);
arrayItemMustBe(0, 3L);
arrayItemMustBe(1, 4L);
arrayItemMustBe(2, 0L);
2014-07-14 11:48:46 +02:00
2014-07-14 14:42:30 +02:00
itemMustNotExist("key3");
}
private:
void setTokenCountTo(int n)
{
parser = JsonParserBase(tokens, n);
}
2014-07-14 12:29:57 +02:00
void whenInputIs(const char* input)
{
strcpy(json, input);
hashTable = parser.parseHashTable(json);
2014-07-14 11:48:46 +02:00
}
2014-07-14 12:29:57 +02:00
void parseMustFail()
2014-07-14 11:48:46 +02:00
{
2014-07-14 12:29:57 +02:00
Assert::IsFalse(hashTable.success());
}
2014-07-14 12:29:57 +02:00
void parseMustSucceed()
{
Assert::IsTrue(hashTable.success());
}
2014-07-14 12:29:57 +02:00
void itemMustBe(const char* key, long expected)
{
Assert::AreEqual(expected, hashTable.getLong(key));
}
2014-07-14 12:29:57 +02:00
void itemMustBe(const char* key, bool expected)
{
Assert::AreEqual(expected, hashTable.getBool(key));
}
2014-07-14 12:29:57 +02:00
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));
}
};
}