Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 4 additions & 40 deletions cmake/mu.tiny.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -73,13 +73,6 @@ Commands
:prop_tgt:`CROSSCOMPILING_EMULATOR <cmake:prop_tgt:CROSSCOMPILING_EMULATOR>`
defined; if absent, discovery is skipped with a warning.

**CMake version compatibility:** CMake older than 3.10 supports only one
``mutiny_discover_tests()`` call per directory because
:prop_dir:`TEST_INCLUDE_FILE <cmake:prop_dir:TEST_INCLUDE_FILE>` accepts a
single value. CMake 3.10 and later use the list-capable
:prop_dir:`TEST_INCLUDE_FILES <cmake:prop_dir:TEST_INCLUDE_FILES>` property
and support multiple calls per directory.

#]=======================================================================]

set(_MUTINY_DISCOVERY_SCRIPT ${CMAKE_CURRENT_LIST_DIR}/_mutiny_discovery.cmake
Expand All @@ -91,11 +84,6 @@ option(MUTINY_JUNIT_REPORT "Output JUnit test reports")
set(MUTINY_EXTRA_ARGS "-v" CACHE STRING
"Default extra arguments passed to each discovered test run"
)
# _MUTINY_CMAKE_VERSION_OVERRIDE lets tests exercise the legacy code path.
set(_MUTINY_CMAKE_VERSION_OVERRIDE "" CACHE STRING
"Override the cmake version used by mutiny_discover_tests (for testing only)"
)
mark_as_advanced(_MUTINY_CMAKE_VERSION_OVERRIDE)

function(mutiny_discover_tests target)
if(DEFINED BUILD_TESTING AND NOT BUILD_TESTING)
Expand Down Expand Up @@ -189,33 +177,9 @@ function(mutiny_discover_tests target)
VERBATIM
)

if(_MUTINY_CMAKE_VERSION_OVERRIDE)
set(_mutiny_cmake_version "${_MUTINY_CMAKE_VERSION_OVERRIDE}")
else()
set(_mutiny_cmake_version "${CMAKE_VERSION}")
endif()

if(_mutiny_cmake_version VERSION_LESS "3.10")
# We can only set one.
get_property(already_set
DIRECTORY
PROPERTY TEST_INCLUDE_FILE
SET
)
if(${already_set})
message(FATAL_ERROR
"Cannot discover multiple tests from the same file"
)
endif()
set_property(
DIRECTORY
PROPERTY TEST_INCLUDE_FILE "${CTEST_INCLUDE_FILE}"
)
else()
set_property(
DIRECTORY APPEND
PROPERTY TEST_INCLUDE_FILES "${CTEST_INCLUDE_FILE}"
)
endif()
set_property(
DIRECTORY APPEND
PROPERTY TEST_INCLUDE_FILES "${CTEST_INCLUDE_FILE}"
)

