diff --git a/CMakeLists.txt b/CMakeLists.txt index d8fca87f5c5a90e033c35d80e7cc0f203873f0da..06e303457b09212e17e67f2474a0a596a28598bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,7 +37,7 @@ include(CheckCompiler) include(BornAgainConfiguration) include(GeneratePythonDocs) include(FuTestMacros) -include(UnitTests) +include(GoogletestWrapper) #--- Recurse into the given subdirectories --- if(BORNAGAIN_USERMANUAL) @@ -59,5 +59,6 @@ add_subdirectory(Tests/FunctionalTests) # functional tests (make check) add_subdirectory(cmake/bornagain) # trick to print an after-install message -# packaging +#--- Make test and package targets --- +add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}) # => 'make check' is an alias for 'ctest' include(BornAgainCPack) diff --git a/Tests/FunctionalTests/CMakeLists.txt b/Tests/FunctionalTests/CMakeLists.txt index 0dccfb406955a97b810a49153bd3af5424c3d7bc..449ff65f2b2c2278eac366aba7018b097a058004 100644 --- a/Tests/FunctionalTests/CMakeLists.txt +++ b/Tests/FunctionalTests/CMakeLists.txt @@ -2,9 +2,6 @@ # FunctionalTests/CMakeLists.txt (called from top-level CMakeLists.txt) ############################################################################ -add_custom_target(check ${CMAKE_CTEST_COMMAND}) -# export CTEST_OUTPUT_ON_FAILURE=ON will give some output on failure - execute_process( COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_SOURCE_DIR}/Tests/ReferenceData/BornAgain ${CMAKE_BINARY_DIR}/Tests/ReferenceData/BornAgain ) diff --git a/Tests/UnitTests/Core/CMakeLists.txt b/Tests/UnitTests/Core/CMakeLists.txt index e5cb839be2c3835f1ab84e0bff38465ecad6f9ba..b23df84b6608a84950d2d90f7b7bc23a1e926c26 100644 --- a/Tests/UnitTests/Core/CMakeLists.txt +++ b/Tests/UnitTests/Core/CMakeLists.txt @@ -16,13 +16,14 @@ endif() # function UNIT_TESTS defined in cmake/modules/UnitTests.cmake -UNIT_TESTS(TestCoreQ "Q" ${BornAgainCore_LIBRARY}) # q loops, lengthy output -UNIT_TESTS(TestCoreP "P" ${BornAgainCore_LIBRARY}) # q loops, lengthy output -UNIT_TESTS(TestCore0 "0" ${BornAgainCore_LIBRARY}) -UNIT_TESTS(TestCore1 "1" ${BornAgainCore_LIBRARY}) -UNIT_TESTS(TestCore2 "2" ${BornAgainCore_LIBRARY}) -UNIT_TESTS(TestCore3 "3" ${BornAgainCore_LIBRARY}) -UNIT_TESTS(TestCore4 "4" ${BornAgainCore_LIBRARY}) -UNIT_TESTS(TestCore5 "5" ${BornAgainCore_LIBRARY}) -UNIT_TESTS(TestCore6 "6" ${BornAgainCore_LIBRARY}) -UNIT_TESTS(TestCoreS "S" ${BornAgainCore_LIBRARY}) +WRAP_GTEST(TestCore0 "0" ${BornAgainCore_LIBRARY} 0) +WRAP_GTEST(TestCore1 "1" ${BornAgainCore_LIBRARY} 0) +WRAP_GTEST(TestCore2 "2" ${BornAgainCore_LIBRARY} 0) +WRAP_GTEST(TestCore3 "3" ${BornAgainCore_LIBRARY} 0) +WRAP_GTEST(TestCore4 "4" ${BornAgainCore_LIBRARY} 0) +WRAP_GTEST(TestCore5 "5" ${BornAgainCore_LIBRARY} 0) +WRAP_GTEST(TestCore6 "6" ${BornAgainCore_LIBRARY} 0) + +WRAP_GTEST(TestCoreS "S" ${BornAgainCore_LIBRARY} 1) +WRAP_GTEST(TestCoreQ "Q" ${BornAgainCore_LIBRARY} 1) # q loops, lengthy output +WRAP_GTEST(TestCoreP "P" ${BornAgainCore_LIBRARY} 1) # q loops, lengthy output diff --git a/Tests/UnitTests/Fit/CMakeLists.txt b/Tests/UnitTests/Fit/CMakeLists.txt index 9042a7e71a2335509a0e81dcb4976f82dd6490d9..02a9b95224b7e47aebabaaa6885c951c97b9df21 100644 --- a/Tests/UnitTests/Fit/CMakeLists.txt +++ b/Tests/UnitTests/Fit/CMakeLists.txt @@ -14,6 +14,4 @@ if(BORNAGAIN_OPENMPI) include_directories(${MPI_INCLUDE_PATH}) endif() -# function UNIT_TESTS defined in cmake/modules/UnitTests.cmake - -UNIT_TESTS(TestFit0 "." ${BornAgainFit_LIBRARY}) +WRAP_GTEST(TestFit0 "." ${BornAgainFit_LIBRARY} 0) diff --git a/cmake/bornagain/modules/FuTestMacros.cmake b/cmake/bornagain/modules/FuTestMacros.cmake index 52a85548b605c4e654ef274ed2cc4238748fb5b0..eb5211b89ee3c92038c1a75ec7e138a160296fbd 100644 --- a/cmake/bornagain/modules/FuTestMacros.cmake +++ b/cmake/bornagain/modules/FuTestMacros.cmake @@ -74,5 +74,4 @@ endfunction() function(BORNAGAIN_ADD_TEST test_name test_exe) cmake_parse_arguments(ARG "" "TEST_ARGUMENTS" "" "" ${ARGN}) add_test(${test_name} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${test_exe} "${ARG_TEST_ARGUMENTS}") - add_dependencies(check ${test_exe}) endfunction() diff --git a/cmake/bornagain/modules/UnitTests.cmake b/cmake/bornagain/modules/GoogletestWrapper.cmake similarity index 71% rename from cmake/bornagain/modules/UnitTests.cmake rename to cmake/bornagain/modules/GoogletestWrapper.cmake index db11967c3b8210c573021285140951cc09c8fe44..540e5c6fca844ab3ad7e4413463d6fc5ce6886ba 100644 --- a/cmake/bornagain/modules/UnitTests.cmake +++ b/cmake/bornagain/modules/GoogletestWrapper.cmake @@ -2,8 +2,8 @@ # # BornAgain: simulate and fit scattering at grazing incidence # -# @file cmake/modules/UnitTests -# @brief Implements function UNIT_TESTS(..) +# @file cmake/bornagain/modules/GoogletestWrapper.cmake +# @brief Implements function WRAP_GTEST(..) # # @homepage http://www.bornagainproject.org # @license GNU General Public License v3 or higher (see COPYING) @@ -15,7 +15,10 @@ # @brief Compile tests given as .h files in SUBDIR, link with LINK_LIB, and execute -function(UNIT_TESTS TEST_NAME SUBDIR LINK_LIB) +# STAGE=0: test run at compile time +# STAGE=1: test run upon "ctest"="make check" + +function(WRAP_GTEST TEST_NAME SUBDIR LINK_LIB STAGE) include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR}) file(GLOB INCLUDE_FILES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "${SUBDIR}/*.h") @@ -23,12 +26,12 @@ function(UNIT_TESTS TEST_NAME SUBDIR LINK_LIB) # Compose main program (C++ snippets plus #include's of test code from SUBDIR) set(TMP "/* Generated by CMake. Do not edit. Do not put under version control. */\n") - file(READ "${TEMPLATE_DIR}/unitTests.cpp.header" TMPTMP) + file(READ "${TEMPLATE_DIR}/GoogletestHeader.cpp" TMPTMP) set(TMP "${TMP}\n${TMPTMP}\n") foreach(FILE ${INCLUDE_FILES}) set(TMP "${TMP}#include \"${CMAKE_CURRENT_SOURCE_DIR}/${FILE}\"\n") endforeach() - file(READ "${TEMPLATE_DIR}/unitTests.cpp.footer" TMPTMP) + file(READ "${TEMPLATE_DIR}/GoogletestFooter.cpp" TMPTMP) set(TMP "${TMP}\n${TMPTMP}") set(TEST_SRC "${BUILD_AUTO_DIR}/${TEST_NAME}.cpp") @@ -42,10 +45,14 @@ function(UNIT_TESTS TEST_NAME SUBDIR LINK_LIB) # to prevent problems with finding libBornAgainCore.dll under Windows set_property(TARGET ${EXE} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) - add_test(${TEST_NAME} ${EXE}) - - # Add execution of TestCore just after compilation - add_custom_command(TARGET ${TEST_NAME} POST_BUILD COMMAND ${EXE}) + if (${STAGE} EQUAL 0) + # Add execution of TestCore just after compilation + add_custom_command(TARGET ${TEST_NAME} POST_BUILD COMMAND ${EXE}) + elseif(${STAGE} EQUAL 1) + add_test(${TEST_NAME} ${EXE}) + else() + message(FATAL_ERROR "invalid parameter STAGE=${STAGE} in WRAP_GTEST") + endif() # To make the .h files appear in QtCreator's project tree add_custom_target("${TEST_NAME}_sources" SOURCES ${INCLUDE_FILES}) diff --git a/cmake/bornagain/scripts/unitTests.cpp.footer b/cmake/bornagain/scripts/GoogletestFooter.cpp similarity index 87% rename from cmake/bornagain/scripts/unitTests.cpp.footer rename to cmake/bornagain/scripts/GoogletestFooter.cpp index 8d131ad6d166a300f49b7cee44631e60fd1f6b30..496e790edd87d1b44d26c1ea2aeccd07e3297ea6 100644 --- a/cmake/bornagain/scripts/unitTests.cpp.footer +++ b/cmake/bornagain/scripts/GoogletestFooter.cpp @@ -1,4 +1,4 @@ -/* From unitTests.cpp.footer: */ +/* From GoogletestFooter.cpp: */ struct ErrorStreamRedirect { ErrorStreamRedirect( std::streambuf * new_buffer ) @@ -15,7 +15,7 @@ private: int main(int argc, char** argv) { - std::cout << "UnitTest::main ...\n"; + std::cout << "GoogleTest::main ...\n"; ::testing::InitGoogleTest(&argc, argv); // redirect std::cerr stream diff --git a/cmake/bornagain/scripts/unitTests.cpp.header b/cmake/bornagain/scripts/GoogletestHeader.cpp similarity index 79% rename from cmake/bornagain/scripts/unitTests.cpp.header rename to cmake/bornagain/scripts/GoogletestHeader.cpp index 2a00517bcbab88aca345843c066b1de4b32cf3aa..bd1977c216c25ee8096800a2bd5afc9823ea1e74 100644 --- a/cmake/bornagain/scripts/unitTests.cpp.header +++ b/cmake/bornagain/scripts/GoogletestHeader.cpp @@ -1,4 +1,4 @@ -/* From unitTests.cpp.header: */ +/* From GoogletestHeader.cpp: */ #ifdef _MSC_VER #define _VARIADIC_MAX 10