2024-06-18 17:24:42 +02:00
|
|
|
cmake_minimum_required(VERSION 3.16)
|
2017-03-21 14:07:34 +01:00
|
|
|
|
2019-06-12 14:49:47 +02:00
|
|
|
project(%{TestCaseName} LANGUAGES CXX)
|
2017-03-21 14:07:34 +01:00
|
|
|
|
2021-09-13 11:05:40 +02:00
|
|
|
enable_testing()
|
|
|
|
|
|
2017-03-21 14:07:34 +01:00
|
|
|
@if "%{TestFrameWork}" == "QtTest"
|
|
|
|
|
@if "%{RequireGUI}" == "true"
|
2021-12-09 13:42:30 +01:00
|
|
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Gui Test)
|
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui Test)
|
2020-09-14 13:55:25 +02:00
|
|
|
@else
|
2021-12-09 13:42:30 +01:00
|
|
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Test)
|
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Test)
|
2017-03-21 14:07:34 +01:00
|
|
|
@endif
|
|
|
|
|
|
2019-06-12 14:49:47 +02:00
|
|
|
set(CMAKE_AUTOUIC ON)
|
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
|
|
|
set(CMAKE_AUTORCC ON)
|
|
|
|
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
|
|
|
|
|
add_executable(%{TestCaseName} %{TestCaseFileWithCppSuffix})
|
2019-12-05 08:36:08 +01:00
|
|
|
add_test(NAME %{TestCaseName} COMMAND %{TestCaseName})
|
2017-03-21 14:07:34 +01:00
|
|
|
|
|
|
|
|
@if "%{RequireGUI}" == "true"
|
2020-09-14 13:55:25 +02:00
|
|
|
target_link_libraries(%{TestCaseName} PRIVATE Qt${QT_VERSION_MAJOR}::Gui Qt${QT_VERSION_MAJOR}::Test)
|
2017-03-21 14:07:34 +01:00
|
|
|
@else
|
2020-09-14 13:55:25 +02:00
|
|
|
target_link_libraries(%{TestCaseName} PRIVATE Qt${QT_VERSION_MAJOR}::Test)
|
2017-03-21 14:07:34 +01:00
|
|
|
@endif
|
|
|
|
|
|
2018-01-12 14:10:27 +01:00
|
|
|
@endif
|
|
|
|
|
@if "%{TestFrameWork}" == "QtQuickTest"
|
2022-01-10 14:29:04 +01:00
|
|
|
@if "%{UseSetupCode}" === "true"
|
|
|
|
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS QuickTest Qml)
|
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS QuickTest Qml)
|
|
|
|
|
@else
|
2021-12-09 13:42:30 +01:00
|
|
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS QuickTest)
|
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS QuickTest)
|
2022-01-10 14:29:04 +01:00
|
|
|
@endif
|
2018-01-12 14:10:27 +01:00
|
|
|
|
2019-06-12 14:49:47 +02:00
|
|
|
set(CMAKE_AUTOUIC ON)
|
|
|
|
|
set(CMAKE_AUTOMOC ON)
|
|
|
|
|
set(CMAKE_AUTORCC ON)
|
|
|
|
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
2018-01-12 14:10:27 +01:00
|
|
|
|
|
|
|
|
# no need to copy around qml test files for shadow builds - just set the respective define
|
|
|
|
|
add_definitions(-DQUICK_TEST_SOURCE_DIR="${CMAKE_CURRENT_SOURCE_DIR}")
|
|
|
|
|
|
2023-03-09 09:01:06 +01:00
|
|
|
file(GLOB_RECURSE QML_FILES *.qml)
|
|
|
|
|
add_custom_target(qmlfiles SOURCES ${QML_FILES})
|
|
|
|
|
|
2022-01-10 14:29:04 +01:00
|
|
|
@if "%{UseSetupCode}" === "true"
|
|
|
|
|
add_executable(%{TestCaseName} %{MainCppName}
|
|
|
|
|
setup.cpp setup.h)
|
|
|
|
|
@else
|
2019-06-12 14:49:47 +02:00
|
|
|
add_executable(%{TestCaseName} %{MainCppName})
|
2022-01-10 14:29:04 +01:00
|
|
|
@endif
|
2019-12-05 08:36:08 +01:00
|
|
|
add_test(NAME %{TestCaseName} COMMAND %{TestCaseName})
|
2018-01-12 14:10:27 +01:00
|
|
|
|
2022-01-10 14:29:04 +01:00
|
|
|
@if "%{UseSetupCode}" === "true"
|
|
|
|
|
target_link_libraries(%{TestCaseName}
|
|
|
|
|
PRIVATE Qt${QT_VERSION_MAJOR}::QuickTest
|
|
|
|
|
PRIVATE Qt${QT_VERSION_MAJOR}::Qml)
|
|
|
|
|
@else
|
2020-09-14 13:55:25 +02:00
|
|
|
target_link_libraries(%{TestCaseName} PRIVATE Qt${QT_VERSION_MAJOR}::QuickTest)
|
2022-01-10 14:29:04 +01:00
|
|
|
@endif
|
2018-01-12 14:10:27 +01:00
|
|
|
|
|
|
|
|
@endif
|
|
|
|
|
@if "%{TestFrameWork}" == "GTest"
|
2023-09-15 13:23:14 +02:00
|
|
|
set(CMAKE_CXX_STANDARD 14)
|
2021-09-10 11:12:20 +02:00
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
2017-03-21 14:07:34 +01:00
|
|
|
|
|
|
|
|
if ($ENV{GOOGLETEST_DIR})
|
2023-10-11 16:21:04 +02:00
|
|
|
get_filename_component(_GTEST_BASE $ENV{GOOGLETEST_DIR} REALPATH)
|
|
|
|
|
elseif (EXISTS "%{GTestBaseFolder}") # set by QC
|
|
|
|
|
get_filename_component(_GTEST_BASE "%{GTestBaseFolder}" REALPATH) # set by QC
|
|
|
|
|
elseif (UNIX AND EXISTS "/usr/src/gtest")
|
|
|
|
|
set(_GTEST_BASE "/usr/src/gtest")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if (_GTEST_BASE AND NOT EXISTS "${_GTEST_BASE}/googletest/src/gtest-all.cc"
|
|
|
|
|
OR NOT EXISTS "${_GTEST_BASE}/googlemock/src/gmock-all.cc")
|
|
|
|
|
message(ERROR "Missing source components (gtest-all.cc and/or gmock-all.cc).")
|
|
|
|
|
endif()
|
2017-03-21 14:07:34 +01:00
|
|
|
|
2023-10-11 16:21:04 +02:00
|
|
|
find_package(Threads REQUIRED)
|
2017-03-21 14:07:34 +01:00
|
|
|
|
2023-10-11 16:21:04 +02:00
|
|
|
include_directories(
|
|
|
|
|
${_GTEST_BASE}/googletest ${_GTEST_BASE}/googletest/include
|
|
|
|
|
${_GTEST_BASE}/googlemock ${_GTEST_BASE}/googlemock/include
|
|
|
|
|
)
|
2021-09-10 11:12:20 +02:00
|
|
|
add_executable(%{TestCaseName} %{MainCppName} %{TestCaseFileGTestWithCppSuffix}
|
2023-10-11 16:21:04 +02:00
|
|
|
${_GTEST_BASE}/googletest/src/gtest-all.cc
|
|
|
|
|
${_GTEST_BASE}/googlemock/src/gmock-all.cc
|
|
|
|
|
)
|
|
|
|
|
|
2019-12-05 08:36:08 +01:00
|
|
|
add_test(NAME %{TestCaseName} COMMAND %{TestCaseName})
|
2019-06-12 14:49:47 +02:00
|
|
|
target_link_libraries(%{TestCaseName} PRIVATE Threads::Threads)
|
2023-10-11 16:21:04 +02:00
|
|
|
@endif
|
|
|
|
|
@if "%{TestFrameWork}" == "GTest_dyn"
|
|
|
|
|
set(CMAKE_CXX_STANDARD 14)
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
|
|
|
|
|
if ($ENV{GOOGLETEST_DIR})
|
|
|
|
|
get_filename_component(_GTEST_BASE $ENV{GOOGLETEST_DIR} REALPATH)
|
|
|
|
|
elseif (EXISTS "%{GTestBaseFolder}") # set by QC
|
|
|
|
|
get_filename_component(_GTEST_BASE "%{GTestBaseFolder}" REALPATH) # set by QC
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if (NOT GTEST_ROOT)
|
|
|
|
|
if (_GTEST_BASE)
|
|
|
|
|
message("Setting GTEST_ROOT to ${_GTEST_BASE}")
|
|
|
|
|
set(GTEST_ROOT ${_GTEST_BASE})
|
|
|
|
|
else()
|
|
|
|
|
message("No GTEST_ROOT specified - using system defaults.")
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
find_package(GTest REQUIRED)
|
|
|
|
|
if (NOT GTest_FOUND)
|
|
|
|
|
message (FATAL_ERROR "No GTest Found")
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
add_executable(%{TestCaseName} %{MainCppName} %{TestCaseFileGTestWithCppSuffix})
|
|
|
|
|
add_test(NAME %{TestCaseName} COMMAND %{TestCaseName})
|
2017-03-21 14:07:34 +01:00
|
|
|
|
2023-10-11 16:21:04 +02:00
|
|
|
target_link_libraries(%{TestCaseName} PRIVATE GTest::GTest)
|
|
|
|
|
if (GMock_FOUND)
|
|
|
|
|
target_link_libraries(%{TestCaseName} INTERFACE GTest::GMock)
|
|
|
|
|
endif()
|
2017-03-21 14:07:34 +01:00
|
|
|
@endif
|
2019-05-20 10:31:53 +02:00
|
|
|
@if "%{TestFrameWork}" == "BoostTest"
|
2019-06-12 14:49:47 +02:00
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
2019-05-20 10:31:53 +02:00
|
|
|
|
2019-06-12 14:49:47 +02:00
|
|
|
add_executable(%{TestCaseName} %{MainCppName})
|
2019-12-05 08:36:08 +01:00
|
|
|
add_test(NAME %{TestCaseName} COMMAND %{TestCaseName})
|
2019-05-20 10:31:53 +02:00
|
|
|
|
2019-05-24 08:49:34 +02:00
|
|
|
if (DEFINED ENV{BOOST_INCLUDE_DIR})
|
|
|
|
|
set(BOOST_INCLUDE_DIR $ENV{BOOST_INCLUDE_DIR})
|
2019-05-20 10:31:53 +02:00
|
|
|
else ()
|
2019-05-24 08:49:34 +02:00
|
|
|
set(BOOST_INCLUDE_DIR "%{BoostIncDir}") # set by Qt Creator wizard
|
2019-05-20 10:31:53 +02:00
|
|
|
endif ()
|
2019-05-24 08:49:34 +02:00
|
|
|
if (BOOST_INCLUDE_DIR STREQUAL "")
|
|
|
|
|
message("BOOST_INCLUDE_DIR is not set, assuming Boost can be found automatically in your system")
|
|
|
|
|
elseif (EXISTS ${BOOST_INCLUDE_DIR})
|
|
|
|
|
include_directories(${BOOST_INCLUDE_DIR})
|
2019-05-20 10:31:53 +02:00
|
|
|
endif ()
|
|
|
|
|
@endif
|
2023-03-30 14:22:32 +02:00
|
|
|
@if "%{TestFrameWork}" == "BoostTest_dyn"
|
|
|
|
|
set(Boost_USE_STATIC_LIBS OFF)
|
|
|
|
|
set(Boost_USE_MULTITHREADED ON)
|
|
|
|
|
set(Boost_USE_STATIC_RUNTIME OFF)
|
|
|
|
|
|
|
|
|
|
if (DEFINED ENV{BOOST_INSTALL_DIR})
|
|
|
|
|
set(BOOST_INSTALL_DIR $ENV{BOOST_INSTALL_DIR})
|
|
|
|
|
else ()
|
|
|
|
|
set(BOOST_INSTALL_DIR "%{BoostInstallDir}") # set by Qt Creator wizard
|
|
|
|
|
endif ()
|
|
|
|
|
if (BOOST_INSTALL_DIR STREQUAL "")
|
|
|
|
|
message("BOOST_INSTALL_DIR not set, assuming Boost can be found automatically in your system")
|
|
|
|
|
elseif (EXISTS ${BOOST_INSTALL_DIR})
|
|
|
|
|
set(BOOST_ROOT ${BOOST_INSTALL_DIR})
|
|
|
|
|
endif ()
|
|
|
|
|
find_package(Boost COMPONENTS unit_test_framework REQUIRED)
|
|
|
|
|
|
|
|
|
|
set(CMAKE_CXX_STANDARD 11)
|
|
|
|
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
|
|
|
|
|
2023-09-26 11:07:16 +02:00
|
|
|
add_executable(%{TestCaseName} %{MainCppName} %{TestCaseFileWithCppSuffix})
|
2023-03-30 14:22:32 +02:00
|
|
|
add_test(NAME %{TestCaseName} COMMAND %{TestCaseName})
|
|
|
|
|
if (Boost_FOUND)
|
|
|
|
|
include_directories(${Boost_INCLUDE_DIRS})
|
|
|
|
|
target_link_libraries(%{TestCaseName} PUBLIC ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
|
|
|
|
|
endif ()
|
|
|
|
|
@endif
|
2019-05-09 19:36:49 +02:00
|
|
|
@if "%{TestFrameWork}" == "Catch2"
|
|
|
|
|
SET(CMAKE_CXX_STANDARD 11)
|
|
|
|
|
|
|
|
|
|
@if "%{Catch2NeedsQt}" == "true"
|
2021-12-09 13:42:30 +01:00
|
|
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Gui)
|
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui)
|
2019-05-09 19:36:49 +02:00
|
|
|
@endif
|
|
|
|
|
|
2023-10-16 12:39:23 +02:00
|
|
|
add_executable(%{TestCaseName} %{TestCaseFileWithCppSuffix} %{MainCppName})
|
2023-09-26 11:07:16 +02:00
|
|
|
add_test(NAME %{TestCaseName} COMMAND %{TestCaseName})
|
2019-05-09 19:36:49 +02:00
|
|
|
|
|
|
|
|
@if "%{Catch2NeedsQt}" == "true"
|
2020-09-14 13:55:25 +02:00
|
|
|
target_link_libraries(%{TestCaseName} PRIVATE Qt${QT_VERSION_MAJOR}::Gui)
|
2019-05-09 19:36:49 +02:00
|
|
|
@endif
|
|
|
|
|
|
|
|
|
|
if (DEFINED ENV{CATCH_INCLUDE_DIR})
|
|
|
|
|
set(CATCH_INCLUDE_DIR $ENV{CATCH_INCLUDE_DIR})
|
|
|
|
|
else ()
|
|
|
|
|
set(CATCH_INCLUDE_DIR "%{CatchIncDir}") # set by Qt Creator wizard
|
|
|
|
|
endif ()
|
|
|
|
|
if (CATCH_INCLUDE_DIR STREQUAL "")
|
|
|
|
|
message("CATCH_INCLUDE_DIR is not set, assuming Catch2 can be found automatically in your system")
|
|
|
|
|
elseif (EXISTS ${CATCH_INCLUDE_DIR})
|
|
|
|
|
include_directories(${CATCH_INCLUDE_DIR})
|
|
|
|
|
endif ()
|
|
|
|
|
@endif
|
2023-10-16 12:39:23 +02:00
|
|
|
@if "%{TestFrameWork}" == "Catch2_dyn"
|
|
|
|
|
SET(CMAKE_CXX_STANDARD 11)
|
|
|
|
|
|
|
|
|
|
if ($ENV{CATCH2_INSTALL_DIR})
|
|
|
|
|
get_filename_component(_CATCH2_BASE $ENV{CATCH2_INSTALL_DIR} REALPATH)
|
|
|
|
|
elseif (EXISTS "%{CatchInstallDir}") # set by QC
|
|
|
|
|
get_filename_component(_CATCH2_BASE "%{CatchInstallDir}" REALPATH) # set by QC
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
if (NOT Catch2_DIR)
|
|
|
|
|
if (_CATCH2_BASE)
|
|
|
|
|
if (EXISTS "${_CATCH2_BASE}/lib/cmake/Catch2")
|
|
|
|
|
set(_CATCH2_BASE "${_CATCH2_BASE}/lib/cmake/Catch2")
|
|
|
|
|
endif()
|
|
|
|
|
message("Setting Catch2_DIR to ${_CATCH2_BASE}")
|
|
|
|
|
set(Catch2_DIR ${_CATCH2_BASE})
|
|
|
|
|
else()
|
|
|
|
|
message("No Catch2_DIR specified - using system defaults.")
|
|
|
|
|
endif()
|
|
|
|
|
endif()
|
|
|
|
|
|
|
|
|
|
find_package(Catch2 3 REQUIRED)
|
|
|
|
|
@if "%{Catch2NeedsQt}" == "true"
|
|
|
|
|
find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Gui)
|
|
|
|
|
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Gui)
|
|
|
|
|
@endif
|
|
|
|
|
|
|
|
|
|
@if "%{Catch2Main}" == "false"
|
|
|
|
|
add_executable(%{TestCaseName} %{TestCaseFileWithCppSuffix})
|
|
|
|
|
target_link_libraries(%{TestCaseName} PRIVATE Catch2::Catch2WithMain)
|
|
|
|
|
@else
|
|
|
|
|
add_executable(%{TestCaseName} %{TestCaseFileWithCppSuffix} %{MainCppName})
|
|
|
|
|
target_link_libraries(%{TestCaseName} PRIVATE Catch2::Catch2)
|
|
|
|
|
@endif
|
|
|
|
|
@if "%{Catch2NeedsQt}" == "true"
|
|
|
|
|
target_link_libraries(%{TestCaseName} PRIVATE Qt${QT_VERSION_MAJOR}::Gui)
|
|
|
|
|
@endif
|
|
|
|
|
|
|
|
|
|
add_test(NAME %{TestCaseName} COMMAND %{TestCaseName})
|
|
|
|
|
@endif
|