summaryrefslogtreecommitdiff
path: root/json4cpp/tests/src/unit-disabled_exceptions.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'json4cpp/tests/src/unit-disabled_exceptions.cpp')
-rw-r--r--json4cpp/tests/src/unit-disabled_exceptions.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/json4cpp/tests/src/unit-disabled_exceptions.cpp b/json4cpp/tests/src/unit-disabled_exceptions.cpp
new file mode 100644
index 0000000000..e4532e2349
--- /dev/null
+++ b/json4cpp/tests/src/unit-disabled_exceptions.cpp
@@ -0,0 +1,51 @@
+// __ _____ _____ _____
+// __| | __| | | | JSON for Modern C++ (supporting code)
+// | | |__ | | | | | | version 3.12.0
+// |_____|_____|_____|_|___| https://github.com/nlohmann/json
+//
+// SPDX-FileCopyrightText: 2013-2026 Niels Lohmann <https://nlohmann.me>
+// SPDX-License-Identifier: MIT
+
+#include "doctest_compatibility.h"
+
+// disable -Wnoexcept as exceptions are switched off for this test suite
+DOCTEST_GCC_SUPPRESS_WARNING_PUSH
+DOCTEST_GCC_SUPPRESS_WARNING("-Wnoexcept")
+
+#include <nlohmann/json.hpp>
+using json = nlohmann::json;
+
+/////////////////////////////////////////////////////////////////////
+// for #2824
+/////////////////////////////////////////////////////////////////////
+
+class sax_no_exception : public nlohmann::detail::json_sax_dom_parser<json, nlohmann::detail::string_input_adapter_type>
+{
+ public:
+ explicit sax_no_exception(json& j) : nlohmann::detail::json_sax_dom_parser<json, nlohmann::detail::string_input_adapter_type>(j, false) {}
+
+ static bool parse_error(std::size_t /*position*/, const std::string& /*last_token*/, const json::exception& ex)
+ {
+ error_string = new std::string(ex.what()); // NOLINT(cppcoreguidelines-owning-memory)
+ return false;
+ }
+
+ static std::string* error_string;
+};
+
+std::string* sax_no_exception::error_string = nullptr;
+
+TEST_CASE("Tests with disabled exceptions")
+{
+ 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'");
+ delete sax_no_exception::error_string; // NOLINT(cppcoreguidelines-owning-memory)
+ }
+}
+
+DOCTEST_GCC_SUPPRESS_WARNING_POP