diff --git a/test/src/unit-regression2.cpp b/test/src/unit-regression2.cpp index fa5de3179..96bf6c872 100644 --- a/test/src/unit-regression2.cpp +++ b/test/src/unit-regression2.cpp @@ -157,6 +157,26 @@ struct adl_serializer }; } // namespace nlohmann +///////////////////////////////////////////////////////////////////// +// for #2824 +///////////////////////////////////////////////////////////////////// + +class sax_no_exception : public nlohmann::detail::json_sax_dom_parser +{ + public: + explicit sax_no_exception(json& j) : nlohmann::detail::json_sax_dom_parser(j, false) {} + + static bool parse_error(std::size_t position, const std::string& last_token, const json::exception& ex) + { + error_string = ex.what(); + return false; + } + + static std::string error_string; +}; + +std::string sax_no_exception::error_string = ""; + TEST_CASE("regression tests 2") { @@ -622,6 +642,15 @@ TEST_CASE("regression tests 2") } } + SECTION("issue #2824 - encoding of json::exception::what()") + { + json j; + sax_no_exception sax(j); + + CHECK (!json::sax_parse("xyz", &sax)); + CHECK(sax_no_exception::error_string == "[json.exception.parse_error.101] parse error at line 1, column 1: syntax error while parsing value - invalid literal; last read: 'x'"); + } + SECTION("issue #2825 - Properly constrain the basic_json conversion operator") { static_assert(std::is_copy_assignable::value, "");