diff --git a/CMakeLists.txt b/CMakeLists.txt --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,4 +16,8 @@ set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK ccache) endif(CCACHE_FOUND) +# Add the magic taret check and check-all +add_custom_target(check-all) +add_custom_target(check) + add_subdirectory(src) diff --git a/cmake/modules/TestSuite.cmake b/cmake/modules/TestSuite.cmake new file mode 100644 --- /dev/null +++ b/cmake/modules/TestSuite.cmake @@ -0,0 +1,18 @@ +# Allow to easily build test suites + +macro(create_test_suite NAME) + enable_testing() + set(TARGET "check-${NAME}") + add_custom_target(${TARGET} COMMAND ${CMAKE_CTEST_COMMAND}) + + # If the magic target check-all exists, attach to it. + if(TARGET check-all) + add_dependencies(check-all ${TARGET}) + endif() +endmacro(create_test_suite) + +function(add_test_to_suite SUITE NAME) + add_executable(${NAME} EXCLUDE_FROM_ALL ${ARGN}) + add_test(${NAME} ${NAME} COMMAND ${NAME}) + add_dependencies("check-${SUITE}" ${NAME}) +endfunction(add_test_to_suite) diff --git a/src/leveldb/CMakeLists.txt b/src/leveldb/CMakeLists.txt --- a/src/leveldb/CMakeLists.txt +++ b/src/leveldb/CMakeLists.txt @@ -172,9 +172,11 @@ option(LEVELDB_BUILD_TESTS "Build LevelDB's unit tests" ON) if(LEVELDB_BUILD_TESTS) - enable_testing() + include(TestSuite) + create_test_suite(leveldb) add_library(leveldb_test_base + EXCLUDE_FROM_ALL util/testharness.cc util/testutil.cc ) @@ -182,9 +184,8 @@ target_link_libraries(leveldb_test_base leveldb) function(create_leveldb_test NAME FILES) - add_executable(${NAME} ${FILES}) + add_test_to_suite(leveldb ${NAME} EXCLUDE_FROM_ALL ${FILES}) target_link_libraries(${NAME} leveldb_test_base) - add_test(NAME ${NAME} COMMAND ${NAME}) endfunction() create_leveldb_test(autocompact_test db/autocompact_test.cc) diff --git a/src/secp256k1/CMakeLists.txt b/src/secp256k1/CMakeLists.txt --- a/src/secp256k1/CMakeLists.txt +++ b/src/secp256k1/CMakeLists.txt @@ -87,12 +87,12 @@ # Tests option(SECP256K1_BUILD_TEST "Build secp256k1's unit tests" ON) if(SECP256K1_BUILD_TEST) - enable_testing() + include(TestSuite) + create_test_suite(secp256k1) function(create_secp256k1_test NAME FILES) - add_executable(${NAME} ${FILES}) + add_test_to_suite(secp256k1 ${NAME} EXCLUDE_FROM_ALL ${FILES}) target_link_libraries(${NAME} secp256k1) - add_test(NAME ${NAME} COMMAND ${NAME}) target_compile_definitions(${NAME} PRIVATE HAVE_CONFIG_H) endfunction() diff --git a/src/test/CMakeLists.txt b/src/test/CMakeLists.txt --- a/src/test/CMakeLists.txt +++ b/src/test/CMakeLists.txt @@ -47,7 +47,11 @@ data/sighash.json ) -add_executable(test_bitcoin +include(TestSuite) +create_test_suite(bitcoin) +add_dependencies(check check-bitcoin) + +add_test_to_suite(bitcoin test_bitcoin arith_uint256_tests.cpp addrman_tests.cpp amount_tests.cpp diff --git a/src/univalue/CMakeLists.txt b/src/univalue/CMakeLists.txt --- a/src/univalue/CMakeLists.txt +++ b/src/univalue/CMakeLists.txt @@ -21,27 +21,26 @@ ) if(UNIVALUE_BUILD_TESTS) - enable_testing() + include(TestSuite) + create_test_suite(univalue) - add_executable(unitester_test test/unitester.cpp) - add_test(NAME unitester_test COMMAND unitester_tests) - target_link_libraries(unitester_test univalue) + function(create_univalue_test NAME FILES) + add_test_to_suite(univalue ${NAME} ${FILES}) + target_link_libraries(${NAME} univalue) + endfunction() + create_univalue_test(unitester_test test/unitester.cpp) target_compile_definitions(unitester_test PUBLIC JSON_TEST_SRC="${PROJECT_SOURCE_DIR}/test" ) - add_executable(json_test test/test_json.cpp) - add_test(NAME json_test COMMAND json_test) - target_link_libraries(json_test univalue) - - add_executable(no_nul_test test/no_nul.cpp) - add_test(NAME no_nul_test COMMAND no_nul_test) - target_link_libraries(no_nul_test univalue) + create_univalue_test(no_nul_test test/no_nul.cpp) + create_univalue_test(object_test test/object.cpp) - add_executable(object_test test/object.cpp) - add_test(NAME object_test COMMAND object_test) - target_link_libraries(object_test univalue) + # test_json is not meant to run in an automated test suite. + add_executable(json_test EXCLUDE_FROM_ALL test/test_json.cpp) + target_link_libraries(json_test univalue) + add_dependencies(check-univalue json_test) endif(UNIVALUE_BUILD_TESTS) # Generate lib/univalue_escapes.h