| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318 |
- // ArduinoJson - arduinojson.org
- // Copyright Benoit Blanchon 2014-2023
- // MIT License
- #include <ArduinoJson.h>
- #include <catch.hpp>
- TEST_CASE("JsonBuffer::parseArray()") {
- DynamicJsonBuffer jb;
- SECTION("EmptyArray") {
- JsonArray& arr = jb.parseArray("[]");
- REQUIRE(arr.success());
- REQUIRE(0 == arr.size());
- }
- SECTION("MissingOpeningBracket") {
- JsonArray& arr = jb.parseArray("]");
- REQUIRE_FALSE(arr.success());
- }
- SECTION("ArrayWithNoEnd") {
- JsonArray& arr = jb.parseArray("[");
- REQUIRE_FALSE(arr.success());
- }
- SECTION("EmptyArrayWithLeadingSpaces") {
- JsonArray& arr = jb.parseArray(" []");
- REQUIRE(arr.success());
- REQUIRE(0 == arr.size());
- }
- SECTION("Garbage") {
- JsonArray& arr = jb.parseArray("%*$£¤");
- REQUIRE_FALSE(arr.success());
- }
- SECTION("OneInteger") {
- JsonArray& arr = jb.parseArray("[42]");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == 42);
- }
- SECTION("OneIntegerWithSpacesBefore") {
- JsonArray& arr = jb.parseArray("[ \t\r\n42]");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == 42);
- }
- SECTION("OneIntegerWithSpaceAfter") {
- JsonArray& arr = jb.parseArray("[42 \t\r\n]");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == 42);
- }
- SECTION("TwoIntegers") {
- JsonArray& arr = jb.parseArray("[42,84]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == 42);
- REQUIRE(arr[1] == 84);
- }
- SECTION("TwoDoubles") {
- JsonArray& arr = jb.parseArray("[4.2,1e2]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == 4.2);
- REQUIRE(arr[1] == 1e2);
- }
- SECTION("UnsignedLong") {
- JsonArray& arr = jb.parseArray("[4294967295]");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == 4294967295UL);
- }
- SECTION("TwoBooleans") {
- JsonArray& arr = jb.parseArray("[true,false]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == true);
- REQUIRE(arr[1] == false);
- }
- SECTION("TwoNulls") {
- JsonArray& arr = jb.parseArray("[null,null]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0].as<char*>() == 0);
- REQUIRE(arr[1].as<char*>() == 0);
- }
- SECTION("TwoStringsDoubleQuotes") {
- JsonArray& arr = jb.parseArray("[ \"hello\" , \"world\" ]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == "hello");
- REQUIRE(arr[1] == "world");
- }
- SECTION("TwoStringsSingleQuotes") {
- JsonArray& arr = jb.parseArray("[ 'hello' , 'world' ]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == "hello");
- REQUIRE(arr[1] == "world");
- }
- SECTION("TwoStringsNoQuotes") {
- JsonArray& arr = jb.parseArray("[ hello , world ]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == "hello");
- REQUIRE(arr[1] == "world");
- }
- SECTION("EmptyStringsDoubleQuotes") {
- JsonArray& arr = jb.parseArray("[\"\",\"\"]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == "");
- REQUIRE(arr[1] == "");
- }
- SECTION("EmptyStringSingleQuotes") {
- JsonArray& arr = jb.parseArray("[\'\',\'\']");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == "");
- REQUIRE(arr[1] == "");
- }
- SECTION("EmptyStringNoQuotes") {
- JsonArray& arr = jb.parseArray("[,]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == "");
- REQUIRE(arr[1] == "");
- }
- SECTION("ClosingDoubleQuoteMissing") {
- JsonArray& arr = jb.parseArray("[\"]");
- REQUIRE_FALSE(arr.success());
- }
- SECTION("ClosingSignleQuoteMissing") {
- JsonArray& arr = jb.parseArray("[\']");
- REQUIRE_FALSE(arr.success());
- }
- SECTION("StringWithEscapedChars") {
- JsonArray& arr = jb.parseArray("[\"1\\\"2\\\\3\\/4\\b5\\f6\\n7\\r8\\t9\"]");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == "1\"2\\3/4\b5\f6\n7\r8\t9");
- }
- SECTION("StringWithUnterminatedEscapeSequence") {
- JsonArray& arr = jb.parseArray("\"\\\0\"", 4);
- REQUIRE_FALSE(arr.success());
- }
- SECTION("CCommentBeforeOpeningBracket") {
- JsonArray& arr = jb.parseArray("/*COMMENT*/ [\"hello\"]");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == "hello");
- }
- SECTION("CCommentAfterOpeningBracket") {
- JsonArray& arr = jb.parseArray("[/*COMMENT*/ \"hello\"]");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == "hello");
- }
- SECTION("CCommentBeforeClosingBracket") {
- JsonArray& arr = jb.parseArray("[\"hello\"/*COMMENT*/]");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == "hello");
- }
- SECTION("CCommentAfterClosingBracket") {
- JsonArray& arr = jb.parseArray("[\"hello\"]/*COMMENT*/");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == "hello");
- }
- SECTION("CCommentBeforeComma") {
- JsonArray& arr = jb.parseArray("[\"hello\"/*COMMENT*/,\"world\"]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == "hello");
- REQUIRE(arr[1] == "world");
- }
- SECTION("CCommentAfterComma") {
- JsonArray& arr = jb.parseArray("[\"hello\",/*COMMENT*/ \"world\"]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == "hello");
- REQUIRE(arr[1] == "world");
- }
- SECTION("CppCommentBeforeOpeningBracket") {
- JsonArray& arr = jb.parseArray("//COMMENT\n\t[\"hello\"]");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == "hello");
- }
- SECTION("CppCommentAfterOpeningBracket") {
- JsonArray& arr = jb.parseArray("[//COMMENT\n\"hello\"]");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == "hello");
- }
- SECTION("CppCommentBeforeClosingBracket") {
- JsonArray& arr = jb.parseArray("[\"hello\"//COMMENT\r\n]");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == "hello");
- }
- SECTION("CppCommentAfterClosingBracket") {
- JsonArray& arr = jb.parseArray("[\"hello\"]//COMMENT\n");
- REQUIRE(arr.success());
- REQUIRE(1 == arr.size());
- REQUIRE(arr[0] == "hello");
- }
- SECTION("CppCommentBeforeComma") {
- JsonArray& arr = jb.parseArray("[\"hello\"//COMMENT\n,\"world\"]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == "hello");
- REQUIRE(arr[1] == "world");
- }
- SECTION("CppCommentAfterComma") {
- JsonArray& arr = jb.parseArray("[\"hello\",//COMMENT\n\"world\"]");
- REQUIRE(arr.success());
- REQUIRE(2 == arr.size());
- REQUIRE(arr[0] == "hello");
- REQUIRE(arr[1] == "world");
- }
- SECTION("InvalidCppComment") {
- JsonArray& arr = jb.parseArray("[/COMMENT\n]");
- REQUIRE_FALSE(arr.success());
- }
- SECTION("InvalidComment") {
- JsonArray& arr = jb.parseArray("[/*/\n]");
- REQUIRE_FALSE(arr.success());
- }
- SECTION("UnfinishedCComment") {
- JsonArray& arr = jb.parseArray("[/*COMMENT]");
- REQUIRE_FALSE(arr.success());
- }
- SECTION("EndsInCppComment") {
- JsonArray& arr = jb.parseArray("[//COMMENT");
- REQUIRE_FALSE(arr.success());
- }
- SECTION("AfterClosingStar") {
- JsonArray& arr = jb.parseArray("[/*COMMENT*");
- REQUIRE_FALSE(arr.success());
- }
- SECTION("DeeplyNested") {
- JsonArray& arr =
- jb.parseArray("[[[[[[[[[[[[[[[[[[[\"Not too deep\"]]]]]]]]]]]]]]]]]]]");
- REQUIRE(arr.success());
- }
- }
|