mirror of
https://github.com/bblanchon/ArduinoJson.git
synced 2025-07-16 12:02:14 +02:00
Added ARDUINOJSON_ENABLE_COMMENTS to enable support for comments
This commit is contained in:
13
CHANGELOG.md
13
CHANGELOG.md
@ -6,11 +6,24 @@ HEAD
|
|||||||
|
|
||||||
* Added `BasicJsonDocument::shrinkToFit()`
|
* Added `BasicJsonDocument::shrinkToFit()`
|
||||||
* Added support of `uint8_t` for `serializeJson()`, `serializeJsonPretty()`, and `serializeMsgPack()` (issue #1142)
|
* Added support of `uint8_t` for `serializeJson()`, `serializeJsonPretty()`, and `serializeMsgPack()` (issue #1142)
|
||||||
|
* Added `ARDUINOJSON_ENABLE_COMMENTS` to enable support for comments (defaults to 0)
|
||||||
* Auto enable support for `std::string` and `std::stream` on modern compilers (issue #1156)
|
* Auto enable support for `std::string` and `std::stream` on modern compilers (issue #1156)
|
||||||
(No need to define `ARDUINOJSON_ENABLE_STD_STRING` and `ARDUINOJSON_ENABLE_STD_STREAM` anymore)
|
(No need to define `ARDUINOJSON_ENABLE_STD_STRING` and `ARDUINOJSON_ENABLE_STD_STREAM` anymore)
|
||||||
* Improved decoding of UTF-16 surrogate pairs (PR #1157 by @kaysievers)
|
* Improved decoding of UTF-16 surrogate pairs (PR #1157 by @kaysievers)
|
||||||
(ArduinoJson now produces standard UTF-8 instead of CESU-8)
|
(ArduinoJson now produces standard UTF-8 instead of CESU-8)
|
||||||
|
|
||||||
|
> ### BREAKING CHANGES
|
||||||
|
>
|
||||||
|
> #### Comments
|
||||||
|
>
|
||||||
|
> Support for comments in input is now optional and disabled by default.
|
||||||
|
>
|
||||||
|
> If you need support for comments, you must defined `ARDUINOJSON_ENABLE_COMMENTS` to `1`; otherwise, you'll receive `InvalidInput` errors.
|
||||||
|
>
|
||||||
|
> ```c++
|
||||||
|
> #define ARDUINOJSON_ENABLE_COMMENTS 1
|
||||||
|
> #include <ArduinoJson.h>
|
||||||
|
> ```
|
||||||
|
|
||||||
v6.13.0 (2019-11-01)
|
v6.13.0 (2019-11-01)
|
||||||
-------
|
-------
|
||||||
|
@ -170,155 +170,6 @@ TEST_CASE("deserialize JSON array") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Block comments") {
|
|
||||||
SECTION("Before opening bracket") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "/*COMMENT*/ [\"hello\"]");
|
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(1 == arr.size());
|
|
||||||
REQUIRE(arr[0] == "hello");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After opening bracket") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "[/*COMMENT*/ \"hello\"]");
|
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(1 == arr.size());
|
|
||||||
REQUIRE(arr[0] == "hello");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before closing bracket") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "[\"hello\"/*COMMENT*/]");
|
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(1 == arr.size());
|
|
||||||
REQUIRE(arr[0] == "hello");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After closing bracket") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "[\"hello\"]/*COMMENT*/");
|
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(1 == arr.size());
|
|
||||||
REQUIRE(arr[0] == "hello");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before comma") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "[\"hello\"/*COMMENT*/,\"world\"]");
|
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(2 == arr.size());
|
|
||||||
REQUIRE(arr[0] == "hello");
|
|
||||||
REQUIRE(arr[1] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After comma") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "[\"hello\",/*COMMENT*/ \"world\"]");
|
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(2 == arr.size());
|
|
||||||
REQUIRE(arr[0] == "hello");
|
|
||||||
REQUIRE(arr[1] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("/*/") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "[/*/\n]");
|
|
||||||
REQUIRE(err == DeserializationError::IncompleteInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Unfinished comment") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "[/*COMMENT]");
|
|
||||||
REQUIRE(err == DeserializationError::IncompleteInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Final slash missing") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "[/*COMMENT*]");
|
|
||||||
REQUIRE(err == DeserializationError::IncompleteInput);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Trailing comments") {
|
|
||||||
SECTION("Before opening bracket") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "//COMMENT\n\t[\"hello\"]");
|
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(1 == arr.size());
|
|
||||||
REQUIRE(arr[0] == "hello");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After opening bracket") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "[//COMMENT\n\"hello\"]");
|
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(1 == arr.size());
|
|
||||||
REQUIRE(arr[0] == "hello");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before closing bracket") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "[\"hello\"//COMMENT\r\n]");
|
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(1 == arr.size());
|
|
||||||
REQUIRE(arr[0] == "hello");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After closing bracket") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "[\"hello\"]//COMMENT\n");
|
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(1 == arr.size());
|
|
||||||
REQUIRE(arr[0] == "hello");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before comma") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "[\"hello\"//COMMENT\n,\"world\"]");
|
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(2 == arr.size());
|
|
||||||
REQUIRE(arr[0] == "hello");
|
|
||||||
REQUIRE(arr[1] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After comma") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "[\"hello\",//COMMENT\n\"world\"]");
|
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(2 == arr.size());
|
|
||||||
REQUIRE(arr[0] == "hello");
|
|
||||||
REQUIRE(arr[1] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Invalid comment") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "[/COMMENT\n]");
|
|
||||||
REQUIRE(err == DeserializationError::InvalidInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("End document with comment") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "[//COMMENT");
|
|
||||||
REQUIRE(err == DeserializationError::IncompleteInput);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Premature null-terminator") {
|
SECTION("Premature null-terminator") {
|
||||||
SECTION("After opening bracket") {
|
SECTION("After opening bracket") {
|
||||||
DeserializationError err = deserializeJson(doc, "[");
|
DeserializationError err = deserializeJson(doc, "[");
|
||||||
|
@ -41,7 +41,7 @@ TEST_CASE("deserializeJson(std::istream&)") {
|
|||||||
DynamicJsonDocument doc(4096);
|
DynamicJsonDocument doc(4096);
|
||||||
|
|
||||||
SECTION("array") {
|
SECTION("array") {
|
||||||
std::istringstream json(" [ 42 /* comment */ ] ");
|
std::istringstream json(" [ 42 ] ");
|
||||||
|
|
||||||
DeserializationError err = deserializeJson(doc, json);
|
DeserializationError err = deserializeJson(doc, json);
|
||||||
JsonArray arr = doc.as<JsonArray>();
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
@ -52,7 +52,7 @@ TEST_CASE("deserializeJson(std::istream&)") {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SECTION("object") {
|
SECTION("object") {
|
||||||
std::istringstream json(" { hello : 'world' // comment\n }");
|
std::istringstream json(" { hello : 'world' }");
|
||||||
|
|
||||||
DeserializationError err = deserializeJson(doc, json);
|
DeserializationError err = deserializeJson(doc, json);
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
@ -61,26 +61,6 @@ TEST_CASE("deserializeJson(DynamicJsonDocument&)") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Comments") {
|
|
||||||
SECTION("Just a trailing comment") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "// comment");
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::IncompleteInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Just a block comment") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "/*comment*/");
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::IncompleteInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Just a slash") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "/");
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::InvalidInput);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Premature null-terminator") {
|
SECTION("Premature null-terminator") {
|
||||||
SECTION("In escape sequence") {
|
SECTION("In escape sequence") {
|
||||||
DeserializationError err = deserializeJson(doc, "\"\\");
|
DeserializationError err = deserializeJson(doc, "\"\\");
|
||||||
@ -88,12 +68,6 @@ TEST_CASE("deserializeJson(DynamicJsonDocument&)") {
|
|||||||
REQUIRE(err == DeserializationError::IncompleteInput);
|
REQUIRE(err == DeserializationError::IncompleteInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("In block comment") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "/* comment");
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::IncompleteInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("In double quoted string") {
|
SECTION("In double quoted string") {
|
||||||
DeserializationError err = deserializeJson(doc, "\"hello");
|
DeserializationError err = deserializeJson(doc, "\"hello");
|
||||||
|
|
||||||
@ -114,12 +88,6 @@ TEST_CASE("deserializeJson(DynamicJsonDocument&)") {
|
|||||||
REQUIRE(err == DeserializationError::IncompleteInput);
|
REQUIRE(err == DeserializationError::IncompleteInput);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("In block comment") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "/* comment */", 10);
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::IncompleteInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("In double quoted string") {
|
SECTION("In double quoted string") {
|
||||||
DeserializationError err = deserializeJson(doc, "\"hello\"", 6);
|
DeserializationError err = deserializeJson(doc, "\"hello\"", 6);
|
||||||
|
|
||||||
|
@ -281,212 +281,6 @@ TEST_CASE("deserialize JSON object") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("Block comments") {
|
|
||||||
SECTION("Before opening brace") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "/*COMMENT*/ {\"hello\":\"world\"}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After opening brace") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "{/*COMMENT*/\"hello\":\"world\"}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before colon") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "{\"hello\"/*COMMENT*/:\"world\"}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After colon") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "{\"hello\":/*COMMENT*/\"world\"}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before closing brace") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "{\"hello\":\"world\"/*COMMENT*/}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After closing brace") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "{\"hello\":\"world\"}/*COMMENT*/");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before comma") {
|
|
||||||
DeserializationError err = deserializeJson(
|
|
||||||
doc, "{\"hello\":\"world\"/*COMMENT*/,\"answer\":42}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
REQUIRE(obj["answer"] == 42);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After comma") {
|
|
||||||
DeserializationError err = deserializeJson(
|
|
||||||
doc, "{\"hello\":\"world\",/*COMMENT*/\"answer\":42}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
REQUIRE(obj["answer"] == 42);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Trailing comments") {
|
|
||||||
SECTION("Before opening brace") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "//COMMENT\n {\"hello\":\"world\"}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After opening brace") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "{//COMMENT\n\"hello\":\"world\"}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before colon") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "{\"hello\"//COMMENT\n:\"world\"}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After colon") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "{\"hello\"://COMMENT\n\"world\"}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before closing brace") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "{\"hello\":\"world\"//COMMENT\n}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After closing brace") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "{\"hello\":\"world\"}//COMMENT\n");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before comma") {
|
|
||||||
DeserializationError err = deserializeJson(
|
|
||||||
doc, "{\"hello\":\"world\"//COMMENT\n,\"answer\":42}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
REQUIRE(obj["answer"] == 42);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After comma") {
|
|
||||||
DeserializationError err = deserializeJson(
|
|
||||||
doc, "{\"hello\":\"world\",//COMMENT\n\"answer\":42}");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
REQUIRE(obj["answer"] == 42);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Dangling slash") {
|
|
||||||
SECTION("Before opening brace") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "/{\"hello\":\"world\"}");
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::InvalidInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After opening brace") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "{/\"hello\":\"world\"}");
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::InvalidInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before colon") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "{\"hello\"/:\"world\"}");
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::InvalidInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After colon") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "{\"hello\":/\"world\"}");
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::InvalidInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before closing brace") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "{\"hello\":\"world\"/}");
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::InvalidInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After closing brace") {
|
|
||||||
DeserializationError err = deserializeJson(doc, "{\"hello\":\"world\"}/");
|
|
||||||
JsonObject obj = doc.as<JsonObject>();
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::Ok);
|
|
||||||
REQUIRE(obj["hello"] == "world");
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Before comma") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "{\"hello\":\"world\"/,\"answer\":42}");
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::InvalidInput);
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("After comma") {
|
|
||||||
DeserializationError err =
|
|
||||||
deserializeJson(doc, "{\"hello\":\"world\",/\"answer\":42}");
|
|
||||||
|
|
||||||
REQUIRE(err == DeserializationError::InvalidInput);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTION("Should clear the JsonObject") {
|
SECTION("Should clear the JsonObject") {
|
||||||
deserializeJson(doc, "{\"hello\":\"world\"}");
|
deserializeJson(doc, "{\"hello\":\"world\"}");
|
||||||
deserializeJson(doc, "{}");
|
deserializeJson(doc, "{}");
|
||||||
|
@ -18,6 +18,8 @@ add_executable(MixedConfigurationTests
|
|||||||
use_long_long_0.cpp
|
use_long_long_0.cpp
|
||||||
use_long_long_1.cpp
|
use_long_long_1.cpp
|
||||||
enable_progmem_1.cpp
|
enable_progmem_1.cpp
|
||||||
|
enable_comments_1.cpp
|
||||||
|
enable_comments_0.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(MixedConfigurationTests catch)
|
target_link_libraries(MixedConfigurationTests catch)
|
||||||
|
54
extras/tests/MixedConfiguration/enable_comments_0.cpp
Normal file
54
extras/tests/MixedConfiguration/enable_comments_0.cpp
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
// ArduinoJson - arduinojson.org
|
||||||
|
// Copyright Benoit Blanchon 2014-2020
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
#define ARDUINOJSON_ENABLE_COMMENTS 0
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
|
#include <catch.hpp>
|
||||||
|
|
||||||
|
TEST_CASE("Comments should produce InvalidInput") {
|
||||||
|
DynamicJsonDocument doc(2048);
|
||||||
|
|
||||||
|
const char* testCases[] = {
|
||||||
|
"/*COMMENT*/ [\"hello\"]",
|
||||||
|
"[/*COMMENT*/ \"hello\"]",
|
||||||
|
"[\"hello\"/*COMMENT*/]",
|
||||||
|
"[\"hello\"/*COMMENT*/,\"world\"]",
|
||||||
|
"[\"hello\",/*COMMENT*/ \"world\"]",
|
||||||
|
"[/*/\n]",
|
||||||
|
"[/*COMMENT]",
|
||||||
|
"[/*COMMENT*]",
|
||||||
|
"//COMMENT\n\t[\"hello\"]",
|
||||||
|
"[//COMMENT\n\"hello\"]",
|
||||||
|
"[\"hello\"//COMMENT\r\n]",
|
||||||
|
"[\"hello\"//COMMENT\n,\"world\"]",
|
||||||
|
"[\"hello\",//COMMENT\n\"world\"]",
|
||||||
|
"[/COMMENT\n]",
|
||||||
|
"[//COMMENT",
|
||||||
|
"/*COMMENT*/ {\"hello\":\"world\"}",
|
||||||
|
"{/*COMMENT*/\"hello\":\"world\"}",
|
||||||
|
"{\"hello\"/*COMMENT*/:\"world\"}",
|
||||||
|
"{\"hello\":/*COMMENT*/\"world\"}",
|
||||||
|
"{\"hello\":\"world\"/*COMMENT*/}",
|
||||||
|
"//COMMENT\n {\"hello\":\"world\"}",
|
||||||
|
"{//COMMENT\n\"hello\":\"world\"}",
|
||||||
|
"{\"hello\"//COMMENT\n:\"world\"}",
|
||||||
|
"{\"hello\"://COMMENT\n\"world\"}",
|
||||||
|
"{\"hello\":\"world\"//COMMENT\n}",
|
||||||
|
"/{\"hello\":\"world\"}",
|
||||||
|
"{/\"hello\":\"world\"}",
|
||||||
|
"{\"hello\"/:\"world\"}",
|
||||||
|
"{\"hello\":/\"world\"}",
|
||||||
|
"{\"hello\":\"world\"/}",
|
||||||
|
"{\"hello\":\"world\"/,\"answer\":42}",
|
||||||
|
"{\"hello\":\"world\",/\"answer\":42}",
|
||||||
|
};
|
||||||
|
const size_t testCount = sizeof(testCases) / sizeof(testCases[0]);
|
||||||
|
|
||||||
|
for (size_t i = 0; i < testCount; i++) {
|
||||||
|
const char* input = testCases[i];
|
||||||
|
CAPTURE(input);
|
||||||
|
REQUIRE(deserializeJson(doc, input) == DeserializationError::InvalidInput);
|
||||||
|
}
|
||||||
|
}
|
405
extras/tests/MixedConfiguration/enable_comments_1.cpp
Normal file
405
extras/tests/MixedConfiguration/enable_comments_1.cpp
Normal file
@ -0,0 +1,405 @@
|
|||||||
|
// ArduinoJson - arduinojson.org
|
||||||
|
// Copyright Benoit Blanchon 2014-2020
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
#define ARDUINOJSON_ENABLE_COMMENTS 1
|
||||||
|
#include <ArduinoJson.h>
|
||||||
|
|
||||||
|
#include <catch.hpp>
|
||||||
|
|
||||||
|
TEST_CASE("Comments in arrays") {
|
||||||
|
DynamicJsonDocument doc(2048);
|
||||||
|
|
||||||
|
SECTION("Block comments") {
|
||||||
|
SECTION("Before opening bracket") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "/*COMMENT*/ [\"hello\"]");
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(1 == arr.size());
|
||||||
|
REQUIRE(arr[0] == "hello");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After opening bracket") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "[/*COMMENT*/ \"hello\"]");
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(1 == arr.size());
|
||||||
|
REQUIRE(arr[0] == "hello");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before closing bracket") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "[\"hello\"/*COMMENT*/]");
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(1 == arr.size());
|
||||||
|
REQUIRE(arr[0] == "hello");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After closing bracket") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "[\"hello\"]/*COMMENT*/");
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(1 == arr.size());
|
||||||
|
REQUIRE(arr[0] == "hello");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before comma") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "[\"hello\"/*COMMENT*/,\"world\"]");
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(2 == arr.size());
|
||||||
|
REQUIRE(arr[0] == "hello");
|
||||||
|
REQUIRE(arr[1] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After comma") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "[\"hello\",/*COMMENT*/ \"world\"]");
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(2 == arr.size());
|
||||||
|
REQUIRE(arr[0] == "hello");
|
||||||
|
REQUIRE(arr[1] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("/*/") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "[/*/\n]");
|
||||||
|
REQUIRE(err == DeserializationError::IncompleteInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Unfinished comment") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "[/*COMMENT]");
|
||||||
|
REQUIRE(err == DeserializationError::IncompleteInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Final slash missing") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "[/*COMMENT*]");
|
||||||
|
REQUIRE(err == DeserializationError::IncompleteInput);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Trailing comments") {
|
||||||
|
SECTION("Before opening bracket") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "//COMMENT\n\t[\"hello\"]");
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(1 == arr.size());
|
||||||
|
REQUIRE(arr[0] == "hello");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After opening bracket") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "[//COMMENT\n\"hello\"]");
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(1 == arr.size());
|
||||||
|
REQUIRE(arr[0] == "hello");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before closing bracket") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "[\"hello\"//COMMENT\r\n]");
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(1 == arr.size());
|
||||||
|
REQUIRE(arr[0] == "hello");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After closing bracket") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "[\"hello\"]//COMMENT\n");
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(1 == arr.size());
|
||||||
|
REQUIRE(arr[0] == "hello");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before comma") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "[\"hello\"//COMMENT\n,\"world\"]");
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(2 == arr.size());
|
||||||
|
REQUIRE(arr[0] == "hello");
|
||||||
|
REQUIRE(arr[1] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After comma") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "[\"hello\",//COMMENT\n\"world\"]");
|
||||||
|
JsonArray arr = doc.as<JsonArray>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(2 == arr.size());
|
||||||
|
REQUIRE(arr[0] == "hello");
|
||||||
|
REQUIRE(arr[1] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Invalid comment") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "[/COMMENT\n]");
|
||||||
|
REQUIRE(err == DeserializationError::InvalidInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("End document with comment") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "[//COMMENT");
|
||||||
|
REQUIRE(err == DeserializationError::IncompleteInput);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Comments in objects") {
|
||||||
|
DynamicJsonDocument doc(2048);
|
||||||
|
|
||||||
|
SECTION("Block comments") {
|
||||||
|
SECTION("Before opening brace") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "/*COMMENT*/ {\"hello\":\"world\"}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After opening brace") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "{/*COMMENT*/\"hello\":\"world\"}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before colon") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "{\"hello\"/*COMMENT*/:\"world\"}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After colon") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "{\"hello\":/*COMMENT*/\"world\"}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before closing brace") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "{\"hello\":\"world\"/*COMMENT*/}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After closing brace") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "{\"hello\":\"world\"}/*COMMENT*/");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before comma") {
|
||||||
|
DeserializationError err = deserializeJson(
|
||||||
|
doc, "{\"hello\":\"world\"/*COMMENT*/,\"answer\":42}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
REQUIRE(obj["answer"] == 42);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After comma") {
|
||||||
|
DeserializationError err = deserializeJson(
|
||||||
|
doc, "{\"hello\":\"world\",/*COMMENT*/\"answer\":42}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
REQUIRE(obj["answer"] == 42);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Trailing comments") {
|
||||||
|
SECTION("Before opening brace") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "//COMMENT\n {\"hello\":\"world\"}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After opening brace") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "{//COMMENT\n\"hello\":\"world\"}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before colon") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "{\"hello\"//COMMENT\n:\"world\"}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After colon") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "{\"hello\"://COMMENT\n\"world\"}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before closing brace") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "{\"hello\":\"world\"//COMMENT\n}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After closing brace") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "{\"hello\":\"world\"}//COMMENT\n");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before comma") {
|
||||||
|
DeserializationError err = deserializeJson(
|
||||||
|
doc, "{\"hello\":\"world\"//COMMENT\n,\"answer\":42}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
REQUIRE(obj["answer"] == 42);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After comma") {
|
||||||
|
DeserializationError err = deserializeJson(
|
||||||
|
doc, "{\"hello\":\"world\",//COMMENT\n\"answer\":42}");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
REQUIRE(obj["answer"] == 42);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Dangling slash") {
|
||||||
|
SECTION("Before opening brace") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "/{\"hello\":\"world\"}");
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::InvalidInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After opening brace") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "{/\"hello\":\"world\"}");
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::InvalidInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before colon") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "{\"hello\"/:\"world\"}");
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::InvalidInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After colon") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "{\"hello\":/\"world\"}");
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::InvalidInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before closing brace") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "{\"hello\":\"world\"/}");
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::InvalidInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After closing brace") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "{\"hello\":\"world\"}/");
|
||||||
|
JsonObject obj = doc.as<JsonObject>();
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::Ok);
|
||||||
|
REQUIRE(obj["hello"] == "world");
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Before comma") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "{\"hello\":\"world\"/,\"answer\":42}");
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::InvalidInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("After comma") {
|
||||||
|
DeserializationError err =
|
||||||
|
deserializeJson(doc, "{\"hello\":\"world\",/\"answer\":42}");
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::InvalidInput);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_CASE("Comments alone") {
|
||||||
|
DynamicJsonDocument doc(2048);
|
||||||
|
|
||||||
|
SECTION("Just a trailing comment") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "// comment");
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::IncompleteInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Just a block comment") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "/*comment*/");
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::IncompleteInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Just a slash") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "/");
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::InvalidInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Premature terminator") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "/* comment");
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::IncompleteInput);
|
||||||
|
}
|
||||||
|
|
||||||
|
SECTION("Premature end on sized input") {
|
||||||
|
DeserializationError err = deserializeJson(doc, "/* comment */", 10);
|
||||||
|
|
||||||
|
REQUIRE(err == DeserializationError::IncompleteInput);
|
||||||
|
}
|
||||||
|
}
|
@ -165,6 +165,11 @@
|
|||||||
#define ARDUINOJSON_DECODE_UNICODE 0
|
#define ARDUINOJSON_DECODE_UNICODE 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Ignore comments in input
|
||||||
|
#ifndef ARDUINOJSON_ENABLE_COMMENTS
|
||||||
|
#define ARDUINOJSON_ENABLE_COMMENTS 0
|
||||||
|
#endif
|
||||||
|
|
||||||
// Support NaN in JSON
|
// Support NaN in JSON
|
||||||
#ifndef ARDUINOJSON_ENABLE_NAN
|
#ifndef ARDUINOJSON_ENABLE_NAN
|
||||||
#define ARDUINOJSON_ENABLE_NAN 0
|
#define ARDUINOJSON_ENABLE_NAN 0
|
||||||
|
@ -357,6 +357,7 @@ class JsonDeserializer {
|
|||||||
move();
|
move();
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
#if ARDUINOJSON_ENABLE_COMMENTS
|
||||||
// comments
|
// comments
|
||||||
case '/':
|
case '/':
|
||||||
move(); // skip '/'
|
move(); // skip '/'
|
||||||
@ -394,6 +395,7 @@ class JsonDeserializer {
|
|||||||
return DeserializationError::InvalidInput;
|
return DeserializationError::InvalidInput;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return DeserializationError::Ok;
|
return DeserializationError::Ok;
|
||||||
|
@ -14,13 +14,14 @@
|
|||||||
#define ARDUINOJSON_CONCAT8(A, B, C, D, E, F, G, H) \
|
#define ARDUINOJSON_CONCAT8(A, B, C, D, E, F, G, H) \
|
||||||
ARDUINOJSON_CONCAT2(ARDUINOJSON_CONCAT4(A, B, C, D), \
|
ARDUINOJSON_CONCAT2(ARDUINOJSON_CONCAT4(A, B, C, D), \
|
||||||
ARDUINOJSON_CONCAT4(E, F, G, H))
|
ARDUINOJSON_CONCAT4(E, F, G, H))
|
||||||
#define ARDUINOJSON_CONCAT11(A, B, C, D, E, F, G, H, I, J, K) \
|
#define ARDUINOJSON_CONCAT12(A, B, C, D, E, F, G, H, I, J, K, L) \
|
||||||
ARDUINOJSON_CONCAT8(A, B, C, D, E, F, G, ARDUINOJSON_CONCAT4(H, I, J, K))
|
ARDUINOJSON_CONCAT8(A, B, C, D, E, F, G, \
|
||||||
|
ARDUINOJSON_CONCAT4(H, I, J, ARDUINOJSON_CONCAT2(K, L)))
|
||||||
|
|
||||||
#define ARDUINOJSON_NAMESPACE \
|
#define ARDUINOJSON_NAMESPACE \
|
||||||
ARDUINOJSON_CONCAT11( \
|
ARDUINOJSON_CONCAT12( \
|
||||||
ArduinoJson, ARDUINOJSON_VERSION_MAJOR, ARDUINOJSON_VERSION_MINOR, \
|
ArduinoJson, ARDUINOJSON_VERSION_MAJOR, ARDUINOJSON_VERSION_MINOR, \
|
||||||
ARDUINOJSON_VERSION_REVISION, _, ARDUINOJSON_USE_LONG_LONG, \
|
ARDUINOJSON_VERSION_REVISION, _, ARDUINOJSON_USE_LONG_LONG, \
|
||||||
ARDUINOJSON_USE_DOUBLE, ARDUINOJSON_DECODE_UNICODE, \
|
ARDUINOJSON_USE_DOUBLE, ARDUINOJSON_DECODE_UNICODE, \
|
||||||
ARDUINOJSON_ENABLE_NAN, ARDUINOJSON_ENABLE_INFINITY, \
|
ARDUINOJSON_ENABLE_NAN, ARDUINOJSON_ENABLE_INFINITY, \
|
||||||
ARDUINOJSON_ENABLE_PROGMEM)
|
ARDUINOJSON_ENABLE_PROGMEM, ARDUINOJSON_ENABLE_COMMENTS)
|
||||||
|
Reference in New Issue
Block a user