// __ _____ _____ _____ // __| | __| | | | JSON for Modern C++ (supporting code) // | | |__ | | | | | | version 3.12.0 // |_____|_____|_____|_|___| https://github.com/nlohmann/json // // SPDX-FileCopyrightText: 2013-2026 Niels Lohmann // SPDX-License-Identifier: MIT #include "doctest_compatibility.h" // All other tests keep the library's macros (JSON_TEST_KEEP_MACROS). This one // includes json_view.hpp as users do, so that json.hpp undefines its macros // (JSON_HAS_CPP_17, JSON_STRICT_NUL_HANDLING, ...) before the view is compiled. #undef JSON_TEST_KEEP_MACROS #include #include #include #if (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) #include #define JSON_VIEW_TEST_HAS_STRING_VIEW 1 #else #define JSON_VIEW_TEST_HAS_STRING_VIEW 0 #endif // the view's own macros do not leak #if defined(NLOHMANN_VIEW_LIKELY) || defined(NLOHMANN_VIEW_UNLIKELY) || defined(NLOHMANN_VIEW_ALWAYS_INLINE) || defined(NLOHMANN_VIEW_NOINLINE) \ || defined(NLOHMANN_VIEW_NODISCARD) || defined(NLOHMANN_VIEW_THROW) || defined(NLOHMANN_VIEW_HAS_CPP_17) || defined(NLOHMANN_VIEW_LITTLE_ENDIAN) \ || defined(NLOHMANN_VIEW_REPEAT16) #error "json_view.hpp leaks a macro" #endif TEST_CASE("json_view without the library's macros") { // (this file also gets C++17 builds: it mentions JSON_HAS_CPP_17) #if JSON_VIEW_TEST_HAS_STRING_VIEW CHECK(std::is_same::value); #endif const std::string text = "[1, 2.5, \"x\"]"; const nlohmann::json_document d = nlohmann::json_document::parse(text); CHECK(d.root().size() == 3); CHECK(d.root().materialize() == nlohmann::json::parse(text)); // the NUL handling of the library's configuration const std::string with_nul("[1]\0x", 5); CHECK(nlohmann::json_document::accept(with_nul) == nlohmann::json::accept(with_nul)); }