more systematic test cases
This commit is contained in:
parent
40a0773e43
commit
334b7f24ea
1 changed files with 39 additions and 20 deletions
|
@ -5218,27 +5218,46 @@ TEST_CASE("parser class")
|
||||||
|
|
||||||
// unexpected end of string
|
// unexpected end of string
|
||||||
CHECK_THROWS_AS(json::parser("\"").parse(), std::invalid_argument);
|
CHECK_THROWS_AS(json::parser("\"").parse(), std::invalid_argument);
|
||||||
CHECK_THROWS_AS(json::parser("\\").parse(), std::invalid_argument);
|
CHECK_THROWS_AS(json::parser("\"\\\"").parse(), std::invalid_argument);
|
||||||
CHECK_THROWS_AS(json::parser("\\u").parse(), std::invalid_argument);
|
CHECK_THROWS_AS(json::parser("\"\\u\"").parse(), std::invalid_argument);
|
||||||
CHECK_THROWS_AS(json::parser("\\u0").parse(), std::invalid_argument);
|
CHECK_THROWS_AS(json::parser("\"\\u0\"").parse(), std::invalid_argument);
|
||||||
CHECK_THROWS_AS(json::parser("\\u01").parse(), std::invalid_argument);
|
CHECK_THROWS_AS(json::parser("\"\\u01\"").parse(), std::invalid_argument);
|
||||||
CHECK_THROWS_AS(json::parser("\\u012").parse(), std::invalid_argument);
|
CHECK_THROWS_AS(json::parser("\"\\u012\"").parse(), std::invalid_argument);
|
||||||
|
|
||||||
// invalid escapes
|
// invalid escapes
|
||||||
CHECK_THROWS_AS(json::parser("\\!").parse(), std::invalid_argument);
|
for (int c = 1; c < 128; ++c)
|
||||||
CHECK_THROWS_AS(json::parser("\\#").parse(), std::invalid_argument);
|
{
|
||||||
CHECK_THROWS_AS(json::parser("\\[").parse(), std::invalid_argument);
|
auto s = std::string("\"\\") + std::string(1, c) + "\"";
|
||||||
CHECK_THROWS_AS(json::parser("\\]").parse(), std::invalid_argument);
|
|
||||||
CHECK_THROWS_AS(json::parser("\\.").parse(), std::invalid_argument);
|
switch (c)
|
||||||
CHECK_THROWS_AS(json::parser("\\0").parse(), std::invalid_argument);
|
{
|
||||||
CHECK_THROWS_AS(json::parser("\\a").parse(), std::invalid_argument);
|
// valid escapes
|
||||||
CHECK_THROWS_AS(json::parser("\\c").parse(), std::invalid_argument);
|
case ('"'):
|
||||||
CHECK_THROWS_AS(json::parser("\\e").parse(), std::invalid_argument);
|
case ('\\'):
|
||||||
CHECK_THROWS_AS(json::parser("\\g").parse(), std::invalid_argument);
|
case ('/'):
|
||||||
CHECK_THROWS_AS(json::parser("\\m").parse(), std::invalid_argument);
|
case ('b'):
|
||||||
CHECK_THROWS_AS(json::parser("\\o").parse(), std::invalid_argument);
|
case ('f'):
|
||||||
CHECK_THROWS_AS(json::parser("\\q").parse(), std::invalid_argument);
|
case ('n'):
|
||||||
CHECK_THROWS_AS(json::parser("\\s").parse(), std::invalid_argument);
|
case ('r'):
|
||||||
CHECK_THROWS_AS(json::parser("\\v").parse(), std::invalid_argument);
|
case ('t'):
|
||||||
|
{
|
||||||
|
CHECK_NOTHROW(json::parser(s).parse());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// \u must be followed with four numbers, so we skip it here
|
||||||
|
case ('u'):
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// any other combination of backslash and character is invalid
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
CHECK_THROWS_AS(json::parser(s).parse(), std::invalid_argument);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue