| 
									
										
										
										
											2014-07-03 13:58:08 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  | * Arduino JSON library | 
					
						
							|  |  |  | * Benoit Blanchon 2014 - MIT License | 
					
						
							| 
									
										
										
										
											2014-07-22 20:33:17 +02:00
										 |  |  | */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #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(EmptyHashTable) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             whenInputIs("{}"); | 
					
						
							|  |  |  |             parseMustSucceed(); | 
					
						
							| 
									
										
										
										
											2014-07-22 20:33:17 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 14:35:51 +02:00
										 |  |  |         TEST_METHOD(NotEnoughTokens) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             setTokenCountTo(2); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             whenInputIs("{\"key\":0}"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             parseMustFail(); | 
					
						
							| 
									
										
										
										
											2014-07-14 14:42:30 +02:00
										 |  |  |             itemMustNotExist("key"); | 
					
						
							| 
									
										
										
										
											2014-07-22 20:33:17 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 12:29:57 +02:00
										 |  |  |         TEST_METHOD(TwoIntegers) | 
					
						
							|  |  |  |         { | 
					
						
							| 
									
										
										
										
											2014-07-14 14:35:51 +02:00
										 |  |  |             setTokenCountTo(5); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 12:29:57 +02:00
										 |  |  |             whenInputIs("{\"key1\":1,\"key2\":2}"); | 
					
						
							| 
									
										
										
										
											2014-07-14 14:35:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-22 20:33:17 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 12:29:57 +02:00
										 |  |  |         TEST_METHOD(TwoBooleans) | 
					
						
							|  |  |  |         { | 
					
						
							| 
									
										
										
										
											2014-07-14 14:35:51 +02:00
										 |  |  |             setTokenCountTo(5); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 12:29:57 +02:00
										 |  |  |             whenInputIs("{\"key1\":true,\"key2\":false}"); | 
					
						
							| 
									
										
										
										
											2014-07-14 14:35:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-22 20:33:17 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 12:29:57 +02:00
										 |  |  |         TEST_METHOD(TwoStrings) | 
					
						
							|  |  |  |         { | 
					
						
							| 
									
										
										
										
											2014-07-14 14:35:51 +02:00
										 |  |  |             setTokenCountTo(5); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 12:29:57 +02:00
										 |  |  |             whenInputIs("{\"key1\":\"hello\",\"key2\":\"world\"}"); | 
					
						
							| 
									
										
										
										
											2014-07-14 14:35:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											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-22 20:33:17 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 12:29:57 +02:00
										 |  |  |         TEST_METHOD(TwoNestedArrays) | 
					
						
							|  |  |  |         { | 
					
						
							| 
									
										
										
										
											2014-07-14 14:35:51 +02:00
										 |  |  |             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"); | 
					
						
							| 
									
										
										
										
											2014-07-22 20:33:17 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     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-22 20:33:17 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 12:29:57 +02:00
										 |  |  |         void parseMustSucceed() | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             Assert::IsTrue(hashTable.success()); | 
					
						
							| 
									
										
										
										
											2014-07-22 20:33:17 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 12:29:57 +02:00
										 |  |  |         void itemMustBe(const char* key, long expected) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             Assert::AreEqual(expected, hashTable.getLong(key)); | 
					
						
							| 
									
										
										
										
											2014-07-22 20:33:17 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 12:29:57 +02:00
										 |  |  |         void itemMustBe(const char* key, bool expected) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             Assert::AreEqual(expected, hashTable.getBool(key)); | 
					
						
							| 
									
										
										
										
											2014-07-22 20:33:17 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-07-14 12:29:57 +02:00
										 |  |  |         void itemMustBe(const char* key, const char* expected) | 
					
						
							|  |  |  |         { | 
					
						
							|  |  |  |             Assert::AreEqual(expected, hashTable.getString(key)); | 
					
						
							| 
									
										
										
										
											2014-07-22 20:33:17 +02:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         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)); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     }; | 
					
						
							| 
									
										
										
										
											2014-02-26 21:58:20 +01:00
										 |  |  | } |