mirror of
https://github.com/nlohmann/json.git
synced 2026-10-01 06:25:17 +00:00
unit-json_view.cpp: type queries, size, and empty against basic_json; materialize() against parse() (json and ordered_json, generated documents, duplicate keys, 100,000 levels of nesting, parent pointers with JSON_DIAGNOSTICS); parse errors and their messages equal to parse() for malformed inputs and all option combinations; the overflow of a float document (1e39, 3.4028236e38) as in parse(); NUL and BOM; borrowed and owned inputs (strings, C strings, literals, vectors, string_view, streams, wide strings, parse_copy, and iterator ranges over pointers, vectors, strings, and lists); reuse with read(); moves; shrink_to_fit() of the index and of the decoded strings; source offsets. unit-json_view_macros.cpp includes the header without JSON_TEST_KEEP_MACROS, as users do: the view must not depend on the macros json.hpp undefines, and must not leak its own. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
48 lines
2.0 KiB
C++
48 lines
2.0 KiB
C++
// __ _____ _____ _____
|
|
// __| | __| | | | 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"
|
|
|
|
// 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 <nlohmann/json_view.hpp>
|
|
|
|
#include <string>
|
|
#include <type_traits>
|
|
|
|
#if (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
|
|
#include <string_view>
|
|
#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<nlohmann::json_view::string_view_t, std::string_view>::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));
|
|
}
|