diff --git a/test/unit.cpp b/test/unit.cpp index 37fcee55..d6942326 100644 --- a/test/unit.cpp +++ b/test/unit.cpp @@ -4988,6 +4988,44 @@ TEST_CASE("parser class") } } + SECTION("string") + { + // empty string + CHECK(json::parser("\"\"").parse() == json(json::value_t::string)); + + SECTION("escaped") + { + // quotation mark + CHECK(json::parser("\"\\\"\"").parse() == json("\\\"")); + // reverse solidus + CHECK(json::parser("\"\\\\\"").parse() == json("\\\\")); + // solidus + CHECK(json::parser("\"\\/\"").parse() == json("\\/")); + // backspace + CHECK(json::parser("\"\\b\"").parse() == json("\\b")); + // formfeed + CHECK(json::parser("\"\\f\"").parse() == json("\\f")); + // newline + CHECK(json::parser("\"\\n\"").parse() == json("\\n")); + // carriage return + CHECK(json::parser("\"\\r\"").parse() == json("\\r")); + // horizontal tab + CHECK(json::parser("\"\\t\"").parse() == json("\\t")); + + CHECK(json::parser("\"\\u0000\"").parse() == json("\\u0000")); + CHECK(json::parser("\"\\u000a\"").parse() == json("\\u000a")); + CHECK(json::parser("\"\\u00b0\"").parse() == json("\\u00b0")); + CHECK(json::parser("\"\\u0c00\"").parse() == json("\\u0c00")); + CHECK(json::parser("\"\\ud000\"").parse() == json("\\ud000")); + CHECK(json::parser("\"\\u0000\"").parse() == json("\\u0000")); + CHECK(json::parser("\"\\u000E\"").parse() == json("\\u000E")); + CHECK(json::parser("\"\\u00F0\"").parse() == json("\\u00F0")); + CHECK(json::parser("\"\\u0100\"").parse() == json("\\u0100")); + CHECK(json::parser("\"\\u2000\"").parse() == json("\\u2000")); + CHECK(json::parser("\"\\uFFFF\"").parse() == json("\\uFFFF")); + } + } + SECTION("number") { SECTION("integers") @@ -5090,5 +5128,8 @@ TEST_CASE("parser class") CHECK_THROWS_AS(json::parser("{\"foo\":").parse(), std::invalid_argument); CHECK_THROWS_AS(json::parser("{\"foo\":}").parse(), std::invalid_argument); CHECK_THROWS_AS(json::parser("{\"foo\":1,}").parse(), std::invalid_argument); + + // unexpected end of string + CHECK_THROWS_AS(json::parser("\"").parse(), std::invalid_argument); } }