Tests: Improve RunCMake.add_test TEST_LAUNCHER coverage

Verify that ctest actually runs the test command lines as expected.
This commit is contained in:
Brad King
2024-01-26 14:04:42 -05:00
parent c5b58b0842
commit fb766ff638
9 changed files with 89 additions and 41 deletions

View File

@@ -489,7 +489,7 @@ add_RunCMake_test(add_dependencies)
add_RunCMake_test(add_executable)
add_RunCMake_test(add_library)
add_RunCMake_test(add_subdirectory -DCMAKE_Fortran_COMPILER=${CMAKE_Fortran_COMPILER})
add_RunCMake_test(add_test)
add_RunCMake_test(add_test -DPSEUDO_EMULATOR=$<TARGET_FILE:pseudo_emulator>)
add_RunCMake_test(build_command)
add_executable(exit_code exit_code.c)
set(execute_process_ARGS

View File

@@ -42,8 +42,19 @@ block()
run_cmake_command(EmptyArgument-ctest ${CMAKE_CTEST_COMMAND} -C Debug)
endblock()
set(RunCMake_TEST_OPTIONS
"-DCMAKE_TEST_LAUNCHER=/path/to/pseudo_test_launcher")
set(RunCMake_TEST_OPTIONS "-DCMAKE_TEST_LAUNCHER=${PSEUDO_EMULATOR}")
run_cmake(TestLauncherProperty)
run_cmake(TestLauncher)
block()
set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/TestLauncher-build)
run_cmake(TestLauncher)
unset(RunCMake_TEST_OPTIONS)
set(RunCMake_TEST_NO_CLEAN 1)
set(RunCMake_TEST_OUTPUT_MERGE 1)
run_cmake_command(TestLauncher-build ${CMAKE_COMMAND} --build . --config Debug)
unset(RunCMake_TEST_OUTPUT_MERGE)
run_cmake_command(TestLauncher-test ${CMAKE_CTEST_COMMAND} -C Debug -V)
endblock()
unset(RunCMake_TEST_OPTIONS)

View File

@@ -8,27 +8,27 @@ endif()
set(error_details "There is a problem with generated test file:\n ${testfile}")
if(testfile_contents MATCHES "add_test[(]DoesNotUseTestLauncher [^\n]+pseudo_test_launcher[^\n]+\n")
if(testfile_contents MATCHES "add_test[(]DoesNotUseTestLauncher [^\n]+pseudo_emulator[^\n]+\n")
set(RunCMake_TEST_FAILED "Used test launcher when it should not be used. ${error_details}")
return()
endif()
if(NOT testfile_contents MATCHES "add_test[(]UsesTestLauncher [^\n]+pseudo_test_launcher[^\n]+\n")
if(NOT testfile_contents MATCHES "add_test[(]UsesTestLauncher [^\n]+pseudo_emulator[^\n]+\n")
set(RunCMake_TEST_FAILED "Did not use test launcher when it should be used. ${error_details}")
return()
endif()
if(testfile_contents MATCHES "add_test[(]DoesNotUseTestLauncherWithGenex [^\n]+pseudo_test_launcher[^\n]+\n")
if(testfile_contents MATCHES "add_test[(]DoesNotUseTestLauncherWithGenex [^\n]+pseudo_emulator[^\n]+\n")
set(RunCMake_TEST_FAILED "Used test launcher when it should not be used. ${error_details}")
return()
endif()
if(NOT testfile_contents MATCHES "add_test[(]UsesTestLauncherWithExecTargetFromSubdirAddedWithoutGenex [^\n]+pseudo_test_launcher[^\n]+\n")
if(NOT testfile_contents MATCHES "add_test[(]UsesTestLauncherWithExecTargetFromSubdirAddedWithoutGenex [^\n]+pseudo_emulator[^\n]+\n")
set(RunCMake_TEST_FAILED "Did not use test launcher when it should be used. ${error_details}")
return()
endif()
if(testfile_contents MATCHES "add_test[(]DoesNotUseTestLauncherWithExecTargetFromSubdirAddedWithGenex [^\n]+pseudo_test_launcher[^\n]+\n")
if(testfile_contents MATCHES "add_test[(]DoesNotUseTestLauncherWithExecTargetFromSubdirAddedWithGenex [^\n]+pseudo_emulator[^\n]+\n")
set(RunCMake_TEST_FAILED "Used test launcher when it should not be used. ${error_details}")
return()
endif()