endfunction()
4 changes: 2 additions & 2 deletions tests/RunCMake.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,10 @@ function(run_cmake test)
execute_process(
COMMAND ${CMAKE_COMMAND}
${gen_opts}
-S "${RunCMake_SOURCE_DIR}"
-S "${RunCMake_SOURCE_DIR}/${test}"
-B "${RunCMake_BINARY_DIR}/${test}"
-D "RunCMake_TEST=${test}"
${RunCMake_TEST_OPTIONS}
${ARGN}
RESULT_VARIABLE result
OUTPUT_VARIABLE stdout
ERROR_VARIABLE stderr
Expand Down
46 changes: 10 additions & 36 deletions tests/cmake/RunCMakeTest.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -19,50 +19,24 @@ set(RunCMake_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/configure")
run_cmake(NotATarget)
run_cmake(NotAnExecutable)

# Happy path — single-config generator
# Happy path — single-config and multi-config generators
run_cmake(ValidTarget)

# Multi-configuration generator (CMAKE_CONFIGURATION_TYPES is non-empty)
list(APPEND RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug")
run_cmake(MultiConfig)
list(REMOVE_ITEM RunCMake_TEST_OPTIONS "-DCMAKE_CONFIGURATION_TYPES=Debug")
run_cmake(MultiConfig -DCMAKE_CONFIGURATION_TYPES=Debug)

# Per-call function arguments
run_cmake(DetailedArgOn)
run_cmake(ExtraArgsArg)

# Cache-variable defaults
list(APPEND RunCMake_TEST_OPTIONS "-DMUTINY_TESTS_DETAILED:BOOL=ON")
run_cmake(CacheDetailedVar)
# Interaction: DETAILED OFF arg must take precedence over MUTINY_TESTS_DETAILED=ON
run_cmake(DetailedArgOffOverridesCache)
list(REMOVE_ITEM RunCMake_TEST_OPTIONS "-DMUTINY_TESTS_DETAILED:BOOL=ON")

list(APPEND RunCMake_TEST_OPTIONS "-DMUTINY_JUNIT_REPORT:BOOL=ON")
run_cmake(CacheJUnitVar)
list(REMOVE_ITEM RunCMake_TEST_OPTIONS "-DMUTINY_JUNIT_REPORT:BOOL=ON")

list(APPEND RunCMake_TEST_OPTIONS "-DMUTINY_EXTRA_ARGS=--custom-arg")
run_cmake(CacheExtraArgs)
# Interaction: EXTRA_ARGS function argument must take precedence over MUTINY_EXTRA_ARGS
run_cmake(ExtraArgsArgOverridesCache)
list(REMOVE_ITEM RunCMake_TEST_OPTIONS "-DMUTINY_EXTRA_ARGS=--custom-arg")
# Cache-variable defaults and override interactions
run_cmake(CacheDetailedVar -DMUTINY_TESTS_DETAILED:BOOL=ON)
run_cmake(DetailedArgOffOverridesCache -DMUTINY_TESTS_DETAILED:BOOL=ON)
run_cmake(CacheJUnitVar -DMUTINY_JUNIT_REPORT:BOOL=ON)
run_cmake(CacheExtraArgs -DMUTINY_EXTRA_ARGS=--custom-arg)
run_cmake(ExtraArgsArgOverridesCache -DMUTINY_EXTRA_ARGS=--custom-arg)

# No emulator: LANGUAGES NONE skips toolchain detection, so CMAKE_CROSSCOMPILING is set
# explicitly inside CMakeLists.txt after project() — no extra -D option needed here.
# Cross-compilation
run_cmake(CrossCompilingNoEmulator)

# With emulator: enable_language(CXX) runs full detection; CMAKE_SYSTEM_NAME=Generic
# causes CMake to derive CMAKE_CROSSCOMPILING=TRUE automatically.
list(APPEND RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=Generic")
run_cmake(CrossCompilingWithEmulator)
list(REMOVE_ITEM RunCMake_TEST_OPTIONS "-DCMAKE_SYSTEM_NAME=Generic")

# Legacy cmake <3.10 code path (simulated via override variable)
list(APPEND RunCMake_TEST_OPTIONS "-D_MUTINY_CMAKE_VERSION_OVERRIDE=3.9.0")
run_cmake(LegacySingleInclude)
run_cmake(LegacyDuplicateError)
list(REMOVE_ITEM RunCMake_TEST_OPTIONS "-D_MUTINY_CMAKE_VERSION_OVERRIDE=3.9.0")
run_cmake(CrossCompilingWithEmulator -DCMAKE_SYSTEM_NAME=Generic)

# ── _mutiny_discovery.cmake script tests ───────────────────────────────────────
#
Expand Down
81 changes: 0 additions & 81 deletions tests/cmake/configure/CMakeLists.txt

This file was deleted.

8 changes: 8 additions & 0 deletions tests/cmake/configure/CacheDetailedVar/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
add_executable(MyTests "${CMAKE_CURRENT_LIST_DIR}/../empty.cpp")
mutiny_discover_tests(MyTests)
get_property(p DIRECTORY PROPERTY TEST_INCLUDE_FILES)
message(STATUS "TEST_INCLUDE_FILES: ${p}")
8 changes: 8 additions & 0 deletions tests/cmake/configure/CacheExtraArgs/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
add_executable(MyTests "${CMAKE_CURRENT_LIST_DIR}/../empty.cpp")
mutiny_discover_tests(MyTests)
get_target_property(p MyTests MUTINY_DISCOVER_ARGS)
message(STATUS "DISCOVER_ARGS: ${p}")
8 changes: 8 additions & 0 deletions tests/cmake/configure/CacheJUnitVar/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
add_executable(MyTests "${CMAKE_CURRENT_LIST_DIR}/../empty.cpp")
mutiny_discover_tests(MyTests)
get_property(p DIRECTORY PROPERTY TEST_INCLUDE_FILES)
message(STATUS "TEST_INCLUDE_FILES: ${p}")
10 changes: 10 additions & 0 deletions tests/cmake/configure/CrossCompilingNoEmulator/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES NONE)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
# With LANGUAGES NONE cmake skips toolchain detection, so CMAKE_CROSSCOMPILING
# is never derived from CMAKE_SYSTEM_NAME. Set it explicitly after project().
set(CMAKE_CROSSCOMPILING TRUE)
add_executable(MyTests IMPORTED GLOBAL)
set_target_properties(MyTests PROPERTIES IMPORTED_LOCATION "${CMAKE_COMMAND}")
mutiny_discover_tests(MyTests)
11 changes: 11 additions & 0 deletions tests/cmake/configure/CrossCompilingWithEmulator/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
add_executable(MyTests "${CMAKE_CURRENT_LIST_DIR}/../empty.cpp")
# CMAKE_SYSTEM_NAME=Generic is passed on the command line; CMake derives
# CMAKE_CROSSCOMPILING=TRUE from it automatically during project() detection.
set_target_properties(MyTests PROPERTIES CROSSCOMPILING_EMULATOR "${CMAKE_COMMAND}")
mutiny_discover_tests(MyTests)
get_property(p DIRECTORY PROPERTY TEST_INCLUDE_FILES)
message(STATUS "TEST_INCLUDE_FILES: ${p}")
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
add_executable(MyTests "${CMAKE_CURRENT_LIST_DIR}/../empty.cpp")
mutiny_discover_tests(MyTests DETAILED OFF)
get_target_property(p MyTests MUTINY_DISCOVER_DETAILED)
message(STATUS "DISCOVER_DETAILED: ${p}")
8 changes: 8 additions & 0 deletions tests/cmake/configure/DetailedArgOn/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
add_executable(MyTests "${CMAKE_CURRENT_LIST_DIR}/../empty.cpp")
mutiny_discover_tests(MyTests DETAILED ON)
get_property(p DIRECTORY PROPERTY TEST_INCLUDE_FILES)
message(STATUS "TEST_INCLUDE_FILES: ${p}")
8 changes: 8 additions & 0 deletions tests/cmake/configure/ExtraArgsArg/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
add_executable(MyTests "${CMAKE_CURRENT_LIST_DIR}/../empty.cpp")
mutiny_discover_tests(MyTests EXTRA_ARGS --custom-arg)
get_property(p DIRECTORY PROPERTY TEST_INCLUDE_FILES)
message(STATUS "TEST_INCLUDE_FILES: ${p}")
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
add_executable(MyTests "${CMAKE_CURRENT_LIST_DIR}/../empty.cpp")
mutiny_discover_tests(MyTests EXTRA_ARGS --function-arg)
get_target_property(p MyTests MUTINY_DISCOVER_ARGS)
message(STATUS "DISCOVER_ARGS: ${p}")
1 change: 0 additions & 1 deletion tests/cmake/configure/LegacyDuplicateError/result.txt

This file was deleted.

1 change: 0 additions & 1 deletion tests/cmake/configure/LegacyDuplicateError/stderr.txt

This file was deleted.

1 change: 0 additions & 1 deletion tests/cmake/configure/LegacySingleInclude/stdout.txt

This file was deleted.

8 changes: 8 additions & 0 deletions tests/cmake/configure/MultiConfig/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
add_executable(MyTests "${CMAKE_CURRENT_LIST_DIR}/../empty.cpp")
mutiny_discover_tests(MyTests)
get_property(p DIRECTORY PROPERTY TEST_INCLUDE_FILES)
message(STATUS "TEST_INCLUDE_FILES: ${p}")
5 changes: 5 additions & 0 deletions tests/cmake/configure/NotATarget/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES NONE)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
mutiny_discover_tests(NotATarget)
6 changes: 6 additions & 0 deletions tests/cmake/configure/NotAnExecutable/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES NONE)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
add_library(MyLib INTERFACE)
mutiny_discover_tests(MyLib)
8 changes: 8 additions & 0 deletions tests/cmake/configure/ValidTarget/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
cmake_minimum_required(VERSION 3.10)
project(test LANGUAGES CXX)
list(APPEND CMAKE_MODULE_PATH "${MUTINY_MODULE_PATH}")
include(mu.tiny)
add_executable(MyTests "${CMAKE_CURRENT_LIST_DIR}/../empty.cpp")
mutiny_discover_tests(MyTests)
get_property(p DIRECTORY PROPERTY TEST_INCLUDE_FILES)
message(STATUS "TEST_INCLUDE_FILES: ${p}")