mirror of
https://github.com/nlohmann/json.git
synced 2026-09-07 16:57:59 +00:00
These four supported configuration macros were never actually compiled anywhere in the test matrix: - JSON_NO_IO and the JSON_THROW_USER/JSON_TRY_USER/JSON_CATCH_USER trio are exercised together in a new tests/src/unit-no_io_and_user_exceptions.cpp, which is automatically picked up by the existing unit-*.cpp test glob and thus built across the whole standard test matrix. - JSON_SKIP_LIBRARY_VERSION_CHECK is exercised by a new, dedicated tests/src/skip_library_version_check.cpp, compiled directly by the new ci_test_skiplibraryversioncheck target in cmake/ci.cmake: the scenario it simulates (mixing two differently-versioned inclusions of the library) unavoidably triggers the compiler's own "macro redefined" warning, which would fail under the library's own -Weverything/-Werror unit test matrix for a reason unrelated to the macro under test. - JSON_DisableEnumSerialization already had #if-guarded tests in several unit-*.cpp files (from #4384), but no CMake target ever actually set the JSON_DisableEnumSerialization CMake option, so that guarded code was never compiled. Add ci_test_disableenumserialization, mirroring the existing ci_test_noimplicitconversions/ci_test_noglobaludls targets. Building the full test suite with this option on surfaced one real, narrow gap: get<T>() on std::vector<std::byte> (used by unit-regression2.cpp's custom BinaryType tests) relies on std::byte being handled via enum serialization, so add the same #if-guard convention to the two affected SECTIONs there. Both new CI targets are added to the ci_cmake_options matrix in .github/workflows/ubuntu.yml, alongside the existing ci_test_* targets. Signed-off-by: Niels Lohmann <mail@nlohmann.me>
62 lines
2.6 KiB
C++
62 lines
2.6 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
|
|
|
|
// Standalone compile-and-run check for the JSON_SKIP_LIBRARY_VERSION_CHECK
|
|
// configuration macro, which (per #5423) was never exercised anywhere in the
|
|
// test matrix.
|
|
//
|
|
// include/nlohmann/detail/abi_macros.hpp normally emits a #warning if
|
|
// NLOHMANN_JSON_VERSION_MAJOR/MINOR/PATCH are already defined (as they would
|
|
// be by an earlier inclusion of a different version of the library) with
|
|
// values that mismatch the version about to be defined -- unless
|
|
// JSON_SKIP_LIBRARY_VERSION_CHECK is defined, in which case the check (and
|
|
// that #warning) is skipped.
|
|
//
|
|
// This file deliberately is not named tests/src/unit-*.cpp: it is compiled
|
|
// directly (with a modest, non-strict warning set) by the dedicated
|
|
// ci_test_skiplibraryversioncheck target in cmake/ci.cmake, rather than being
|
|
// folded into the library's own -Weverything/-Werror unit test matrix. That
|
|
// is because the scenario simulated here -- mixing two different, already
|
|
// differently-versioned inclusions of the library in one translation unit --
|
|
// unavoidably also triggers the *compiler's own* "macro redefined" warning,
|
|
// independent of (and unaffected by) JSON_SKIP_LIBRARY_VERSION_CHECK, which
|
|
// only ever silences the library's own #warning. Building this file under
|
|
// -Weverything -Werror would therefore fail for a reason unrelated to the
|
|
// macro under test.
|
|
#define NLOHMANN_JSON_VERSION_MAJOR 0
|
|
#define NLOHMANN_JSON_VERSION_MINOR 0
|
|
#define NLOHMANN_JSON_VERSION_PATCH 0
|
|
|
|
#define JSON_SKIP_LIBRARY_VERSION_CHECK 1
|
|
|
|
#include <nlohmann/json.hpp>
|
|
|
|
int main()
|
|
{
|
|
// reaching this point at all already proves that the mismatched,
|
|
// pre-defined version macros above did not stop compilation -- which is
|
|
// exactly what JSON_SKIP_LIBRARY_VERSION_CHECK is for. The library must
|
|
// also still be fully usable.
|
|
const nlohmann::json j = {{"a", 1}, {"b", {1, 2, 3}}};
|
|
if (j.dump() != "{\"a\":1,\"b\":[1,2,3]}")
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
// include/nlohmann/detail/abi_macros.hpp unconditionally (re)defines the
|
|
// version macros to the library's real, current version right after the
|
|
// (here, skipped) mismatch check, regardless of the deliberately wrong
|
|
// stand-in values defined above.
|
|
if (NLOHMANN_JSON_VERSION_MAJOR == 0 && NLOHMANN_JSON_VERSION_MINOR == 0 && NLOHMANN_JSON_VERSION_PATCH == 0)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|