Fully implemented the JSON spec
This commit is contained in:
parent
222aacc213
commit
5a54e46709
3 changed files with 232 additions and 62 deletions
|
|
@ -1652,10 +1652,6 @@ TEST_CASE("Parser")
|
|||
CHECK(json::parse("\"a\\nz\"") == json("a\nz"));
|
||||
CHECK(json::parse("\"\\n\"") == json("\n"));
|
||||
|
||||
// escape unicode characters
|
||||
CHECK(json::parse("\"\\u002F\"") == json("/"));
|
||||
CHECK(json::parse("\"\\u00E4\"") == json(u8"\u00E4"));
|
||||
|
||||
// escaping senseless stuff
|
||||
CHECK_THROWS_AS(json::parse("\"\\z\""), std::invalid_argument);
|
||||
CHECK_THROWS_AS(json::parse("\"\\ \""), std::invalid_argument);
|
||||
|
|
@ -1665,6 +1661,44 @@ TEST_CASE("Parser")
|
|||
CHECK_THROWS_AS(json::parse("\""), std::invalid_argument);
|
||||
}
|
||||
|
||||
SECTION("unicode_escaping")
|
||||
{
|
||||
// two tests for uppercase and lowercase hex
|
||||
|
||||
// normal forward slash in ASCII range
|
||||
CHECK(json::parse("\"\\u002F\"") == json("/"));
|
||||
CHECK(json::parse("\"\\u002f\"") == json("/"));
|
||||
// german a umlaut
|
||||
CHECK(json::parse("\"\\u00E4\"") == json(u8"\u00E4"));
|
||||
CHECK(json::parse("\"\\u00e4\"") == json(u8"\u00E4"));
|
||||
// weird d
|
||||
CHECK(json::parse("\"\\u0111\"") == json(u8"\u0111"));
|
||||
// unicode arrow left
|
||||
CHECK(json::parse("\"\\u2190\"") == json(u8"\u2190"));
|
||||
// pleasing osiris by testing hieroglyph support
|
||||
CHECK(json::parse("\"\\uD80C\\uDC60\"") == json(u8"\U00013060"));
|
||||
CHECK(json::parse("\"\\ud80C\\udc60\"") == json(u8"\U00013060"));
|
||||
|
||||
|
||||
// no hex numbers behind the \u
|
||||
CHECK_THROWS_AS(json::parse("\"\\uD80v\""), std::invalid_argument);
|
||||
CHECK_THROWS_AS(json::parse("\"\\uD80 A\""), std::invalid_argument);
|
||||
CHECK_THROWS_AS(json::parse("\"\\uD8v\""), std::invalid_argument);
|
||||
CHECK_THROWS_AS(json::parse("\"\\uDv\""), std::invalid_argument);
|
||||
CHECK_THROWS_AS(json::parse("\"\\uv\""), std::invalid_argument);
|
||||
CHECK_THROWS_AS(json::parse("\"\\u\""), std::invalid_argument);
|
||||
CHECK_THROWS_AS(json::parse("\"\\u\\u\""), std::invalid_argument);
|
||||
CHECK_THROWS_AS(json::parse("\"a\\uD80vAz\""), std::invalid_argument);
|
||||
// missing part of a surrogate pair
|
||||
CHECK_THROWS_AS(json::parse("\"bla \\uD80C bla\""), std::invalid_argument);
|
||||
CHECK_THROWS_AS(json::parse("\"\\uD80C bla bla\""), std::invalid_argument);
|
||||
CHECK_THROWS_AS(json::parse("\"bla bla \\uD80C bla bla\""), std::invalid_argument);
|
||||
// senseless surrogate pair
|
||||
CHECK_THROWS_AS(json::parse("\"\\uD80C\\uD80C\""), std::invalid_argument);
|
||||
CHECK_THROWS_AS(json::parse("\"\\uD80C\\u0000\""), std::invalid_argument);
|
||||
CHECK_THROWS_AS(json::parse("\"\\uD80C\\uFFFF\""), std::invalid_argument);
|
||||
}
|
||||
|
||||
SECTION("boolean")
|
||||
{
|
||||
// accept the exact values
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue