1 // __ _____ _____ _____ 2 // __| | __| | | | JSON for Modern C++ (supporting code) 3 // | | |__ | | | | | | version 3.11.3 4 // |_____|_____|_____|_|___| https://github.com/nlohmann/json 5 // 6 // Copyright (c) 2013-2022 Niels Lohmann <http://nlohmann.me>. 7 // SPDX-FileCopyrightText: 2013-2023 Niels Lohmann <https://nlohmann.me> 8 // SPDX-License-Identifier: MIT 9 10 #include "doctest_compatibility.h" 11 12 // disable -Wnoexcept as exceptions are switched off for this test suite 13 DOCTEST_GCC_SUPPRESS_WARNING_PUSH 14 DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept") 15 16 #include <nlohmann/json.hpp> 17 using json = nlohmann::json; 18 19 ///////////////////////////////////////////////////////////////////// 20 // for #2824 21 ///////////////////////////////////////////////////////////////////// 22 23 class sax_no_exception : public nlohmann::detail::json_sax_dom_parser<json> 24 { 25 public: sax_no_exception(json & j)26 explicit sax_no_exception(json& j) : nlohmann::detail::json_sax_dom_parser<json>(j, false) {} 27 parse_error(std::size_t,const std::string &,const json::exception & ex)28 static bool parse_error(std::size_t /*position*/, const std::string& /*last_token*/, const json::exception& ex) 29 { 30 error_string = new std::string(ex.what()); // NOLINT(cppcoreguidelines-owning-memory) 31 return false; 32 } 33 34 static std::string* error_string; 35 }; 36 37 std::string* sax_no_exception::error_string = nullptr; 38 39 TEST_CASE("Tests with disabled exceptions") 40 { 41 SECTION("issue #2824 - encoding of json::exception::what()") 42 { 43 json j; 44 sax_no_exception sax(j); 45 46 CHECK (!json::sax_parse("xyz", &sax)); 47 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'"); 48 delete sax_no_exception::error_string; // NOLINT(cppcoreguidelines-owning-memory) 49 } 50 } 51 52 DOCTEST_GCC_SUPPRESS_WARNING_POP 53