| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348 |
- // Copyright Benoit Blanchon 2014-2016
- // MIT License
- //
- // Arduino JSON library
- // https://github.com/bblanchon/ArduinoJson
- // If you like this project, please add a star!
- #include <gtest/gtest.h>
- #include <ArduinoJson.h>
- class JsonParser_Array_Tests : public testing::Test {
- protected:
- void whenInputIs(const char *json) { strcpy(_jsonString, json); }
- void whenInputIs(const char *json, size_t len) {
- memcpy(_jsonString, json, len);
- }
- void parseMustSucceed() {
- _array = &_jsonBuffer.parseArray(_jsonString);
- EXPECT_TRUE(_array->success());
- }
- void parseMustFail() {
- _array = &_jsonBuffer.parseArray(_jsonString);
- EXPECT_FALSE(_array->success());
- EXPECT_EQ(0, _array->size());
- }
- void sizeMustBe(int expected) { ASSERT_EQ(expected, _array->size()); }
- template <typename T>
- void firstElementMustBe(T expected) {
- elementAtIndexMustBe(0, expected);
- }
- template <typename T>
- void secondElementMustBe(T expected) {
- elementAtIndexMustBe(1, expected);
- }
- template <typename T>
- void elementAtIndexMustBe(int index, T expected) {
- EXPECT_EQ(expected, (*_array)[index].as<T>());
- }
- void elementAtIndexMustBe(int index, const char *expected) {
- EXPECT_STREQ(expected, (*_array)[index].as<const char *>());
- }
- DynamicJsonBuffer _jsonBuffer;
- JsonArray *_array;
- char _jsonString[256];
- };
- TEST_F(JsonParser_Array_Tests, EmptyArray) {
- whenInputIs("[]");
- parseMustSucceed();
- sizeMustBe(0);
- }
- TEST_F(JsonParser_Array_Tests, MissingOpeningBracket) {
- whenInputIs("]");
- parseMustFail();
- }
- TEST_F(JsonParser_Array_Tests, ArrayWithNoEnd) {
- whenInputIs("[");
- parseMustFail();
- }
- TEST_F(JsonParser_Array_Tests, EmptyArrayWithLeadingSpaces) {
- whenInputIs(" []");
- parseMustSucceed();
- sizeMustBe(0);
- }
- TEST_F(JsonParser_Array_Tests, Garbage) {
- whenInputIs("%*$£¤");
- parseMustFail();
- }
- TEST_F(JsonParser_Array_Tests, OneInteger) {
- whenInputIs("[42]");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe(42);
- }
- TEST_F(JsonParser_Array_Tests, OneIntegerWithSpacesBefore) {
- whenInputIs("[ \t\r\n42]");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe(42);
- }
- TEST_F(JsonParser_Array_Tests, OneIntegerWithSpaceAfter) {
- whenInputIs("[42 \t\r\n]");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe(42);
- }
- TEST_F(JsonParser_Array_Tests, TwoIntegers) {
- whenInputIs("[42,84]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe(42);
- secondElementMustBe(84);
- }
- TEST_F(JsonParser_Array_Tests, TwoDoubles) {
- whenInputIs("[4.2,1e2]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe(4.2);
- secondElementMustBe(1e2);
- }
- TEST_F(JsonParser_Array_Tests, UnsignedLong) {
- whenInputIs("[4294967295]");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe(4294967295UL);
- }
- TEST_F(JsonParser_Array_Tests, TwoBooleans) {
- whenInputIs("[true,false]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe(true);
- secondElementMustBe(false);
- }
- TEST_F(JsonParser_Array_Tests, TwoNulls) {
- const char *const nullCharPtr = 0;
- whenInputIs("[null,null]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe(nullCharPtr);
- secondElementMustBe(nullCharPtr);
- }
- TEST_F(JsonParser_Array_Tests, TwoStringsDoubleQuotes) {
- whenInputIs("[ \"hello\" , \"world\" ]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe("hello");
- secondElementMustBe("world");
- }
- TEST_F(JsonParser_Array_Tests, TwoStringsSingleQuotes) {
- whenInputIs("[ 'hello' , 'world' ]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe("hello");
- secondElementMustBe("world");
- }
- TEST_F(JsonParser_Array_Tests, TwoStringsNoQuotes) {
- whenInputIs("[ hello , world ]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe("hello");
- secondElementMustBe("world");
- }
- TEST_F(JsonParser_Array_Tests, EmptyStringsDoubleQuotes) {
- whenInputIs("[\"\",\"\"]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe("");
- secondElementMustBe("");
- }
- TEST_F(JsonParser_Array_Tests, EmptyStringSingleQuotes) {
- whenInputIs("[\'\',\'\']");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe("");
- secondElementMustBe("");
- }
- TEST_F(JsonParser_Array_Tests, EmptyStringNoQuotes) {
- whenInputIs("[,]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe("");
- secondElementMustBe("");
- }
- TEST_F(JsonParser_Array_Tests, ClosingDoubleQuoteMissing) {
- whenInputIs("[\"]");
- parseMustFail();
- }
- TEST_F(JsonParser_Array_Tests, ClosingSignleQuoteMissing) {
- whenInputIs("[\']");
- parseMustFail();
- }
- TEST_F(JsonParser_Array_Tests, StringWithEscapedChars) {
- whenInputIs("[\"1\\\"2\\\\3\\/4\\b5\\f6\\n7\\r8\\t9\"]");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe("1\"2\\3/4\b5\f6\n7\r8\t9");
- }
- TEST_F(JsonParser_Array_Tests, StringWithUnterminatedEscapeSequence) {
- whenInputIs("\"\\\0\"", 4);
- parseMustFail();
- }
- TEST_F(JsonParser_Array_Tests, CCommentBeforeOpeningBracket) {
- whenInputIs("/*COMMENT*/[\"hello\"]");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe("hello");
- }
- TEST_F(JsonParser_Array_Tests, CCommentAfterOpeningBracket) {
- whenInputIs("[/*COMMENT*/\"hello\"]");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe("hello");
- }
- TEST_F(JsonParser_Array_Tests, CCommentBeforeClosingBracket) {
- whenInputIs("[\"hello\"/*COMMENT*/]");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe("hello");
- }
- TEST_F(JsonParser_Array_Tests, CCommentAfterClosingBracket) {
- whenInputIs("[\"hello\"]/*COMMENT*/");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe("hello");
- }
- TEST_F(JsonParser_Array_Tests, CCommentBeforeComma) {
- whenInputIs("[\"hello\"/*COMMENT*/,\"world\"]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe("hello");
- secondElementMustBe("world");
- }
- TEST_F(JsonParser_Array_Tests, CCommentAfterComma) {
- whenInputIs("[\"hello\",/*COMMENT*/\"world\"]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe("hello");
- secondElementMustBe("world");
- }
- TEST_F(JsonParser_Array_Tests, CppCommentBeforeOpeningBracket) {
- whenInputIs("//COMMENT\n[\"hello\"]");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe("hello");
- }
- TEST_F(JsonParser_Array_Tests, CppCommentAfterOpeningBracket) {
- whenInputIs("[//COMMENT\n\"hello\"]");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe("hello");
- }
- TEST_F(JsonParser_Array_Tests, CppCommentBeforeClosingBracket) {
- whenInputIs("[\"hello\"//COMMENT\n]");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe("hello");
- }
- TEST_F(JsonParser_Array_Tests, CppCommentAfterClosingBracket) {
- whenInputIs("[\"hello\"]//COMMENT\n");
- parseMustSucceed();
- sizeMustBe(1);
- firstElementMustBe("hello");
- }
- TEST_F(JsonParser_Array_Tests, CppCommentBeforeComma) {
- whenInputIs("[\"hello\"//COMMENT\n,\"world\"]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe("hello");
- secondElementMustBe("world");
- }
- TEST_F(JsonParser_Array_Tests, CppCommentAfterComma) {
- whenInputIs("[\"hello\",//COMMENT\n\"world\"]");
- parseMustSucceed();
- sizeMustBe(2);
- firstElementMustBe("hello");
- secondElementMustBe("world");
- }
- TEST_F(JsonParser_Array_Tests, InvalidCppComment) {
- whenInputIs("[/COMMENT\n]");
- parseMustFail();
- }
- TEST_F(JsonParser_Array_Tests, InvalidComment) {
- whenInputIs("[/*/\n]");
- parseMustFail();
- }
- TEST_F(JsonParser_Array_Tests, UnfinishedCComment) {
- whenInputIs("[/*COMMENT]");
- parseMustFail();
- }
|