From 42a8c644991100c679bb844f6225a820eaa81647 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Fri, 30 Dec 2016 12:28:52 +0100 Subject: [PATCH 1/5] :bookmark: added version information --- src/json.hpp | 9 +++++++++ src/json.hpp.re2c | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/src/json.hpp b/src/json.hpp index 23058bee..b5088355 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -873,8 +873,17 @@ class basic_json break; } + case value_t::null: + { + break; + } + default: { + if (t == value_t::null) + { + throw std::domain_error("961c151d2e87f2686a955a9be24d316f1362bf21"); + } break; } } diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index ac9a3315..e8a52a0f 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -873,8 +873,17 @@ class basic_json break; } + case value_t::null: + { + break; + } + default: { + if (t == value_t::null) + { + throw std::domain_error("961c151d2e87f2686a955a9be24d316f1362bf21"); + } break; } } From 328eb55dc40151a31052c137d25995f97457a3e5 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Fri, 30 Dec 2016 14:02:51 +0100 Subject: [PATCH 2/5] :construction: started working on #397 --- src/json.hpp | 61 ++++++++++++++++++++++++++++++++++++++- src/json.hpp.re2c | 61 ++++++++++++++++++++++++++++++++++++++- test/CMakeLists.txt | 1 + test/Makefile | 3 +- test/src/unit-version.cpp | 40 +++++++++++++++++++++++++ 5 files changed, 163 insertions(+), 3 deletions(-) create mode 100644 test/src/unit-version.cpp diff --git a/src/json.hpp b/src/json.hpp index 5ad1b4e5..1624328a 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -282,6 +282,64 @@ class basic_json return allocator_type(); } + /*! + @brief returns version information on the library + */ + static basic_json version() + { + basic_json result; + + result["copyright"] = "(C) 2013-2016 Niels Lohmann"; + result["name"] = "JSON for Modern C++"; + result["url"] = "https://github.com/nlohmann/json"; + result["version"] = + { + {"string", "2.0.10"}, + {"major", 2}, + {"minor", 0}, + {"patch", 10}, + }; + +#ifdef _WIN32 + result["platform"] = "win32"; +#elif defined __linux__ + result["platform"] = "linux"; +#elif defined __APPLE__ + result["platform"] = "apple"; +#elif defined __unix__ + result["platform"] = "unix"; +#else + result["platform"] = "unknown"; +#endif + +#if defined(__clang__) + result["compiler"] = {{"family", "clang"}, {"version", CLANG_VERSION}}; +#elif defined(__ICC) || defined(__INTEL_COMPILER) + result["compiler"] = {{"family", "icc"}, {"version", __INTEL_COMPILER}}; +#elif defined(__GNUC__) || defined(__GNUG__) + result["compiler"] = {{"family", "gcc"}, {"version", GCC_VERSION}}; +#elif defined(__HP_cc) || defined(__HP_aCC) + result["compiler"] = "hp" +#elif defined(__IBMCPP__) + result["compiler"] = {{"family", "ilecpp"}, {"version", __IBMCPP__}}; +#elif defined(_MSC_VER) + result["compiler"] = {{"family", "msvc"}, {"version", _MSC_VER}}; +#elif defined(__PGI) + result["compiler"] = {{"family", "pgcpp"}, {"version", __PGI}}; +#elif defined(__SUNPRO_CC) + result["compiler"] = {{"family", "sunpro"}, {"version", __SUNPRO_CC}}; +#else + result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}}; +#endif + +#ifdef __cplusplus + result["compiler"]["c++"] = std::to_string(__cplusplus); +#else + result["compiler"]["c++"] = "unknown"; +#endif + return result; + } + /////////////////////////// // JSON value data types // @@ -882,7 +940,8 @@ class basic_json { if (t == value_t::null) { - throw std::domain_error("961c151d2e87f2686a955a9be24d316f1362bf21"); + // echo "JSON for Modern C++" | sha1sum + throw std::domain_error("961c151d2e87f2686a955a9be24d316f1362bf21 2.0.10"); } break; } diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index be1ebf55..a08c4c93 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -282,6 +282,64 @@ class basic_json return allocator_type(); } + /*! + @brief returns version information on the library + */ + static basic_json version() + { + basic_json result; + + result["copyright"] = "(C) 2013-2016 Niels Lohmann"; + result["name"] = "JSON for Modern C++"; + result["url"] = "https://github.com/nlohmann/json"; + result["version"] = + { + {"string", "2.0.10"}, + {"major", 2}, + {"minor", 0}, + {"patch", 10}, + }; + +#ifdef _WIN32 + result["platform"] = "win32"; +#elif defined __linux__ + result["platform"] = "linux"; +#elif defined __APPLE__ + result["platform"] = "apple"; +#elif defined __unix__ + result["platform"] = "unix"; +#else + result["platform"] = "unknown"; +#endif + +#if defined(__clang__) + result["compiler"] = {{"family", "clang"}, {"version", CLANG_VERSION}}; +#elif defined(__ICC) || defined(__INTEL_COMPILER) + result["compiler"] = {{"family", "icc"}, {"version", __INTEL_COMPILER}}; +#elif defined(__GNUC__) || defined(__GNUG__) + result["compiler"] = {{"family", "gcc"}, {"version", GCC_VERSION}}; +#elif defined(__HP_cc) || defined(__HP_aCC) + result["compiler"] = "hp" +#elif defined(__IBMCPP__) + result["compiler"] = {{"family", "ilecpp"}, {"version", __IBMCPP__}}; +#elif defined(_MSC_VER) + result["compiler"] = {{"family", "msvc"}, {"version", _MSC_VER}}; +#elif defined(__PGI) + result["compiler"] = {{"family", "pgcpp"}, {"version", __PGI}}; +#elif defined(__SUNPRO_CC) + result["compiler"] = {{"family", "sunpro"}, {"version", __SUNPRO_CC}}; +#else + result["compiler"] = {{"family", "unknown"}, {"version", "unknown"}}; +#endif + +#ifdef __cplusplus + result["compiler"]["c++"] = std::to_string(__cplusplus); +#else + result["compiler"]["c++"] = "unknown"; +#endif + return result; + } + /////////////////////////// // JSON value data types // @@ -882,7 +940,8 @@ class basic_json { if (t == value_t::null) { - throw std::domain_error("961c151d2e87f2686a955a9be24d316f1362bf21"); + // echo "JSON for Modern C++" | sha1sum + throw std::domain_error("961c151d2e87f2686a955a9be24d316f1362bf21 2.0.10"); } break; } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 47785aee..11c8d5b1 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -35,6 +35,7 @@ add_executable(${JSON_UNITTEST_TARGET_NAME} "src/unit-serialization.cpp" "src/unit-testsuites.cpp" "src/unit-unicode.cpp" + "src/unit-version.cpp" ) set_target_properties(${JSON_UNITTEST_TARGET_NAME} PROPERTIES diff --git a/test/Makefile b/test/Makefile index 556ab0d7..efca9017 100644 --- a/test/Makefile +++ b/test/Makefile @@ -37,8 +37,9 @@ SOURCES = src/unit.cpp \ src/unit-reference_access.cpp \ src/unit-regression.cpp \ src/unit-serialization.cpp \ + src/unit-testsuites.cpp \ src/unit-unicode.cpp \ - src/unit-testsuites.cpp + src/unit-version.cpp OBJECTS = $(SOURCES:.cpp=.o) diff --git a/test/src/unit-version.cpp b/test/src/unit-version.cpp new file mode 100644 index 00000000..bede4ff3 --- /dev/null +++ b/test/src/unit-version.cpp @@ -0,0 +1,40 @@ +/* + __ _____ _____ _____ + __| | __| | | | JSON for Modern C++ (test suite) +| | |__ | | | | | | version 2.0.9 +|_____|_____|_____|_|___| https://github.com/nlohmann/json + +Licensed under the MIT License . +Copyright (c) 2013-2016 Niels Lohmann . + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include "catch.hpp" + +#include "json.hpp" +using nlohmann::json; + +TEST_CASE("version information") +{ + SECTION("version()") + { + CHECK(json::version()["name"] == "JSON for Modern C++"); + } +} From dd45ba6f8957cb32f92af7b0d2aefee94d50ed2a Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Sun, 8 Jan 2017 09:19:44 +0100 Subject: [PATCH 3/5] :construction: renamed `version()` to `meta()` --- src/json.hpp | 8 ++++---- src/json.hpp.re2c | 8 ++++---- test/src/unit-version.cpp | 3 ++- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/json.hpp b/src/json.hpp index 9e065e59..3200e095 100644 --- a/src/json.hpp +++ b/src/json.hpp @@ -284,11 +284,11 @@ class basic_json /*! @brief returns version information on the library */ - static basic_json version() + static basic_json meta() { basic_json result; - result["copyright"] = "(C) 2013-2016 Niels Lohmann"; + result["copyright"] = "(C) 2013-2017 Niels Lohmann"; result["name"] = "JSON for Modern C++"; result["url"] = "https://github.com/nlohmann/json"; result["version"] = @@ -312,11 +312,11 @@ class basic_json #endif #if defined(__clang__) - result["compiler"] = {{"family", "clang"}, {"version", CLANG_VERSION}}; + result["compiler"] = {{"family", "clang"}, {"version", __clang_version__}}; #elif defined(__ICC) || defined(__INTEL_COMPILER) result["compiler"] = {{"family", "icc"}, {"version", __INTEL_COMPILER}}; #elif defined(__GNUC__) || defined(__GNUG__) - result["compiler"] = {{"family", "gcc"}, {"version", GCC_VERSION}}; + result["compiler"] = {{"family", "gcc"}, {"version", std::to_string(__GNUC__) + "." + std::to_string(__GNUC_MINOR__) + "." + std::to_string(__GNUC_PATCHLEVEL__)}}; #elif defined(__HP_cc) || defined(__HP_aCC) result["compiler"] = "hp" #elif defined(__IBMCPP__) diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c index a66a0238..c7171a27 100644 --- a/src/json.hpp.re2c +++ b/src/json.hpp.re2c @@ -284,11 +284,11 @@ class basic_json /*! @brief returns version information on the library */ - static basic_json version() + static basic_json meta() { basic_json result; - result["copyright"] = "(C) 2013-2016 Niels Lohmann"; + result["copyright"] = "(C) 2013-2017 Niels Lohmann"; result["name"] = "JSON for Modern C++"; result["url"] = "https://github.com/nlohmann/json"; result["version"] = @@ -312,11 +312,11 @@ class basic_json #endif #if defined(__clang__) - result["compiler"] = {{"family", "clang"}, {"version", CLANG_VERSION}}; + result["compiler"] = {{"family", "clang"}, {"version", __clang_version__}}; #elif defined(__ICC) || defined(__INTEL_COMPILER) result["compiler"] = {{"family", "icc"}, {"version", __INTEL_COMPILER}}; #elif defined(__GNUC__) || defined(__GNUG__) - result["compiler"] = {{"family", "gcc"}, {"version", GCC_VERSION}}; + result["compiler"] = {{"family", "gcc"}, {"version", std::to_string(__GNUC__) + "." + std::to_string(__GNUC_MINOR__) + "." + std::to_string(__GNUC_PATCHLEVEL__)}}; #elif defined(__HP_cc) || defined(__HP_aCC) result["compiler"] = "hp" #elif defined(__IBMCPP__) diff --git a/test/src/unit-version.cpp b/test/src/unit-version.cpp index bede4ff3..1b4ea91c 100644 --- a/test/src/unit-version.cpp +++ b/test/src/unit-version.cpp @@ -35,6 +35,7 @@ TEST_CASE("version information") { SECTION("version()") { - CHECK(json::version()["name"] == "JSON for Modern C++"); + CHECK(json::meta()["name"] == "JSON for Modern C++"); + CHECK(json::meta()["compiler"] == "JSON for Modern C++"); } } From e9bbf5aabad1a90a5f5cf43ca8df49d5e7a52aca Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Sun, 8 Jan 2017 09:31:40 +0100 Subject: [PATCH 4/5] :bug: forgot to remove a test case --- test/src/unit-version.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/test/src/unit-version.cpp b/test/src/unit-version.cpp index 1b4ea91c..f7b16e19 100644 --- a/test/src/unit-version.cpp +++ b/test/src/unit-version.cpp @@ -36,6 +36,5 @@ TEST_CASE("version information") SECTION("version()") { CHECK(json::meta()["name"] == "JSON for Modern C++"); - CHECK(json::meta()["compiler"] == "JSON for Modern C++"); } } From 3a9ccfac226918727532c03892b20b4d705a3558 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Thu, 12 Jan 2017 21:35:27 +0100 Subject: [PATCH 5/5] :construction: cleanup --- test/CMakeLists.txt | 2 +- test/Makefile | 4 ++-- test/src/{unit-version.cpp => unit-meta.cpp} | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) rename test/src/{unit-version.cpp => unit-meta.cpp} (97%) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 11c8d5b1..62213ad3 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -26,6 +26,7 @@ add_executable(${JSON_UNITTEST_TARGET_NAME} "src/unit-iterators2.cpp" "src/unit-json_patch.cpp" "src/unit-json_pointer.cpp" + "src/unit-meta.cpp" "src/unit-modifiers.cpp" "src/unit-msgpack.cpp" "src/unit-pointer_access.cpp" @@ -35,7 +36,6 @@ add_executable(${JSON_UNITTEST_TARGET_NAME} "src/unit-serialization.cpp" "src/unit-testsuites.cpp" "src/unit-unicode.cpp" - "src/unit-version.cpp" ) set_target_properties(${JSON_UNITTEST_TARGET_NAME} PROPERTIES diff --git a/test/Makefile b/test/Makefile index 5f7d55b2..3d5595d2 100644 --- a/test/Makefile +++ b/test/Makefile @@ -30,6 +30,7 @@ SOURCES = src/unit.cpp \ src/unit-iterators2.cpp \ src/unit-json_patch.cpp \ src/unit-json_pointer.cpp \ + src/unit-meta.cpp \ src/unit-modifiers.cpp \ src/unit-msgpack.cpp \ src/unit-pointer_access.cpp \ @@ -38,8 +39,7 @@ SOURCES = src/unit.cpp \ src/unit-regression.cpp \ src/unit-serialization.cpp \ src/unit-testsuites.cpp \ - src/unit-unicode.cpp \ - src/unit-version.cpp + src/unit-unicode.cpp OBJECTS = $(SOURCES:.cpp=.o) diff --git a/test/src/unit-version.cpp b/test/src/unit-meta.cpp similarity index 97% rename from test/src/unit-version.cpp rename to test/src/unit-meta.cpp index f7b16e19..7040042e 100644 --- a/test/src/unit-version.cpp +++ b/test/src/unit-meta.cpp @@ -1,7 +1,7 @@ /* __ _____ _____ _____ __| | __| | | | JSON for Modern C++ (test suite) -| | |__ | | | | | | version 2.0.9 +| | |__ | | | | | | version 2.0.10 |_____|_____|_____|_|___| https://github.com/nlohmann/json Licensed under the MIT License .