View File

@@ -0,0 +1,48 @@
test 1
Start 1: DoesNotUseLauncher
+
1: Test command: "?[^
]*[/\]cmake(\.exe)?"? "-E" "echo" "Hi"
1: Working Directory: [^
]*/Tests/RunCMake/add_test/TestLauncher-build
1: Test timeout computed to be: [0-9]+
1: Hi
1/5 Test #1: DoesNotUseLauncher [.]* +Passed +[0-9.]+ sec
test 2
Start 2: UsesTestLauncher
+
2: Test command: "?[^
]*[/\]Tests[/\]RunCMake([/\][^/\]+)?[/\]pseudo_emulator(\.exe)?"? "[^"]*/Tests/RunCMake/add_test/TestLauncher-build(/Debug)?/exe(\.exe)?"
2: Working Directory: [^
]*Tests/RunCMake/add_test/TestLauncher-build
2: Test timeout computed to be: [0-9]+
2: Command: "[^"]*/Tests/RunCMake/add_test/TestLauncher-build(/Debug)?/exe(\.exe)?"
2/5 Test #2: UsesTestLauncher [.]* +Passed +[0-9.]+ sec
test 3
Start 3: DoesNotUseTestLauncherWithGenex
+
3: Test command: "?[^
]*[/\]Tests[/\]RunCMake[/\]add_test[/\]TestLauncher-build([/\]Debug)?[/\]exe(\.exe)?"?
3: Working Directory: [^
]*Tests/RunCMake/add_test/TestLauncher-build
3: Test timeout computed to be: [0-9]+
3/5 Test #3: DoesNotUseTestLauncherWithGenex [.]* +Passed +[0-9.]+ sec
test 4
Start 4: UsesTestLauncherWithExecTargetFromSubdirAddedWithoutGenex
+
4: Test command: "?[^
]*[/\]Tests[/\]RunCMake([/\][^/\]+)?[/\]pseudo_emulator(\.exe)?"? "[^"]*/Tests/RunCMake/add_test/TestLauncher-build/TestLauncher(/Debug)?/subdir_exe_no_genex(\.exe)?"
4: Working Directory: [^
]*Tests/RunCMake/add_test/TestLauncher-build
4: Test timeout computed to be: [0-9]+
4: Command: "[^"]*/Tests/RunCMake/add_test/TestLauncher-build/TestLauncher(/Debug)?/subdir_exe_no_genex(\.exe)?"
4/5 Test #4: UsesTestLauncherWithExecTargetFromSubdirAddedWithoutGenex [.]* +Passed +[0-9.]+ sec
test 5
Start 5: DoesNotUseTestLauncherWithExecTargetFromSubdirAddedWithGenex
+
5: Test command: "?[^
]*[/\]Tests[/\]RunCMake[/\]add_test[/\]TestLauncher-build[/\]TestLauncher([/\]Debug)?[/\]subdir_exe_with_genex(\.exe)?"?
5: Working Directory: [^
]*Tests/RunCMake/add_test/TestLauncher-build
5: Test timeout computed to be: [0-9]+
5/5 Test #5: DoesNotUseTestLauncherWithExecTargetFromSubdirAddedWithGenex [.]* +Passed +[0-9.]+ sec

View File

