Tests: use sections for filters tests

This commit is contained in:
Benoit Blanchon
2023-08-01 19:14:11 +02:00
parent 57454cf97b
commit 38941d5807

View File

@ -16,6 +16,7 @@ using ArduinoJson::detail::sizeofObject;
TEST_CASE("Filtering") { TEST_CASE("Filtering") {
struct TestCase { struct TestCase {
const char* description;
const char* input; const char* input;
const char* filter; const char* filter;
uint8_t nestingLimit; uint8_t nestingLimit;
@ -26,14 +27,16 @@ TEST_CASE("Filtering") {
TestCase testCases[] = { TestCase testCases[] = {
{ {
"{\"hello\":\"world\"}", // 1. input "Input is object, filter is null", // description
"null", // 2. filter "{\"hello\":\"world\"}", // input
10, // 3. nestingLimit "null", // filter
DeserializationError::Ok, // 4. error 10, // nestingLimit
"null", // 5. output DeserializationError::Ok, // error
0, // 6. memoryUsage "null", // output
0, // memoryUsage
}, },
{ {
"Input is object, filter is false",
"{\"hello\":\"world\"}", "{\"hello\":\"world\"}",
"false", "false",
10, 10,
@ -42,6 +45,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
"Input is object, filter is true",
"{\"abcdefg\":\"hijklmn\"}", "{\"abcdefg\":\"hijklmn\"}",
"true", "true",
10, 10,
@ -50,6 +54,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("abcdefg") + sizeofString("hijklmn"), sizeofObject(1) + sizeofString("abcdefg") + sizeofString("hijklmn"),
}, },
{ {
"Input is object, filter is empty object",
"{\"hello\":\"world\"}", "{\"hello\":\"world\"}",
"{}", "{}",
10, 10,
@ -58,7 +63,7 @@ TEST_CASE("Filtering") {
sizeofObject(0), sizeofObject(0),
}, },
{ {
// Input in an object, but filter wants an array "Input in an object, but filter wants an array",
"{\"hello\":\"world\"}", "{\"hello\":\"world\"}",
"[]", "[]",
10, 10,
@ -67,7 +72,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// Member is a string, but filter wants an array "Member is a string, but filter wants an array",
"{\"example\":\"example\"}", "{\"example\":\"example\"}",
"{\"example\":[true]}", "{\"example\":[true]}",
10, 10,
@ -76,7 +81,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// Member is a number, but filter wants an array "Member is a number, but filter wants an array",
"{\"example\":42}", "{\"example\":42}",
"{\"example\":[true]}", "{\"example\":[true]}",
10, 10,
@ -85,7 +90,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// Input is an array, but filter wants an object "Input is an array, but filter wants an object",
"[\"hello\",\"world\"]", "[\"hello\",\"world\"]",
"{}", "{}",
10, 10,
@ -94,7 +99,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// Input is a bool, but filter wants an object "Input is a bool, but filter wants an object",
"true", "true",
"{}", "{}",
10, 10,
@ -103,7 +108,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// Input is a string, but filter wants an object "Input is a string, but filter wants an object",
"\"hello\"", "\"hello\"",
"{}", "{}",
10, 10,
@ -112,7 +117,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// skip an integer "Skip an integer",
"{\"an_integer\":666,example:42}", "{\"an_integer\":666,example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -121,7 +126,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// skip a float "Skip a float",
"{\"a_float\":12.34e-6,example:42}", "{\"a_float\":12.34e-6,example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -130,7 +135,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// skip false "Skip false",
"{\"a_bool\":false,example:42}", "{\"a_bool\":false,example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -139,7 +144,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// skip true "Skip true",
"{\"a_bool\":true,example:42}", "{\"a_bool\":true,example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -148,7 +153,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// skip null "Skip null",
"{\"a_bool\":null,example:42}", "{\"a_bool\":null,example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -157,7 +162,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// can skip a double-quoted string "Skip a double-quoted string",
"{\"a_double_quoted_string\":\"hello\",example:42}", "{\"a_double_quoted_string\":\"hello\",example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -166,7 +171,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// can skip a single-quoted string "Skip a single-quoted string",
"{\"a_single_quoted_string\":'hello',example:42}", "{\"a_single_quoted_string\":'hello',example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -175,7 +180,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// can skip an empty array "Skip an empty array",
"{\"an_empty_array\":[],example:42}", "{\"an_empty_array\":[],example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -184,7 +189,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// can skip an empty array with spaces in it "Skip an empty array with spaces in it",
"{\"an_empty_array\":[\t],example:42}", "{\"an_empty_array\":[\t],example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -193,7 +198,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// can skip an array "Skip an array",
"{\"an_array\":[1,2,3],example:42}", "{\"an_array\":[1,2,3],example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -202,7 +207,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// can skip an array with spaces in it "Skip an array with spaces in it",
"{\"an_array\": [ 1 , 2 , 3 ] ,example:42}", "{\"an_array\": [ 1 , 2 , 3 ] ,example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -211,7 +216,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// can skip an empty object "Skip an empty nested object",
"{\"an_empty_object\":{},example:42}", "{\"an_empty_object\":{},example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -220,7 +225,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// can skip an empty object with spaces in it "Skip an empty nested object with spaces in it",
"{\"an_empty_object\":{ },example:42}", "{\"an_empty_object\":{ },example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -229,7 +234,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// can skip an object "Skip a nested object",
"{\"an_object\":{a:1,'b':2,\"c\":3},example:42}", "{\"an_object\":{a:1,'b':2,\"c\":3},example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -238,7 +243,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// skip an object with spaces in it "Skip an object with spaces in it",
"{\"an_object\" : { a : 1 , 'b' : 2 , \"c\" : 3 } ,example:42}", "{\"an_object\" : { a : 1 , 'b' : 2 , \"c\" : 3 } ,example:42}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -247,6 +252,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
"Skip a string in a nested object",
"{\"an_integer\": 0,\"example\":{\"type\":\"int\",\"outcome\":42}}", "{\"an_integer\": 0,\"example\":{\"type\":\"int\",\"outcome\":42}}",
"{\"example\":{\"outcome\":true}}", "{\"example\":{\"outcome\":true}}",
10, 10,
@ -255,7 +261,7 @@ TEST_CASE("Filtering") {
2 * sizeofObject(1) + 2 * sizeofString("example"), 2 * sizeofObject(1) + 2 * sizeofString("example"),
}, },
{ {
// wildcard "wildcard",
"{\"example\":{\"type\":\"int\",\"outcome\":42}}", "{\"example\":{\"type\":\"int\",\"outcome\":42}}",
"{\"*\":{\"outcome\":true}}", "{\"*\":{\"outcome\":true}}",
10, 10,
@ -264,7 +270,7 @@ TEST_CASE("Filtering") {
2 * sizeofObject(1) + 2 * sizeofString("example"), 2 * sizeofObject(1) + 2 * sizeofString("example"),
}, },
{ {
// exclusion filter (issue #1628) "exclusion filter (issue #1628)",
"{\"example\":1,\"ignored\":2}", "{\"example\":1,\"ignored\":2}",
"{\"*\":true,\"ignored\":false}", "{\"*\":true,\"ignored\":false}",
10, 10,
@ -273,7 +279,7 @@ TEST_CASE("Filtering") {
sizeofObject(1) + sizeofString("example"), sizeofObject(1) + sizeofString("example"),
}, },
{ {
// only the first element of array counts "only the first element of array counts",
"[1,2,3]", "[1,2,3]",
"[true, false]", "[true, false]",
10, 10,
@ -282,7 +288,7 @@ TEST_CASE("Filtering") {
sizeofArray(3), sizeofArray(3),
}, },
{ {
// only the first element of array counts "only the first element of array counts",
"[1,2,3]", "[1,2,3]",
"[false, true]", "[false, true]",
10, 10,
@ -291,7 +297,7 @@ TEST_CASE("Filtering") {
sizeofArray(0), sizeofArray(0),
}, },
{ {
// filter members of object in array "filter members of object in array",
"[{\"example\":1,\"ignore\":2},{\"example\":3,\"ignore\":4}]", "[{\"example\":1,\"ignore\":2},{\"example\":3,\"ignore\":4}]",
"[{\"example\":true}]", "[{\"example\":true}]",
10, 10,
@ -300,6 +306,7 @@ TEST_CASE("Filtering") {
sizeofArray(2) + 2 * sizeofObject(1) + sizeofString("example"), sizeofArray(2) + 2 * sizeofObject(1) + sizeofString("example"),
}, },
{ {
"Unclosed single quote in skipped element",
"[',2,3]", "[',2,3]",
"[false,true]", "[false,true]",
10, 10,
@ -308,6 +315,7 @@ TEST_CASE("Filtering") {
sizeofArray(0), sizeofArray(0),
}, },
{ {
"Unclosed double quote in skipped element",
"[\",2,3]", "[\",2,3]",
"[false,true]", "[false,true]",
10, 10,
@ -316,7 +324,7 @@ TEST_CASE("Filtering") {
sizeofArray(0), sizeofArray(0),
}, },
{ {
// detect errors in skipped value "Detect errors in skipped value",
"[!,2,\\]", "[!,2,\\]",
"[false]", "[false]",
10, 10,
@ -325,7 +333,7 @@ TEST_CASE("Filtering") {
sizeofArray(0), sizeofArray(0),
}, },
{ {
// detect incomplete string event if it's skipped "Detect incomplete string event if it's skipped",
"\"ABC", "\"ABC",
"false", "false",
10, 10,
@ -334,7 +342,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// detect incomplete string event if it's skipped "Detect incomplete string event if it's skipped",
"'ABC", "'ABC",
"false", "false",
10, 10,
@ -343,7 +351,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// handle escaped quotes "Handle escaped quotes",
"'A\\'BC'", "'A\\'BC'",
"false", "false",
10, 10,
@ -352,7 +360,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// handle escaped quotes "Handle escaped quotes",
"\"A\\\"BC\"", "\"A\\\"BC\"",
"false", "false",
10, 10,
@ -361,7 +369,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// detect incomplete string in presence of escaped quotes "Detect incomplete string in presence of escaped quotes",
"'A\\'BC", "'A\\'BC",
"false", "false",
10, 10,
@ -370,7 +378,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// detect incomplete string in presence of escaped quotes "Detect incomplete string in presence of escaped quotes",
"\"A\\\"BC", "\"A\\\"BC",
"false", "false",
10, 10,
@ -379,7 +387,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// skip empty array "skip empty array",
"[]", "[]",
"false", "false",
10, 10,
@ -388,7 +396,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// skip empty array with spaces "Skip empty array with spaces",
" [ ] ", " [ ] ",
"false", "false",
10, 10,
@ -397,7 +405,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// bubble up element error even if array is skipped "Bubble up element error even if array is skipped",
"[1,'2,3]", "[1,'2,3]",
"false", "false",
10, 10,
@ -406,7 +414,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// bubble up member error even if object is skipped "Bubble up member error even if object is skipped",
"{'hello':'worl}", "{'hello':'worl}",
"false", "false",
10, 10,
@ -415,7 +423,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// bubble up colon error even if object is skipped "Bubble up colon error even if object is skipped",
"{'hello','world'}", "{'hello','world'}",
"false", "false",
10, 10,
@ -424,7 +432,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// bubble up key error even if object is skipped "Bubble up key error even if object is skipped",
"{'hello:1}", "{'hello:1}",
"false", "false",
10, 10,
@ -433,7 +441,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// detect invalid value in skipped object "Detect invalid value in skipped object",
"{'hello':!}", "{'hello':!}",
"false", "false",
10, 10,
@ -442,7 +450,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// ignore invalid value in skipped object "Ignore invalid value in skipped object",
"{'hello':\\}", "{'hello':\\}",
"false", "false",
10, 10,
@ -451,7 +459,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// check nesting limit even for ignored objects "Check nesting limit even for ignored objects",
"{}", "{}",
"false", "false",
0, 0,
@ -460,7 +468,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// check nesting limit even for ignored objects "Check nesting limit even for ignored objects",
"{'hello':{}}", "{'hello':{}}",
"false", "false",
1, 1,
@ -469,7 +477,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// check nesting limit even for ignored values in objects "Check nesting limit even for ignored values in objects",
"{'hello':{}}", "{'hello':{}}",
"{}", "{}",
1, 1,
@ -478,7 +486,7 @@ TEST_CASE("Filtering") {
sizeofObject(0), sizeofObject(0),
}, },
{ {
// check nesting limit even for ignored arrays "Check nesting limit even for ignored arrays",
"[]", "[]",
"false", "false",
0, 0,
@ -487,7 +495,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// check nesting limit even for ignored arrays "Check nesting limit even for ignored arrays",
"[[]]", "[[]]",
"false", "false",
1, 1,
@ -496,7 +504,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// check nesting limit even for ignored values in arrays "Check nesting limit even for ignored values in arrays",
"[[]]", "[[]]",
"[]", "[]",
1, 1,
@ -505,7 +513,7 @@ TEST_CASE("Filtering") {
sizeofArray(0), sizeofArray(0),
}, },
{ {
// supports back-slash at the end of skipped string "Supports back-slash at the end of skipped string",
"\"hell\\", "\"hell\\",
"false", "false",
1, 1,
@ -514,7 +522,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// invalid comment at after an element in a skipped array "Invalid comment at after an element in a skipped array",
"[1/]", "[1/]",
"false", "false",
10, 10,
@ -523,7 +531,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// incomplete comment at after an element in a skipped array "Incomplete comment at after an element in a skipped array",
"[1/*]", "[1/*]",
"false", "false",
10, 10,
@ -532,7 +540,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// missing comma in a skipped array "Missing comma in a skipped array",
"[1 2]", "[1 2]",
"false", "false",
10, 10,
@ -541,7 +549,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// invalid comment at the beginning of array "Invalid comment at the beginning of array",
"[/1]", "[/1]",
"[false]", "[false]",
10, 10,
@ -550,7 +558,7 @@ TEST_CASE("Filtering") {
sizeofArray(0), sizeofArray(0),
}, },
{ {
// incomplete comment at the begining of an array "Incomplete comment at the begining of an array",
"[/*]", "[/*]",
"[false]", "[false]",
10, 10,
@ -559,7 +567,7 @@ TEST_CASE("Filtering") {
sizeofArray(0), sizeofArray(0),
}, },
{ {
// invalid comment before key "Invalid comment before key",
"{/1:2}", "{/1:2}",
"{}", "{}",
10, 10,
@ -568,7 +576,7 @@ TEST_CASE("Filtering") {
sizeofObject(0), sizeofObject(0),
}, },
{ {
// incomplete comment before key "Incomplete comment before key",
"{/*:2}", "{/*:2}",
"{}", "{}",
10, 10,
@ -577,7 +585,7 @@ TEST_CASE("Filtering") {
sizeofObject(0), sizeofObject(0),
}, },
{ {
// invalid comment after key "Invalid comment after key",
"{\"example\"/1:2}", "{\"example\"/1:2}",
"{}", "{}",
10, 10,
@ -586,7 +594,7 @@ TEST_CASE("Filtering") {
sizeofObject(0), sizeofObject(0),
}, },
{ {
// incomplete comment after key "Incomplete comment after key",
"{\"example\"/*:2}", "{\"example\"/*:2}",
"{}", "{}",
10, 10,
@ -595,7 +603,7 @@ TEST_CASE("Filtering") {
sizeofObject(0), sizeofObject(0),
}, },
{ {
// invalid comment after colon "Invalid comment after colon",
"{\"example\":/12}", "{\"example\":/12}",
"{}", "{}",
10, 10,
@ -604,7 +612,7 @@ TEST_CASE("Filtering") {
sizeofObject(0), sizeofObject(0),
}, },
{ {
// incomplete comment after colon "Incomplete comment after colon",
"{\"example\":/*2}", "{\"example\":/*2}",
"{}", "{}",
10, 10,
@ -613,7 +621,7 @@ TEST_CASE("Filtering") {
sizeofObject(0), sizeofObject(0),
}, },
{ {
// comment next to an integer "Comment next to an integer",
"{\"ignore\":1//,\"example\":2\n}", "{\"ignore\":1//,\"example\":2\n}",
"{\"example\":true}", "{\"example\":true}",
10, 10,
@ -622,7 +630,7 @@ TEST_CASE("Filtering") {
sizeofObject(0), sizeofObject(0),
}, },
{ {
// invalid comment after opening brace of a skipped object "Invalid comment after opening brace of a skipped object",
"{/1:2}", "{/1:2}",
"false", "false",
10, 10,
@ -631,7 +639,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// incomplete after opening brace of a skipped object "Incomplete after opening brace of a skipped object",
"{/*:2}", "{/*:2}",
"false", "false",
10, 10,
@ -640,7 +648,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// invalid comment after key of a skipped object "Invalid comment after key of a skipped object",
"{\"example\"/:2}", "{\"example\"/:2}",
"false", "false",
10, 10,
@ -649,7 +657,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// incomplete comment after key of a skipped object "Incomplete comment after key of a skipped object",
"{\"example\"/*:2}", "{\"example\"/*:2}",
"false", "false",
10, 10,
@ -658,7 +666,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// invalid comment after value in a skipped object "Invalid comment after value in a skipped object",
"{\"example\":2/}", "{\"example\":2/}",
"false", "false",
10, 10,
@ -667,7 +675,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// incomplete comment after value of a skipped object "Incomplete comment after value of a skipped object",
"{\"example\":2/*}", "{\"example\":2/*}",
"false", "false",
10, 10,
@ -676,7 +684,7 @@ TEST_CASE("Filtering") {
0, 0,
}, },
{ {
// incomplete comment after comma in skipped object "Incomplete comment after comma in skipped object",
"{\"example\":2,/*}", "{\"example\":2,/*}",
"false", "false",
10, 10,
@ -686,27 +694,24 @@ TEST_CASE("Filtering") {
}, },
}; };
for (size_t i = 0; i < sizeof(testCases) / sizeof(testCases[0]); i++) { for (auto& tc : testCases) {
CAPTURE(i); SECTION(tc.description) {
SpyingAllocator spy;
JsonDocument filter;
JsonDocument doc(&spy);
SpyingAllocator spy; REQUIRE(deserializeJson(filter, tc.filter) == DeserializationError::Ok);
JsonDocument filter;
JsonDocument doc(&spy);
TestCase& tc = testCases[i];
CAPTURE(tc.filter); CHECK(deserializeJson(
REQUIRE(deserializeJson(filter, tc.filter) == DeserializationError::Ok); doc, tc.input, DeserializationOption::Filter(filter),
DeserializationOption::NestingLimit(tc.nestingLimit)) ==
tc.error);
CAPTURE(tc.input); CHECK(doc.as<std::string>() == tc.output);
CAPTURE(tc.nestingLimit);
CHECK(deserializeJson(doc, tc.input, DeserializationOption::Filter(filter),
DeserializationOption::NestingLimit(
tc.nestingLimit)) == tc.error);
CHECK(doc.as<std::string>() == tc.output); doc.shrinkToFit();
CHECK(spy.allocatedBytes() == tc.memoryUsage);
doc.shrinkToFit(); }
CHECK(spy.allocatedBytes() == tc.memoryUsage);
} }
} }