moved from Catch to doctest for unit tests
This commit is contained in:
parent
e5753b14a8
commit
2f44ac1def
52 changed files with 5517 additions and 11854 deletions
2
.github/CONTRIBUTING.md
vendored
2
.github/CONTRIBUTING.md
vendored
|
@ -32,7 +32,7 @@ To make changes, you need to edit the following files:
|
||||||
|
|
||||||
1. [`include/nlohmann/*`](https://github.com/nlohmann/json/tree/develop/include/nlohmann) - These files are the sources of the library. Before testing or creating a pull request, execute `make amalgamate` to regenerate `single_include/nlohmann/json.hpp`.
|
1. [`include/nlohmann/*`](https://github.com/nlohmann/json/tree/develop/include/nlohmann) - These files are the sources of the library. Before testing or creating a pull request, execute `make amalgamate` to regenerate `single_include/nlohmann/json.hpp`.
|
||||||
|
|
||||||
2. [`test/src/unit-*.cpp`](https://github.com/nlohmann/json/tree/develop/test/src) - These files contain the [Catch](https://github.com/philsquared/Catch) unit tests which currently cover [100 %](https://coveralls.io/github/nlohmann/json) of the library's code.
|
2. [`test/src/unit-*.cpp`](https://github.com/nlohmann/json/tree/develop/test/src) - These files contain the [doctest](https://github.com/onqtam/doctest) unit tests which currently cover [100 %](https://coveralls.io/github/nlohmann/json) of the library's code.
|
||||||
|
|
||||||
If you add or change a feature, please also add a unit test to this file. The unit tests can be compiled and executed with
|
If you add or change a feature, please also add a unit test to this file. The unit tests can be compiled and executed with
|
||||||
|
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -113,7 +113,6 @@ doctest:
|
||||||
|
|
||||||
# calling Clang with all warnings, except:
|
# calling Clang with all warnings, except:
|
||||||
# -Wno-documentation-unknown-command: code uses user-defined commands like @complexity
|
# -Wno-documentation-unknown-command: code uses user-defined commands like @complexity
|
||||||
# -Wno-exit-time-destructors: warning in Catch code
|
|
||||||
# -Wno-keyword-macro: unit-tests use "#define private public"
|
# -Wno-keyword-macro: unit-tests use "#define private public"
|
||||||
# -Wno-deprecated-declarations: the library deprecated some functions
|
# -Wno-deprecated-declarations: the library deprecated some functions
|
||||||
# -Wno-weak-vtables: exception class is defined inline, but has virtual method
|
# -Wno-weak-vtables: exception class is defined inline, but has virtual method
|
||||||
|
@ -128,7 +127,6 @@ pedantic_clang:
|
||||||
-Werror \
|
-Werror \
|
||||||
-Weverything \
|
-Weverything \
|
||||||
-Wno-documentation-unknown-command \
|
-Wno-documentation-unknown-command \
|
||||||
-Wno-exit-time-destructors \
|
|
||||||
-Wno-keyword-macro \
|
-Wno-keyword-macro \
|
||||||
-Wno-deprecated-declarations \
|
-Wno-deprecated-declarations \
|
||||||
-Wno-weak-vtables \
|
-Wno-weak-vtables \
|
||||||
|
|
|
@ -1240,13 +1240,13 @@ The library itself consists of a single header file licensed under the MIT licen
|
||||||
- [**American fuzzy lop**](http://lcamtuf.coredump.cx/afl/) for fuzz testing
|
- [**American fuzzy lop**](http://lcamtuf.coredump.cx/afl/) for fuzz testing
|
||||||
- [**AppVeyor**](https://www.appveyor.com) for [continuous integration](https://ci.appveyor.com/project/nlohmann/json) on Windows
|
- [**AppVeyor**](https://www.appveyor.com) for [continuous integration](https://ci.appveyor.com/project/nlohmann/json) on Windows
|
||||||
- [**Artistic Style**](http://astyle.sourceforge.net) for automatic source code identation
|
- [**Artistic Style**](http://astyle.sourceforge.net) for automatic source code identation
|
||||||
- [**Catch**](https://github.com/philsquared/Catch) for the unit tests
|
|
||||||
- [**Clang**](http://clang.llvm.org) for compilation with code sanitizers
|
- [**Clang**](http://clang.llvm.org) for compilation with code sanitizers
|
||||||
- [**CMake**](https://cmake.org) for build automation
|
- [**CMake**](https://cmake.org) for build automation
|
||||||
- [**Codacity**](https://www.codacy.com) for further [code analysis](https://www.codacy.com/app/nlohmann/json)
|
- [**Codacity**](https://www.codacy.com) for further [code analysis](https://www.codacy.com/app/nlohmann/json)
|
||||||
- [**Coveralls**](https://coveralls.io) to measure [code coverage](https://coveralls.io/github/nlohmann/json)
|
- [**Coveralls**](https://coveralls.io) to measure [code coverage](https://coveralls.io/github/nlohmann/json)
|
||||||
- [**Coverity Scan**](https://scan.coverity.com) for [static analysis](https://scan.coverity.com/projects/nlohmann-json)
|
- [**Coverity Scan**](https://scan.coverity.com) for [static analysis](https://scan.coverity.com/projects/nlohmann-json)
|
||||||
- [**cppcheck**](http://cppcheck.sourceforge.net) for static analysis
|
- [**cppcheck**](http://cppcheck.sourceforge.net) for static analysis
|
||||||
|
- [**doctest**](https://github.com/onqtam/doctest) for the unit tests
|
||||||
- [**Doxygen**](http://www.stack.nl/~dimitri/doxygen/) to generate [documentation](https://nlohmann.github.io/json/)
|
- [**Doxygen**](http://www.stack.nl/~dimitri/doxygen/) to generate [documentation](https://nlohmann.github.io/json/)
|
||||||
- [**git-update-ghpages**](https://github.com/rstacruz/git-update-ghpages) to upload the documentation to gh-pages
|
- [**git-update-ghpages**](https://github.com/rstacruz/git-update-ghpages) to upload the documentation to gh-pages
|
||||||
- [**GitHub Changelog Generator**](https://github.com/skywinder/github-changelog-generator) to generate the [ChangeLog](https://github.com/nlohmann/json/blob/develop/ChangeLog.md)
|
- [**GitHub Changelog Generator**](https://github.com/skywinder/github-changelog-generator) to generate the [ChangeLog](https://github.com/nlohmann/json/blob/develop/ChangeLog.md)
|
||||||
|
|
|
@ -22,7 +22,7 @@ if(JSON_NoExceptions)
|
||||||
if(NOT MSVC)
|
if(NOT MSVC)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DJSON_NOEXCEPTION")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DJSON_NOEXCEPTION")
|
||||||
endif()
|
endif()
|
||||||
set(CATCH_TEST_FILTER -e)
|
set(DOCTEST_TEST_FILTER --no-throw)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(JSON_Coverage)
|
if(JSON_Coverage)
|
||||||
|
@ -54,18 +54,18 @@ if(JSON_Coverage)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
# Catch library with the main function to speed up build
|
# doctest library with the main function to speed up build
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
add_library(catch_main OBJECT
|
add_library(doctest_main OBJECT
|
||||||
"src/unit.cpp"
|
"src/unit.cpp"
|
||||||
)
|
)
|
||||||
set_target_properties(catch_main PROPERTIES
|
set_target_properties(doctest_main PROPERTIES
|
||||||
COMPILE_DEFINITIONS "$<$<CXX_COMPILER_ID:MSVC>:_SCL_SECURE_NO_WARNINGS>"
|
COMPILE_DEFINITIONS "$<$<CXX_COMPILER_ID:MSVC>:_SCL_SECURE_NO_WARNINGS>"
|
||||||
COMPILE_OPTIONS "$<$<CXX_COMPILER_ID:MSVC>:/EHsc;$<$<CONFIG:Release>:/Od>>"
|
COMPILE_OPTIONS "$<$<CXX_COMPILER_ID:MSVC>:/EHsc;$<$<CONFIG:Release>:/Od>>"
|
||||||
)
|
)
|
||||||
target_compile_features(catch_main PUBLIC cxx_std_11)
|
target_compile_features(doctest_main PUBLIC cxx_std_11)
|
||||||
target_include_directories(catch_main PRIVATE "thirdparty/catch")
|
target_include_directories(doctest_main PRIVATE "thirdparty/doctest")
|
||||||
|
|
||||||
# https://stackoverflow.com/questions/2368811/how-to-set-warning-level-in-cmake
|
# https://stackoverflow.com/questions/2368811/how-to-set-warning-level-in-cmake
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
|
@ -95,10 +95,10 @@ foreach(file ${files})
|
||||||
get_filename_component(file_basename ${file} NAME_WE)
|
get_filename_component(file_basename ${file} NAME_WE)
|
||||||
string(REGEX REPLACE "unit-([^$]+)" "test-\\1" testcase ${file_basename})
|
string(REGEX REPLACE "unit-([^$]+)" "test-\\1" testcase ${file_basename})
|
||||||
|
|
||||||
add_executable(${testcase} $<TARGET_OBJECTS:catch_main> ${file})
|
add_executable(${testcase} $<TARGET_OBJECTS:doctest_main> ${file})
|
||||||
target_compile_definitions(${testcase} PRIVATE
|
target_compile_definitions(${testcase} PRIVATE
|
||||||
CATCH_CONFIG_FAST_COMPILE
|
DOCTEST_CONFIG_SUPER_FAST_ASSERTS
|
||||||
$<$<CXX_COMPILER_ID:MSVC>:_SCL_SECURE_NO_WARNINGS>
|
DOCTEST_THREAD_LOCAL
|
||||||
)
|
)
|
||||||
target_compile_options(${testcase} PRIVATE
|
target_compile_options(${testcase} PRIVATE
|
||||||
$<$<CXX_COMPILER_ID:MSVC>:/EHsc;$<$<CONFIG:Release>:/Od>>
|
$<$<CXX_COMPILER_ID:MSVC>:/EHsc;$<$<CONFIG:Release>:/Od>>
|
||||||
|
@ -106,26 +106,26 @@ foreach(file ${files})
|
||||||
$<$<CXX_COMPILER_ID:GNU>:-Wno-deprecated-declarations>
|
$<$<CXX_COMPILER_ID:GNU>:-Wno-deprecated-declarations>
|
||||||
)
|
)
|
||||||
target_include_directories(${testcase} PRIVATE
|
target_include_directories(${testcase} PRIVATE
|
||||||
thirdparty/catch
|
thirdparty/doctest
|
||||||
thirdparty/fifo_map
|
thirdparty/fifo_map
|
||||||
)
|
)
|
||||||
target_link_libraries(${testcase} ${NLOHMANN_JSON_TARGET_NAME})
|
target_link_libraries(${testcase} ${NLOHMANN_JSON_TARGET_NAME})
|
||||||
|
|
||||||
add_test(NAME "${testcase}_default"
|
add_test(NAME "${testcase}_default"
|
||||||
COMMAND ${testcase} ${CATCH_TEST_FILTER}
|
COMMAND ${testcase} ${DOCTEST_TEST_FILTER}
|
||||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
)
|
)
|
||||||
set_tests_properties("${testcase}_default" PROPERTIES LABELS "default")
|
set_tests_properties("${testcase}_default" PROPERTIES LABELS "default")
|
||||||
|
|
||||||
add_test(NAME "${testcase}_all"
|
add_test(NAME "${testcase}_all"
|
||||||
COMMAND ${testcase} ${CATCH_TEST_FILTER} "*"
|
COMMAND ${testcase} ${DOCTEST_TEST_FILTER} --no-skip
|
||||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
)
|
)
|
||||||
set_tests_properties("${testcase}_all" PROPERTIES LABELS "all")
|
set_tests_properties("${testcase}_all" PROPERTIES LABELS "all")
|
||||||
|
|
||||||
if(JSON_Valgrind)
|
if(JSON_Valgrind)
|
||||||
add_test(NAME "${testcase}_valgrind"
|
add_test(NAME "${testcase}_valgrind"
|
||||||
COMMAND ${memcheck_command} ${CMAKE_CURRENT_BINARY_DIR}/${testcase} ${CATCH_TEST_FILTER}
|
COMMAND ${memcheck_command} ${CMAKE_CURRENT_BINARY_DIR}/${testcase} ${DOCTEST_TEST_FILTER}
|
||||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||||
)
|
)
|
||||||
set_tests_properties("${testcase}_valgrind" PROPERTIES LABELS "valgrind")
|
set_tests_properties("${testcase}_valgrind" PROPERTIES LABELS "valgrind")
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
# additional flags
|
# additional flags
|
||||||
CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wcast-align -Wcast-qual -Wno-ctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wmissing-declarations -Wmissing-include-dirs -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-overflow=5 -Wswitch -Wundef -Wno-unused -Wnon-virtual-dtor -Wreorder -Wdeprecated -Wno-float-equal
|
CXXFLAGS += -std=c++11 -Wall -Wextra -pedantic -Wcast-align -Wcast-qual -Wno-ctor-dtor-privacy -Wdisabled-optimization -Wformat=2 -Winit-self -Wmissing-declarations -Wmissing-include-dirs -Wold-style-cast -Woverloaded-virtual -Wredundant-decls -Wshadow -Wsign-conversion -Wsign-promo -Wstrict-overflow=5 -Wswitch -Wundef -Wno-unused -Wnon-virtual-dtor -Wreorder -Wdeprecated -Wno-float-equal
|
||||||
CPPFLAGS += -I ../single_include -I . -I thirdparty/catch -I thirdparty/fifo_map -DCATCH_CONFIG_FAST_COMPILE
|
CPPFLAGS += -I ../single_include -I . -I thirdparty/doctest -I thirdparty/fifo_map -DDOCTEST_CONFIG_SUPER_FAST_ASSERTS
|
||||||
|
|
||||||
SOURCES = src/unit.cpp \
|
SOURCES = src/unit.cpp \
|
||||||
src/unit-algorithms.cpp \
|
src/unit-algorithms.cpp \
|
||||||
|
@ -63,11 +63,11 @@ clean:
|
||||||
# single test file
|
# single test file
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
json_unit: $(OBJECTS) ../single_include/nlohmann/json.hpp thirdparty/catch/catch.hpp
|
json_unit: $(OBJECTS) ../single_include/nlohmann/json.hpp thirdparty/doctest/doctest.h
|
||||||
@echo "[CXXLD] $@"
|
@echo "[CXXLD] $@"
|
||||||
@$(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJECTS) -o $@
|
@$(CXX) $(CXXFLAGS) $(LDFLAGS) $(OBJECTS) -o $@
|
||||||
|
|
||||||
%.o: %.cpp ../single_include/nlohmann/json.hpp thirdparty/catch/catch.hpp
|
%.o: %.cpp ../single_include/nlohmann/json.hpp thirdparty/doctest/doctest.h
|
||||||
@echo "[CXX] $@"
|
@echo "[CXX] $@"
|
||||||
@$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@
|
@$(CXX) $(CXXFLAGS) $(CPPFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ json_unit: $(OBJECTS) ../single_include/nlohmann/json.hpp thirdparty/catch/catch
|
||||||
# individual test cases
|
# individual test cases
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
test-%: src/unit-%.o src/unit.o ../single_include/nlohmann/json.hpp thirdparty/catch/catch.hpp
|
test-%: src/unit-%.o src/unit.o ../single_include/nlohmann/json.hpp thirdparty/doctest/doctest.h
|
||||||
@echo "[CXXLD] $@"
|
@echo "[CXXLD] $@"
|
||||||
@$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $< src/unit.o -o $@
|
@$(CXX) $(CXXFLAGS) $(CPPFLAGS) $(LDFLAGS) $< src/unit.o -o $@
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,11 +27,12 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#define private public
|
#define private public
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
#undef private
|
||||||
|
|
||||||
// special test case to check if memory is leaked if constructor throws
|
// special test case to check if memory is leaked if constructor throws
|
||||||
|
|
||||||
|
@ -60,7 +61,7 @@ TEST_CASE("bad_alloc")
|
||||||
bad_allocator>;
|
bad_allocator>;
|
||||||
|
|
||||||
// creating an object should throw
|
// creating an object should throw
|
||||||
CHECK_THROWS_AS(bad_json(bad_json::value_t::object), std::bad_alloc&);
|
CHECK_THROWS_AS(auto tmp = bad_json(bad_json::value_t::object), std::bad_alloc&);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -144,7 +145,7 @@ TEST_CASE("controlled bad_alloc")
|
||||||
auto t = my_json::value_t::object;
|
auto t = my_json::value_t::object;
|
||||||
CHECK_NOTHROW(my_allocator_clean_up(my_json::json_value(t).object));
|
CHECK_NOTHROW(my_allocator_clean_up(my_json::json_value(t).object));
|
||||||
next_construct_fails = true;
|
next_construct_fails = true;
|
||||||
CHECK_THROWS_AS(my_json::json_value(t), std::bad_alloc&);
|
CHECK_THROWS_AS(auto tmp = my_json::json_value(t), std::bad_alloc&);
|
||||||
next_construct_fails = false;
|
next_construct_fails = false;
|
||||||
}
|
}
|
||||||
SECTION("array")
|
SECTION("array")
|
||||||
|
@ -153,7 +154,7 @@ TEST_CASE("controlled bad_alloc")
|
||||||
auto t = my_json::value_t::array;
|
auto t = my_json::value_t::array;
|
||||||
CHECK_NOTHROW(my_allocator_clean_up(my_json::json_value(t).array));
|
CHECK_NOTHROW(my_allocator_clean_up(my_json::json_value(t).array));
|
||||||
next_construct_fails = true;
|
next_construct_fails = true;
|
||||||
CHECK_THROWS_AS(my_json::json_value(t), std::bad_alloc&);
|
CHECK_THROWS_AS(auto tmp = my_json::json_value(t), std::bad_alloc&);
|
||||||
next_construct_fails = false;
|
next_construct_fails = false;
|
||||||
}
|
}
|
||||||
SECTION("string")
|
SECTION("string")
|
||||||
|
@ -162,7 +163,7 @@ TEST_CASE("controlled bad_alloc")
|
||||||
auto t = my_json::value_t::string;
|
auto t = my_json::value_t::string;
|
||||||
CHECK_NOTHROW(my_allocator_clean_up(my_json::json_value(t).string));
|
CHECK_NOTHROW(my_allocator_clean_up(my_json::json_value(t).string));
|
||||||
next_construct_fails = true;
|
next_construct_fails = true;
|
||||||
CHECK_THROWS_AS(my_json::json_value(t), std::bad_alloc&);
|
CHECK_THROWS_AS(auto tmp = my_json::json_value(t), std::bad_alloc&);
|
||||||
next_construct_fails = false;
|
next_construct_fails = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,7 +174,7 @@ TEST_CASE("controlled bad_alloc")
|
||||||
my_json::string_t v("foo");
|
my_json::string_t v("foo");
|
||||||
CHECK_NOTHROW(my_allocator_clean_up(my_json::json_value(v).string));
|
CHECK_NOTHROW(my_allocator_clean_up(my_json::json_value(v).string));
|
||||||
next_construct_fails = true;
|
next_construct_fails = true;
|
||||||
CHECK_THROWS_AS(my_json::json_value(v), std::bad_alloc&);
|
CHECK_THROWS_AS(auto tmp = my_json::json_value(v), std::bad_alloc&);
|
||||||
next_construct_fails = false;
|
next_construct_fails = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -184,9 +185,9 @@ TEST_CASE("controlled bad_alloc")
|
||||||
{
|
{
|
||||||
next_construct_fails = false;
|
next_construct_fails = false;
|
||||||
std::map<std::string, std::string> v {{"foo", "bar"}};
|
std::map<std::string, std::string> v {{"foo", "bar"}};
|
||||||
CHECK_NOTHROW(my_json(v));
|
CHECK_NOTHROW(auto tmp = my_json(v));
|
||||||
next_construct_fails = true;
|
next_construct_fails = true;
|
||||||
CHECK_THROWS_AS(my_json(v), std::bad_alloc&);
|
CHECK_THROWS_AS(auto tmp = my_json(v), std::bad_alloc&);
|
||||||
next_construct_fails = false;
|
next_construct_fails = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -194,9 +195,9 @@ TEST_CASE("controlled bad_alloc")
|
||||||
{
|
{
|
||||||
next_construct_fails = false;
|
next_construct_fails = false;
|
||||||
std::vector<std::string> v {"foo", "bar", "baz"};
|
std::vector<std::string> v {"foo", "bar", "baz"};
|
||||||
CHECK_NOTHROW(my_json(v));
|
CHECK_NOTHROW(auto tmp = my_json(v));
|
||||||
next_construct_fails = true;
|
next_construct_fails = true;
|
||||||
CHECK_THROWS_AS(my_json(v), std::bad_alloc&);
|
CHECK_THROWS_AS(auto tmp = my_json(v), std::bad_alloc&);
|
||||||
next_construct_fails = false;
|
next_construct_fails = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -213,9 +214,9 @@ TEST_CASE("controlled bad_alloc")
|
||||||
{
|
{
|
||||||
next_construct_fails = false;
|
next_construct_fails = false;
|
||||||
std::string s("foo");
|
std::string s("foo");
|
||||||
CHECK_NOTHROW(my_json(s));
|
CHECK_NOTHROW(auto tmp = my_json(s));
|
||||||
next_construct_fails = true;
|
next_construct_fails = true;
|
||||||
CHECK_THROWS_AS(my_json(s), std::bad_alloc&);
|
CHECK_THROWS_AS(auto tmp = my_json(s), std::bad_alloc&);
|
||||||
next_construct_fails = false;
|
next_construct_fails = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,9 +27,10 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
|
|
|
@ -27,11 +27,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
TEST_CASE("BSON")
|
TEST_CASE("BSON")
|
||||||
{
|
{
|
||||||
|
@ -1138,7 +1140,7 @@ TEST_CASE("BSON numerical data")
|
||||||
};
|
};
|
||||||
|
|
||||||
CHECK_THROWS_AS(json::to_bson(j), json::out_of_range&);
|
CHECK_THROWS_AS(json::to_bson(j), json::out_of_range&);
|
||||||
CHECK_THROWS_WITH(json::to_bson(j), "[json.exception.out_of_range.407] integer number " + std::to_string(i) + " cannot be represented by BSON as it does not fit int64");
|
CHECK_THROWS_WITH_STD_STR(json::to_bson(j), "[json.exception.out_of_range.407] integer number " + std::to_string(i) + " cannot be represented by BSON as it does not fit int64");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1146,7 +1148,7 @@ TEST_CASE("BSON numerical data")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("BSON roundtrips", "[hide]")
|
TEST_CASE("BSON roundtrips" * doctest::skip())
|
||||||
{
|
{
|
||||||
SECTION("reference files")
|
SECTION("reference files")
|
||||||
{
|
{
|
||||||
|
@ -1161,8 +1163,8 @@ TEST_CASE("BSON roundtrips", "[hide]")
|
||||||
{
|
{
|
||||||
CAPTURE(filename)
|
CAPTURE(filename)
|
||||||
|
|
||||||
SECTION(filename + ": std::vector<uint8_t>")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": std::vector<uint8_t>");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -1179,8 +1181,8 @@ TEST_CASE("BSON roundtrips", "[hide]")
|
||||||
CHECK(j1 == j2);
|
CHECK(j1 == j2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION(filename + ": std::ifstream")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": std::ifstream");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -1194,8 +1196,8 @@ TEST_CASE("BSON roundtrips", "[hide]")
|
||||||
CHECK(j1 == j2);
|
CHECK(j1 == j2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION(filename + ": uint8_t* and size")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": uint8_t* and size");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -1212,8 +1214,8 @@ TEST_CASE("BSON roundtrips", "[hide]")
|
||||||
CHECK(j1 == j2);
|
CHECK(j1 == j2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION(filename + ": output to output adapters")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": output to output adapters");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -1224,8 +1226,8 @@ TEST_CASE("BSON roundtrips", "[hide]")
|
||||||
(std::istreambuf_iterator<char>(f_bson)),
|
(std::istreambuf_iterator<char>(f_bson)),
|
||||||
std::istreambuf_iterator<char>());
|
std::istreambuf_iterator<char>());
|
||||||
|
|
||||||
SECTION(filename + ": output adapters: std::vector<uint8_t>")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": output adapters: std::vector<uint8_t>");
|
||||||
std::vector<uint8_t> vec;
|
std::vector<uint8_t> vec;
|
||||||
json::to_bson(j1, vec);
|
json::to_bson(j1, vec);
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,12 +27,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
class SaxCountdown
|
class SaxCountdown
|
||||||
{
|
{
|
||||||
|
@ -1586,7 +1589,8 @@ TEST_CASE("single CBOR roundtrip")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("CBOR regressions", "[!throws]")
|
#if not defined(JSON_NOEXCEPTION)
|
||||||
|
TEST_CASE("CBOR regressions")
|
||||||
{
|
{
|
||||||
SECTION("fuzz test results")
|
SECTION("fuzz test results")
|
||||||
{
|
{
|
||||||
|
@ -1655,12 +1659,13 @@ TEST_CASE("CBOR regressions", "[!throws]")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
TEST_CASE("CBOR roundtrips", "[hide]")
|
TEST_CASE("CBOR roundtrips" * doctest::skip())
|
||||||
{
|
{
|
||||||
SECTION("input from flynn")
|
SECTION("input from flynn")
|
||||||
{
|
{
|
||||||
// most of these are exluded due to differences in key order (not a real problem)
|
// most of these are excluded due to differences in key order (not a real problem)
|
||||||
auto exclude_packed = std::set<std::string>
|
auto exclude_packed = std::set<std::string>
|
||||||
{
|
{
|
||||||
"test/data/json.org/1.json",
|
"test/data/json.org/1.json",
|
||||||
|
@ -1827,8 +1832,8 @@ TEST_CASE("CBOR roundtrips", "[hide]")
|
||||||
{
|
{
|
||||||
CAPTURE(filename)
|
CAPTURE(filename)
|
||||||
|
|
||||||
SECTION(filename + ": std::vector<uint8_t>")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": std::vector<uint8_t>");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -1845,8 +1850,8 @@ TEST_CASE("CBOR roundtrips", "[hide]")
|
||||||
CHECK(j1 == j2);
|
CHECK(j1 == j2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION(filename + ": std::ifstream")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": std::ifstream");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -1860,8 +1865,8 @@ TEST_CASE("CBOR roundtrips", "[hide]")
|
||||||
CHECK(j1 == j2);
|
CHECK(j1 == j2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION(filename + ": uint8_t* and size")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": uint8_t* and size");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -1878,8 +1883,8 @@ TEST_CASE("CBOR roundtrips", "[hide]")
|
||||||
CHECK(j1 == j2);
|
CHECK(j1 == j2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION(filename + ": output to output adapters")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": output to output adapters");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -1892,8 +1897,8 @@ TEST_CASE("CBOR roundtrips", "[hide]")
|
||||||
|
|
||||||
if (!exclude_packed.count(filename))
|
if (!exclude_packed.count(filename))
|
||||||
{
|
{
|
||||||
SECTION(filename + ": output adapters: std::vector<uint8_t>")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": output adapters: std::vector<uint8_t>");
|
||||||
std::vector<uint8_t> vec;
|
std::vector<uint8_t> vec;
|
||||||
json::to_cbor(j1, vec);
|
json::to_cbor(j1, vec);
|
||||||
CHECK(vec == packed);
|
CHECK(vec == packed);
|
||||||
|
@ -1904,7 +1909,8 @@ TEST_CASE("CBOR roundtrips", "[hide]")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("all CBOR first bytes", "[!throws]")
|
#if not defined(JSON_NOEXCEPTION)
|
||||||
|
TEST_CASE("all CBOR first bytes")
|
||||||
{
|
{
|
||||||
// these bytes will fail immediately with exception parse_error.112
|
// these bytes will fail immediately with exception parse_error.112
|
||||||
std::set<uint8_t> unsupported =
|
std::set<uint8_t> unsupported =
|
||||||
|
@ -1968,7 +1974,7 @@ TEST_CASE("all CBOR first bytes", "[!throws]")
|
||||||
{
|
{
|
||||||
// check that parse_error.112 is only thrown if the
|
// check that parse_error.112 is only thrown if the
|
||||||
// first byte is in the unsupported set
|
// first byte is in the unsupported set
|
||||||
CAPTURE(e.what())
|
INFO_WITH_TEMP(e.what());
|
||||||
if (std::find(unsupported.begin(), unsupported.end(), byte) != unsupported.end())
|
if (std::find(unsupported.begin(), unsupported.end(), byte) != unsupported.end())
|
||||||
{
|
{
|
||||||
CHECK(e.id == 112);
|
CHECK(e.id == 112);
|
||||||
|
@ -1980,6 +1986,7 @@ TEST_CASE("all CBOR first bytes", "[!throws]")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
TEST_CASE("examples from RFC 7049 Appendix A")
|
TEST_CASE("examples from RFC 7049 Appendix A")
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,11 +27,12 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#define private public
|
#define private public
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
#undef private
|
||||||
|
|
||||||
TEST_CASE("const_iterator class")
|
TEST_CASE("const_iterator class")
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,11 +27,12 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#define private public
|
#define private public
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
#undef private
|
||||||
|
|
||||||
TEST_CASE("iterator class")
|
TEST_CASE("iterator class")
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,11 +27,12 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#define private public
|
#define private public
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
#undef private
|
||||||
|
|
||||||
// shortcut to scan a string literal
|
// shortcut to scan a string literal
|
||||||
json::lexer::token_type scan_string(const char* s);
|
json::lexer::token_type scan_string(const char* s);
|
||||||
|
|
|
@ -27,11 +27,12 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#define private public
|
#define private public
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
#undef private
|
||||||
|
|
||||||
#include <valarray>
|
#include <valarray>
|
||||||
|
|
||||||
|
@ -1105,7 +1106,7 @@ TEST_CASE("parser class")
|
||||||
// only check error message if c is not a control character
|
// only check error message if c is not a control character
|
||||||
if (c > 0x1f)
|
if (c > 0x1f)
|
||||||
{
|
{
|
||||||
CHECK_THROWS_WITH(parser_helper(s.c_str()),
|
CHECK_THROWS_WITH_STD_STR(parser_helper(s.c_str()),
|
||||||
"[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid string: forbidden character after backslash; last read: '\"\\" + std::string(1, static_cast<char>(c)) + "'");
|
"[json.exception.parse_error.101] parse error at line 1, column 3: syntax error while parsing value - invalid string: forbidden character after backslash; last read: '\"\\" + std::string(1, static_cast<char>(c)) + "'");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -1181,7 +1182,7 @@ TEST_CASE("parser class")
|
||||||
// only check error message if c is not a control character
|
// only check error message if c is not a control character
|
||||||
if (c > 0x1f)
|
if (c > 0x1f)
|
||||||
{
|
{
|
||||||
CHECK_THROWS_WITH(parser_helper(s1.c_str()),
|
CHECK_THROWS_WITH_STD_STR(parser_helper(s1.c_str()),
|
||||||
"[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" + s1.substr(0, 7) + "'");
|
"[json.exception.parse_error.101] parse error at line 1, column 7: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" + s1.substr(0, 7) + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1190,7 +1191,7 @@ TEST_CASE("parser class")
|
||||||
// only check error message if c is not a control character
|
// only check error message if c is not a control character
|
||||||
if (c > 0x1f)
|
if (c > 0x1f)
|
||||||
{
|
{
|
||||||
CHECK_THROWS_WITH(parser_helper(s2.c_str()),
|
CHECK_THROWS_WITH_STD_STR(parser_helper(s2.c_str()),
|
||||||
"[json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" + s2.substr(0, 6) + "'");
|
"[json.exception.parse_error.101] parse error at line 1, column 6: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" + s2.substr(0, 6) + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1199,7 +1200,7 @@ TEST_CASE("parser class")
|
||||||
// only check error message if c is not a control character
|
// only check error message if c is not a control character
|
||||||
if (c > 0x1f)
|
if (c > 0x1f)
|
||||||
{
|
{
|
||||||
CHECK_THROWS_WITH(parser_helper(s3.c_str()),
|
CHECK_THROWS_WITH_STD_STR(parser_helper(s3.c_str()),
|
||||||
"[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" + s3.substr(0, 5) + "'");
|
"[json.exception.parse_error.101] parse error at line 1, column 5: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" + s3.substr(0, 5) + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1208,7 +1209,7 @@ TEST_CASE("parser class")
|
||||||
// only check error message if c is not a control character
|
// only check error message if c is not a control character
|
||||||
if (c > 0x1f)
|
if (c > 0x1f)
|
||||||
{
|
{
|
||||||
CHECK_THROWS_WITH(parser_helper(s4.c_str()),
|
CHECK_THROWS_WITH_STD_STR(parser_helper(s4.c_str()),
|
||||||
"[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" + s4.substr(0, 4) + "'");
|
"[json.exception.parse_error.101] parse error at line 1, column 4: syntax error while parsing value - invalid string: '\\u' must be followed by 4 hex digits; last read: '" + s4.substr(0, 4) + "'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,16 +27,18 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#define private public
|
#define private public
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
#undef private
|
||||||
|
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include <forward_list>
|
#include <forward_list>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
#include <set>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <valarray>
|
#include <valarray>
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,11 +27,14 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#define private public
|
#define private public
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
#undef private
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
void check_escaped(const char* original, const char* escaped = "", const bool ensure_ascii = false);
|
void check_escaped(const char* original, const char* escaped = "", const bool ensure_ascii = false);
|
||||||
void check_escaped(const char* original, const char* escaped, const bool ensure_ascii)
|
void check_escaped(const char* original, const char* escaped, const bool ensure_ascii)
|
||||||
|
|
|
@ -27,15 +27,17 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#define private public
|
#define private public
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
#undef private
|
||||||
|
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include <forward_list>
|
#include <forward_list>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
#include <set>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <valarray>
|
#include <valarray>
|
||||||
|
|
|
@ -27,12 +27,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
#include <valarray>
|
#include <valarray>
|
||||||
|
|
||||||
struct SaxEventLogger : public nlohmann::json_sax<json>
|
struct SaxEventLogger : public nlohmann::json_sax<json>
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
@ -985,7 +985,8 @@ TEST_CASE("element access 2")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("element access 2 (throwing tests)", "[!throws]")
|
#if not defined(JSON_NOEXCEPTION)
|
||||||
|
TEST_CASE("element access 2 (throwing tests)")
|
||||||
{
|
{
|
||||||
SECTION("object")
|
SECTION("object")
|
||||||
{
|
{
|
||||||
|
@ -1018,3 +1019,4 @@ TEST_CASE("element access 2 (throwing tests)", "[!throws]")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -27,12 +27,14 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
|
||||||
TEST_CASE("object inspection")
|
TEST_CASE("object inspection")
|
||||||
{
|
{
|
||||||
SECTION("convenience type checker")
|
SECTION("convenience type checker")
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,11 +27,12 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#define private public
|
#define private public
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
#undef private
|
||||||
|
|
||||||
TEST_CASE("iterators 1")
|
TEST_CASE("iterators 1")
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
@ -342,7 +342,7 @@ TEST_CASE("JSON patch")
|
||||||
|
|
||||||
// check that evaluation throws
|
// check that evaluation throws
|
||||||
CHECK_THROWS_AS(doc.patch(patch), json::other_error&);
|
CHECK_THROWS_AS(doc.patch(patch), json::other_error&);
|
||||||
CHECK_THROWS_WITH(doc.patch(patch), "[json.exception.other_error.501] unsuccessful: " + patch[0].dump());
|
CHECK_THROWS_WITH_STD_STR(doc.patch(patch), "[json.exception.other_error.501] unsuccessful: " + patch[0].dump());
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("A.10. Adding a Nested Member Object")
|
SECTION("A.10. Adding a Nested Member Object")
|
||||||
|
@ -483,7 +483,7 @@ TEST_CASE("JSON patch")
|
||||||
|
|
||||||
// check that evaluation throws
|
// check that evaluation throws
|
||||||
CHECK_THROWS_AS(doc.patch(patch), json::other_error&);
|
CHECK_THROWS_AS(doc.patch(patch), json::other_error&);
|
||||||
CHECK_THROWS_WITH(doc.patch(patch), "[json.exception.other_error.501] unsuccessful: " + patch[0].dump());
|
CHECK_THROWS_WITH_STD_STR(doc.patch(patch), "[json.exception.other_error.501] unsuccessful: " + patch[0].dump());
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION("A.16. Adding an Array Value")
|
SECTION("A.16. Adding an Array Value")
|
||||||
|
@ -1182,7 +1182,7 @@ TEST_CASE("JSON patch")
|
||||||
|
|
||||||
// the test will fail
|
// the test will fail
|
||||||
CHECK_THROWS_AS(doc.patch(patch), json::other_error&);
|
CHECK_THROWS_AS(doc.patch(patch), json::other_error&);
|
||||||
CHECK_THROWS_WITH(doc.patch(patch), "[json.exception.other_error.501] unsuccessful: " + patch[0].dump());
|
CHECK_THROWS_WITH_STD_STR(doc.patch(patch), "[json.exception.other_error.501] unsuccessful: " + patch[0].dump());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1268,7 +1268,7 @@ TEST_CASE("JSON patch")
|
||||||
|
|
||||||
for (const auto& test : suite)
|
for (const auto& test : suite)
|
||||||
{
|
{
|
||||||
CAPTURE(test.value("comment", ""))
|
INFO_WITH_TEMP(test.value("comment", ""));
|
||||||
|
|
||||||
// skip tests marked as disabled
|
// skip tests marked as disabled
|
||||||
if (test.value("disabled", false))
|
if (test.value("disabled", false))
|
||||||
|
|
|
@ -27,11 +27,12 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#define private public
|
#define private public
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
#undef private
|
||||||
|
|
||||||
TEST_CASE("JSON pointers")
|
TEST_CASE("JSON pointers")
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,12 +27,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
class SaxCountdown
|
class SaxCountdown
|
||||||
{
|
{
|
||||||
|
@ -1345,7 +1348,7 @@ TEST_CASE("single MessagePack roundtrip")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TEST_CASE("MessagePack roundtrips", "[hide]")
|
TEST_CASE("MessagePack roundtrips" * doctest::skip())
|
||||||
{
|
{
|
||||||
SECTION("input from msgpack-python")
|
SECTION("input from msgpack-python")
|
||||||
{
|
{
|
||||||
|
@ -1519,8 +1522,8 @@ TEST_CASE("MessagePack roundtrips", "[hide]")
|
||||||
{
|
{
|
||||||
CAPTURE(filename)
|
CAPTURE(filename)
|
||||||
|
|
||||||
SECTION(filename + ": std::vector<uint8_t>")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": std::vector<uint8_t>");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -1537,8 +1540,8 @@ TEST_CASE("MessagePack roundtrips", "[hide]")
|
||||||
CHECK(j1 == j2);
|
CHECK(j1 == j2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION(filename + ": std::ifstream")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": std::ifstream");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -1552,8 +1555,8 @@ TEST_CASE("MessagePack roundtrips", "[hide]")
|
||||||
CHECK(j1 == j2);
|
CHECK(j1 == j2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION(filename + ": uint8_t* and size")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": uint8_t* and size");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -1570,8 +1573,8 @@ TEST_CASE("MessagePack roundtrips", "[hide]")
|
||||||
CHECK(j1 == j2);
|
CHECK(j1 == j2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION(filename + ": output to output adapters")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": output to output adapters");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -1584,8 +1587,8 @@ TEST_CASE("MessagePack roundtrips", "[hide]")
|
||||||
|
|
||||||
if (!exclude_packed.count(filename))
|
if (!exclude_packed.count(filename))
|
||||||
{
|
{
|
||||||
SECTION(filename + ": output adapters: std::vector<uint8_t>")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": output adapters: std::vector<uint8_t>");
|
||||||
std::vector<uint8_t> vec;
|
std::vector<uint8_t> vec;
|
||||||
json::to_msgpack(j1, vec);
|
json::to_msgpack(j1, vec);
|
||||||
CHECK(vec == packed);
|
CHECK(vec == packed);
|
||||||
|
|
|
@ -27,7 +27,8 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
@ -35,16 +35,19 @@ using nlohmann::json;
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include <forward_list>
|
#include <forward_list>
|
||||||
#include <list>
|
#include <list>
|
||||||
|
#include <set>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
#include <unordered_set>
|
#include <unordered_set>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
#pragma warning (push)
|
#pragma warning (push)
|
||||||
#pragma warning (disable : 4189) // local variable is initialized but not referenced
|
#pragma warning (disable : 4189) // local variable is initialized but not referenced
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
TEST_CASE("README", "[hide]")
|
TEST_CASE("README" * doctest::skip())
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
// redirect std::cout for the README file
|
// redirect std::cout for the README file
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
|
@ -27,11 +27,20 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
|
// for some reason including this after the json header leads to linker errors with VS 2017...
|
||||||
|
#include <locale>
|
||||||
|
|
||||||
#define private public
|
#define private public
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
#undef private
|
||||||
|
|
||||||
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
|
#include <list>
|
||||||
|
#include <cstdio>
|
||||||
|
|
||||||
#if (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464
|
#if (defined(__cplusplus) && __cplusplus >= 201703L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464
|
||||||
#define JSON_HAS_CPP_17
|
#define JSON_HAS_CPP_17
|
||||||
|
@ -43,10 +52,6 @@ using nlohmann::json;
|
||||||
|
|
||||||
#include "fifo_map.hpp"
|
#include "fifo_map.hpp"
|
||||||
|
|
||||||
#include <fstream>
|
|
||||||
#include <list>
|
|
||||||
#include <cstdio>
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
||||||
// for #972
|
// for #972
|
||||||
/////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
@ -295,8 +300,7 @@ TEST_CASE("regression tests")
|
||||||
nlohmann::basic_json<std::map, std::vector, std::string, bool, int32_t, uint32_t, float>;
|
nlohmann::basic_json<std::map, std::vector, std::string, bool, int32_t, uint32_t, float>;
|
||||||
custom_json j;
|
custom_json j;
|
||||||
j["int_1"] = 1;
|
j["int_1"] = 1;
|
||||||
// we need to cast to int to compile with Catch - the value is int32_t
|
CHECK(j["int_1"] == 1);
|
||||||
CHECK(static_cast<int>(j["int_1"]) == 1);
|
|
||||||
|
|
||||||
// tests for correct handling of non-standard integers that overflow the type selected by the user
|
// tests for correct handling of non-standard integers that overflow the type selected by the user
|
||||||
|
|
||||||
|
@ -1710,7 +1714,8 @@ TEST_CASE("regression tests")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("regression tests, exceptions dependent", "[!throws]")
|
#if not defined(JSON_NOEXCEPTION)
|
||||||
|
TEST_CASE("regression tests, exceptions dependent")
|
||||||
{
|
{
|
||||||
SECTION("issue #1340 - eof not set on exhausted input stream")
|
SECTION("issue #1340 - eof not set on exhausted input stream")
|
||||||
{
|
{
|
||||||
|
@ -1722,3 +1727,4 @@ TEST_CASE("regression tests, exceptions dependent", "[!throws]")
|
||||||
CHECK(s.eof());
|
CHECK(s.eof());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -27,11 +27,14 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
||||||
|
#include <sstream>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
TEST_CASE("serialization")
|
TEST_CASE("serialization")
|
||||||
{
|
{
|
||||||
SECTION("operator<<")
|
SECTION("operator<<")
|
||||||
|
|
|
@ -27,7 +27,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
@ -457,7 +457,7 @@ TEST_CASE("RFC 7159 examples")
|
||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
|
|
||||||
CHECK_NOTHROW(json(json_contents));
|
CHECK_NOTHROW(auto tmp = json(json_contents));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
|
@ -484,7 +484,7 @@ TEST_CASE("RFC 7159 examples")
|
||||||
"Country": "US"
|
"Country": "US"
|
||||||
}
|
}
|
||||||
])";
|
])";
|
||||||
CHECK_NOTHROW(json(json_contents));
|
CHECK_NOTHROW(auto tmp = json(json_contents));
|
||||||
}
|
}
|
||||||
|
|
||||||
CHECK(json::parse("\"Hello world!\"") == json("Hello world!"));
|
CHECK(json::parse("\"Hello world!\"") == json("Hello world!"));
|
||||||
|
|
|
@ -31,7 +31,7 @@ SOFTWARE.
|
||||||
// Only compile these tests if 'float' and 'double' are IEEE-754 single- and
|
// Only compile these tests if 'float' and 'double' are IEEE-754 single- and
|
||||||
// double-precision numbers, resp.
|
// double-precision numbers, resp.
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::detail::dtoa_impl::reinterpret_bits;
|
using nlohmann::detail::dtoa_impl::reinterpret_bits;
|
||||||
|
|
|
@ -27,12 +27,13 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
class SaxCountdown
|
class SaxCountdown
|
||||||
{
|
{
|
||||||
|
@ -2113,7 +2114,8 @@ TEST_CASE("Universal Binary JSON Specification Examples 1")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("all UBJSON first bytes", "[!throws]")
|
#if not defined(JSON_NOEXCEPTION)
|
||||||
|
TEST_CASE("all UBJSON first bytes")
|
||||||
{
|
{
|
||||||
// these bytes will fail immediately with exception parse_error.112
|
// these bytes will fail immediately with exception parse_error.112
|
||||||
std::set<uint8_t> supported =
|
std::set<uint8_t> supported =
|
||||||
|
@ -2134,7 +2136,7 @@ TEST_CASE("all UBJSON first bytes", "[!throws]")
|
||||||
{
|
{
|
||||||
// check that parse_error.112 is only thrown if the
|
// check that parse_error.112 is only thrown if the
|
||||||
// first byte is not in the supported set
|
// first byte is not in the supported set
|
||||||
CAPTURE(e.what())
|
INFO_WITH_TEMP(e.what());
|
||||||
if (std::find(supported.begin(), supported.end(), byte) == supported.end())
|
if (std::find(supported.begin(), supported.end(), byte) == supported.end())
|
||||||
{
|
{
|
||||||
CHECK(e.id == 112);
|
CHECK(e.id == 112);
|
||||||
|
@ -2146,8 +2148,9 @@ TEST_CASE("all UBJSON first bytes", "[!throws]")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
TEST_CASE("UBJSON roundtrips", "[hide]")
|
TEST_CASE("UBJSON roundtrips" * doctest::skip())
|
||||||
{
|
{
|
||||||
SECTION("input from self-generated UBJSON files")
|
SECTION("input from self-generated UBJSON files")
|
||||||
{
|
{
|
||||||
|
@ -2199,8 +2202,8 @@ TEST_CASE("UBJSON roundtrips", "[hide]")
|
||||||
{
|
{
|
||||||
CAPTURE(filename)
|
CAPTURE(filename)
|
||||||
|
|
||||||
SECTION(filename + ": std::vector<uint8_t>")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": std::vector<uint8_t>");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -2217,8 +2220,8 @@ TEST_CASE("UBJSON roundtrips", "[hide]")
|
||||||
CHECK(j1 == j2);
|
CHECK(j1 == j2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION(filename + ": std::ifstream")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": std::ifstream");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -2232,8 +2235,8 @@ TEST_CASE("UBJSON roundtrips", "[hide]")
|
||||||
CHECK(j1 == j2);
|
CHECK(j1 == j2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION(filename + ": uint8_t* and size")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": uint8_t* and size");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -2250,8 +2253,8 @@ TEST_CASE("UBJSON roundtrips", "[hide]")
|
||||||
CHECK(j1 == j2);
|
CHECK(j1 == j2);
|
||||||
}
|
}
|
||||||
|
|
||||||
SECTION(filename + ": output to output adapters")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": output to output adapters");
|
||||||
// parse JSON file
|
// parse JSON file
|
||||||
std::ifstream f_json(filename);
|
std::ifstream f_json(filename);
|
||||||
json j1 = json::parse(f_json);
|
json j1 = json::parse(f_json);
|
||||||
|
@ -2262,8 +2265,8 @@ TEST_CASE("UBJSON roundtrips", "[hide]")
|
||||||
(std::istreambuf_iterator<char>(f_ubjson)),
|
(std::istreambuf_iterator<char>(f_ubjson)),
|
||||||
std::istreambuf_iterator<char>());
|
std::istreambuf_iterator<char>());
|
||||||
|
|
||||||
SECTION(filename + ": output adapters: std::vector<uint8_t>")
|
|
||||||
{
|
{
|
||||||
|
INFO_WITH_TEMP(filename + ": output adapters: std::vector<uint8_t>");
|
||||||
std::vector<uint8_t> vec;
|
std::vector<uint8_t> vec;
|
||||||
json::to_ubjson(j1, vec);
|
json::to_ubjson(j1, vec);
|
||||||
CHECK(vec == packed);
|
CHECK(vec == packed);
|
||||||
|
|
|
@ -27,10 +27,9 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
||||||
#include <array>
|
#include <array>
|
||||||
|
@ -236,7 +235,7 @@ void from_json(const nlohmann::json& j, contact_book& cb)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("basic usage", "[udt]")
|
TEST_CASE("basic usage" * doctest::test_suite("udt"))
|
||||||
{
|
{
|
||||||
|
|
||||||
// a bit narcissic maybe :) ?
|
// a bit narcissic maybe :) ?
|
||||||
|
@ -392,7 +391,7 @@ struct adl_serializer<udt::legacy_type>
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("adl_serializer specialization", "[udt]")
|
TEST_CASE("adl_serializer specialization" * doctest::test_suite("udt"))
|
||||||
{
|
{
|
||||||
SECTION("partial specialization")
|
SECTION("partial specialization")
|
||||||
{
|
{
|
||||||
|
@ -468,7 +467,7 @@ struct adl_serializer<std::vector<float>>
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("even supported types can be specialized", "[udt]")
|
TEST_CASE("even supported types can be specialized" * doctest::test_suite("udt"))
|
||||||
{
|
{
|
||||||
json j = std::vector<float> {1.0, 2.0, 3.0};
|
json j = std::vector<float> {1.0, 2.0, 3.0};
|
||||||
CHECK(j.dump() == R"("hijacked!")");
|
CHECK(j.dump() == R"("hijacked!")");
|
||||||
|
@ -509,7 +508,7 @@ struct adl_serializer<std::unique_ptr<T>>
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("Non-copyable types", "[udt]")
|
TEST_CASE("Non-copyable types" * doctest::test_suite("udt"))
|
||||||
{
|
{
|
||||||
SECTION("to_json")
|
SECTION("to_json")
|
||||||
{
|
{
|
||||||
|
@ -651,7 +650,7 @@ std::ostream& operator<<(std::ostream& os, small_pod l)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("custom serializer for pods", "[udt]")
|
TEST_CASE("custom serializer for pods" * doctest::test_suite("udt"))
|
||||||
{
|
{
|
||||||
using custom_json =
|
using custom_json =
|
||||||
nlohmann::basic_json<std::map, std::vector, std::string, bool,
|
nlohmann::basic_json<std::map, std::vector, std::string, bool,
|
||||||
|
@ -692,7 +691,7 @@ struct another_adl_serializer
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
TEST_CASE("custom serializer that does adl by default", "[udt]")
|
TEST_CASE("custom serializer that does adl by default" * doctest::test_suite("udt"))
|
||||||
{
|
{
|
||||||
using json = nlohmann::json;
|
using json = nlohmann::json;
|
||||||
|
|
||||||
|
@ -798,7 +797,7 @@ template <typename T>
|
||||||
struct is_constructible_patched<T, decltype(void(json(std::declval<T>())))> : std::true_type {};
|
struct is_constructible_patched<T, decltype(void(json(std::declval<T>())))> : std::true_type {};
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("an incomplete type does not trigger a compiler error in non-evaluated context", "[udt]")
|
TEST_CASE("an incomplete type does not trigger a compiler error in non-evaluated context" * doctest::test_suite("udt"))
|
||||||
{
|
{
|
||||||
static_assert(not is_constructible_patched<json, incomplete>::value, "");
|
static_assert(not is_constructible_patched<json, incomplete>::value, "");
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,14 +27,20 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
|
// for some reason including this after the json header leads to linker errors with VS 2017...
|
||||||
|
#include <locale>
|
||||||
|
|
||||||
#define private public
|
#define private public
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
#undef private
|
||||||
|
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#include <sstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <iomanip>
|
||||||
|
|
||||||
extern size_t calls;
|
extern size_t calls;
|
||||||
size_t calls = 0;
|
size_t calls = 0;
|
||||||
|
@ -160,7 +166,7 @@ void check_utf8string(bool success_expected, int byte1, int byte2 = -1, int byte
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("Unicode", "[hide]")
|
TEST_CASE("Unicode" * doctest::skip())
|
||||||
{
|
{
|
||||||
SECTION("RFC 3629")
|
SECTION("RFC 3629")
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,10 +27,9 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
|
|
||||||
using nlohmann::json;
|
using nlohmann::json;
|
||||||
|
|
||||||
bool wstring_is_utf16();
|
bool wstring_is_utf16();
|
||||||
|
|
|
@ -27,5 +27,5 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define CATCH_CONFIG_MAIN
|
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
|
||||||
#include "catch.hpp"
|
#include "doctest_compatibility.h"
|
||||||
|
|
23
test/thirdparty/catch/LICENSE_1_0.txt
vendored
23
test/thirdparty/catch/LICENSE_1_0.txt
vendored
|
@ -1,23 +0,0 @@
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person or organization
|
|
||||||
obtaining a copy of the software and accompanying documentation covered by
|
|
||||||
this license (the "Software") to use, reproduce, display, distribute,
|
|
||||||
execute, and transmit the Software, and to prepare derivative works of the
|
|
||||||
Software, and to permit third-parties to whom the Software is furnished to
|
|
||||||
do so, all subject to the following:
|
|
||||||
|
|
||||||
The copyright notices in the Software and this entire statement, including
|
|
||||||
the above license grant, this restriction and the following disclaimer,
|
|
||||||
must be included in all copies of the Software, in whole or in part, and
|
|
||||||
all derivative works of the Software, unless such copies or derivative
|
|
||||||
works are solely in the form of machine-executable object code generated by
|
|
||||||
a source language processor.
|
|
||||||
|
|
||||||
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, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
|
||||||
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
|
||||||
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
|
||||||
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
|
||||||
DEALINGS IN THE SOFTWARE.
|
|
11689
test/thirdparty/catch/catch.hpp
vendored
11689
test/thirdparty/catch/catch.hpp
vendored
File diff suppressed because it is too large
Load diff
21
test/thirdparty/doctest/LICENSE.txt
vendored
Normal file
21
test/thirdparty/doctest/LICENSE.txt
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2016-2018 Viktor Kirilov
|
||||||
|
|
||||||
|
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.
|
5269
test/thirdparty/doctest/doctest.h
vendored
Normal file
5269
test/thirdparty/doctest/doctest.h
vendored
Normal file
File diff suppressed because it is too large
Load diff
35
test/thirdparty/doctest/doctest_compatibility.h
vendored
Normal file
35
test/thirdparty/doctest/doctest_compatibility.h
vendored
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#ifndef DOCTEST_COMPATIBILITY
|
||||||
|
#define DOCTEST_COMPATIBILITY
|
||||||
|
|
||||||
|
#include "doctest.h"
|
||||||
|
|
||||||
|
// Catch doesn't require a semicolon after CAPTURE but doctest does
|
||||||
|
#undef CAPTURE
|
||||||
|
#define CAPTURE(x) DOCTEST_CAPTURE(x);
|
||||||
|
|
||||||
|
// Sections from Catch are called Subcases in doctest and don't work with std::string by default
|
||||||
|
#undef SUBCASE
|
||||||
|
#define SECTION(x) DOCTEST_SUBCASE(x)
|
||||||
|
|
||||||
|
// convenience macro around INFO since it doesn't support temporaries (it is optimized to avoid allocations for runtime speed)
|
||||||
|
#define INFO_WITH_TEMP_IMPL(x, var_name) const auto var_name = x; INFO(var_name) // lvalue!
|
||||||
|
#define INFO_WITH_TEMP(x) INFO_WITH_TEMP_IMPL(x, DOCTEST_ANONYMOUS(DOCTEST_STD_STRING_))
|
||||||
|
|
||||||
|
// doctest doesn't support THROWS_WITH for std::string out of the box (has to include <string>...)
|
||||||
|
#define CHECK_THROWS_WITH_STD_STR_IMPL(expr, str, var_name) \
|
||||||
|
do { \
|
||||||
|
std::string var_name = str; \
|
||||||
|
CHECK_THROWS_WITH(expr, var_name.c_str()); \
|
||||||
|
} while (false)
|
||||||
|
#define CHECK_THROWS_WITH_STD_STR(expr, str) \
|
||||||
|
CHECK_THROWS_WITH_STD_STR_IMPL(expr, str, DOCTEST_ANONYMOUS(DOCTEST_STD_STRING_))
|
||||||
|
|
||||||
|
// included here because for some tests in the json repository private is defined as
|
||||||
|
// public and if no STL header is included before that then in the json include when STL
|
||||||
|
// stuff is included the MSVC STL complains (errors) that C++ keywords are being redefined
|
||||||
|
#include <iosfwd>
|
||||||
|
|
||||||
|
// Catch does this by default
|
||||||
|
using doctest::Approx;
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in a new issue