@@ -1,22 +1,21 @@
project(test_launcher LANGUAGES C)
enable_language(C)
enable_testing()
add_test(NAME DoesNotUseLauncher
COMMAND ${CMAKE_COMMAND} -E echo "Hi")
add_executable(generated_exe simple_src_exiterror.cxx)
set_target_properties(generated_exe PROPERTIES LINKER_LANGUAGE C)
add_executable(exe main.c)
add_test(NAME UsesTestLauncher
COMMAND generated_exe)
COMMAND exe)
add_test(NAME DoesNotUseTestLauncherWithGenex
COMMAND $<TARGET_FILE:generated_exe>)
COMMAND $<TARGET_FILE:exe>)
add_subdirectory(TestLauncher)
add_test(NAME UsesTestLauncherWithExecTargetFromSubdirAddedWithoutGenex
COMMAND generated_exe_in_subdir_added_to_test_without_genex)
COMMAND subdir_exe_no_genex)
add_test(NAME DoesNotUseTestLauncherWithExecTargetFromSubdirAddedWithGenex
COMMAND $<TARGET_FILE:generated_exe_in_subdir_added_to_test_with_genex>)
COMMAND $<TARGET_FILE:subdir_exe_with_genex>)

View File

@@ -1,9 +1,2 @@
add_executable(generated_exe_in_subdir_added_to_test_without_genex
${CMAKE_CURRENT_SOURCE_DIR}/../simple_src_exiterror.cxx)
set_target_properties(generated_exe_in_subdir_added_to_test_without_genex
PROPERTIES LINKER_LANGUAGE C)
add_executable(generated_exe_in_subdir_added_to_test_with_genex
${CMAKE_CURRENT_SOURCE_DIR}/../simple_src_exiterror.cxx)
set_target_properties(generated_exe_in_subdir_added_to_test_with_genex
PROPERTIES LINKER_LANGUAGE C)
add_executable(subdir_exe_no_genex ../main.c)
add_executable(subdir_exe_with_genex ../main.c)

View File

@@ -2,16 +2,15 @@
# This tests setting the TEST_LAUNCHER target property from the
# CMAKE_TEST_LAUNCHER variable.
# -DCMAKE_TEST_LAUNCHER=/path/to/pseudo_test_launcher is passed to this
enable_language(C)
# -DCMAKE_TEST_LAUNCHER=/path/to/pseudo_emulator is passed to this
# test
project(test_launcher LANGUAGES C)
add_executable(target_with_test_launcher simple_src_exiterror.cxx)
set_target_properties(target_with_test_launcher PROPERTIES LINKER_LANGUAGE C)
add_executable(target_with_test_launcher main.c)
get_property(launcher TARGET target_with_test_launcher
PROPERTY TEST_LAUNCHER)
if(NOT "${launcher}" MATCHES "pseudo_test_launcher")
if(NOT "${launcher}" MATCHES "pseudo_emulator")
message(SEND_ERROR "Default TEST_LAUNCHER property not set")
endif()
@@ -25,16 +24,14 @@ if(NOT "${launcher}" MATCHES "another_test_launcher")
endif()
unset(CMAKE_TEST_LAUNCHER CACHE)
add_executable(target_without_test_launcher simple_src_exiterror.cxx)
set_target_properties(target_without_test_launcher PROPERTIES LINKER_LANGUAGE C)
add_executable(target_without_test_launcher main.c)
get_property(launcher TARGET target_without_test_launcher
PROPERTY TEST_LAUNCHER)
if(NOT "${launcher}" STREQUAL "")
message(SEND_ERROR "Default TEST_LAUNCHER property not set to null")
endif()
add_executable(target_with_empty_test_launcher simple_src_exiterror.cxx)
set_target_properties(target_with_empty_test_launcher PROPERTIES LINKER_LANGUAGE C)
add_executable(target_with_empty_test_launcher main.c)
set_property(TARGET target_with_empty_test_launcher PROPERTY TEST_LAUNCHER "")
enable_testing()

View File

@@ -0,0 +1,4 @@
int main(void)
{
return 0;
}

View File

@@ -1,4 +0,0 @@
int main(int, char**)
{
return 13;
}