diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 73138303..428bfbae 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,89 +1,57 @@ +############################################################################# +# Catch library with the main function to speed up build +############################################################################# + add_library(catch_main OBJECT "src/unit.cpp" ) set_target_properties(catch_main PROPERTIES CXX_STANDARD 11 CXX_STANDARD_REQUIRED ON + COMPILE_DEFINITIONS "$<$:_SCL_SECURE_NO_WARNINGS>" + COMPILE_OPTIONS "$<$:/EHsc;$<$:/Od>>" ) target_include_directories(catch_main PRIVATE "thirdparty/catch") -# The unit test executable. -set(JSON_UNITTEST_TARGET_NAME "json_unit") -add_executable(${JSON_UNITTEST_TARGET_NAME} - $ - "../src/json.hpp" - "src/unit-algorithms.cpp" - "src/unit-allocator.cpp" - "src/unit-capacity.cpp" - "src/unit-cbor.cpp" - "src/unit-class_const_iterator.cpp" - "src/unit-class_iterator.cpp" - "src/unit-class_lexer.cpp" - "src/unit-class_parser.cpp" - "src/unit-comparison.cpp" - "src/unit-concepts.cpp" - "src/unit-constructor1.cpp" - "src/unit-constructor2.cpp" - "src/unit-convenience.cpp" - "src/unit-conversions.cpp" - "src/unit-deserialization.cpp" - "src/unit-element_access1.cpp" - "src/unit-element_access2.cpp" - "src/unit-inspection.cpp" - "src/unit-iterator_wrapper.cpp" - "src/unit-iterators1.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-noexcept.cpp" - "src/unit-pointer_access.cpp" - "src/unit-readme.cpp" - "src/unit-reference_access.cpp" - "src/unit-regression.cpp" - "src/unit-serialization.cpp" - "src/unit-testsuites.cpp" - "src/unit-udt.cpp" - "src/unit-unicode.cpp" -) +############################################################################# +# one executable for each unit test file +############################################################################# -set_target_properties(${JSON_UNITTEST_TARGET_NAME} PROPERTIES - CXX_STANDARD 11 - CXX_STANDARD_REQUIRED ON -) +file(GLOB files "src/unit-*.cpp") +foreach(file ${files}) + get_filename_component(file_basename ${file} NAME_WE) + string(REGEX REPLACE "unit-([^$]+)" "test-\\1" testcase ${file_basename}) -if(MSVC) - set_target_properties(${JSON_UNITTEST_TARGET_NAME} PROPERTIES - COMPILE_DEFINITIONS "_SCL_SECURE_NO_WARNINGS" - COMPILE_OPTIONS "/EHsc;$<$:/Od>" + add_executable(${testcase} $ ${file}) + set_target_properties(${testcase} PROPERTIES + CXX_STANDARD 11 + CXX_STANDARD_REQUIRED ON + COMPILE_DEFINITIONS "$<$:_SCL_SECURE_NO_WARNINGS>" + COMPILE_OPTIONS "$<$:/EHsc;$<$:/Od>>" ) -endif() -target_include_directories(${JSON_UNITTEST_TARGET_NAME} PRIVATE "src" "thirdparty/catch") -target_link_libraries(${JSON_UNITTEST_TARGET_NAME} ${JSON_TARGET_NAME}) + target_compile_definitions(${testcase} PRIVATE CATCH_CONFIG_FAST_COMPILE) + target_include_directories(${testcase} PRIVATE "thirdparty/catch") + target_link_libraries(${testcase} ${JSON_TARGET_NAME}) -include(cotire OPTIONAL) - -if(COMMAND cotire) - set_target_properties(${JSON_UNITTEST_TARGET_NAME} PROPERTIES - COTIRE_ADD_UNITY_BUILD FALSE - COTIRE_CXX_PREFIX_HEADER_INIT "src/prefix.hpp" - ) - # HACK - CMAKE_INCLUDE_SYSTEM_FLAG_CXX has a trailing space, which Cotire doesn't strip - # Technically, this fix should go in cotire.cmake. TODO - submit a pull request upstream. - if (CMAKE_INCLUDE_SYSTEM_FLAG_CXX) - string (STRIP "${CMAKE_INCLUDE_SYSTEM_FLAG_CXX}" CMAKE_INCLUDE_SYSTEM_FLAG_CXX) + if(NOT MSVC) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated -Wno-float-equal") endif() - cotire(${JSON_UNITTEST_TARGET_NAME}) -endif() -add_test(NAME "${JSON_UNITTEST_TARGET_NAME}_default" - COMMAND ${JSON_UNITTEST_TARGET_NAME} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} -) -add_test(NAME "${JSON_UNITTEST_TARGET_NAME}_all" - COMMAND ${JSON_UNITTEST_TARGET_NAME} "*" - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} -) + include(cotire OPTIONAL) + if(COMMAND cotire) + cotire(${testcase}) + endif() + + add_test(NAME "${testcase}_default" + COMMAND ${testcase} + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + set_tests_properties("${testcase}_default" PROPERTIES LABELS "default") + + add_test(NAME "${testcase}_all" + COMMAND ${testcase} "*" + WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} + ) + set_tests_properties("${testcase}_all" PROPERTIES LABELS "all") +endforeach()