From 328eb55dc40151a31052c137d25995f97457a3e5 Mon Sep 17 00:00:00 2001 From: Niels Lohmann Date: Fri, 30 Dec 2016 14:02:51 +0100 Subject: [PATCH] :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 5ad1b4e59..1624328aa 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 be1ebf551..a08c4c932 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 47785aeed..11c8d5b1d 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 556ab0d7c..efca90170 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 000000000..bede4ff38 --- /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++"); + } +}