• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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