@@ -31,18 +31,31 @@ set_tests_properties(
3131
3232# Helper — creates a test executable and registers it with CTest.
3333#
34- # PASS_REGEX: the test passes only if its output matches this pattern.
35- # FAIL_REGEX: the test fails if its output matches any of these patterns.
3634# EXITS C: the expected exit code (defaults to 0).
35+ # FAIL_REGEX: the test fails if its output matches any of these patterns
36+ # (repeatable).
37+ # PASS_REGEX: the test passes only if its output matches all of these patterns
38+ # (repeatable).
3739function (add_lib_test name )
3840 cmake_parse_arguments (
3941 ARG
4042 ""
41- "EXITS;PASS_REGEX "
42- "ARGS;FAIL_REGEX;SOURCES"
43+ "EXITS"
44+ "ARGS;FAIL_REGEX;PASS_REGEX; SOURCES"
4345 ${ARGN}
4446 )
45-
47+ if (ARG_KEYWORDS_MISSING_VALUES)
48+ message (
49+ FATAL_ERROR
50+ "add_lib_test(${name} ): missing values for keyword(s): ${ARG_KEYWORDS_MISSING_VALUES} "
51+ )
52+ endif ()
53+ if (ARG_UNPARSED_ARGUMENTS)
54+ message (
55+ FATAL_ERROR
56+ "add_lib_test(${name} ): unrecognized arguments: ${ARG_UNPARSED_ARGUMENTS} "
57+ )
58+ endif ()
4659 list (LENGTH ARG_SOURCES _n)
4760 if (_n EQUAL 1)
4861 get_filename_component (_stem ${ARG_SOURCES} NAME_WLE )
@@ -53,26 +66,31 @@ function(add_lib_test name)
5366 if (NOT TARGET _eggs_test.${_stem} )
5467 add_executable (_eggs_test.${_stem} ${ARG_SOURCES} )
5568 target_link_libraries (_eggs_test.${_stem} PRIVATE Eggs::TestMain )
56- set_target_properties (_eggs_test.${_stem} PROPERTIES FOLDER "test" )
57- endif ()
58-
59- if (NOT DEFINED ARG_EXITS)
60- set (ARG_EXITS 0)
69+ set_target_properties (
70+ _eggs_test.${_stem}
71+ PROPERTIES
72+ FOLDER "test"
73+ TEST_LAUNCHER
74+ "${CMAKE_COMMAND } ;-P;${CMAKE_CURRENT_FUNCTION_LIST_DIR } /test_launcher.cmake;--"
75+ )
6176 endif ()
6277
63- if (ARG_PASS_REGEX OR ARG_FAIL_REGEX OR NOT ARG_EXITS EQUAL 0)
64- list (LENGTH ARG_FAIL_REGEX _nfail)
65- add_test (
66- NAME eggs.test.${name}
67- COMMAND
68- ${CMAKE_COMMAND } -P
69- "${CMAKE_CURRENT_FUNCTION_LIST_DIR } /run_test.cmake" --
70- ${ARG_EXITS} "R:${ARG_PASS_REGEX} " ${_nfail} ${ARG_FAIL_REGEX}
71- $<TARGET_FILE :_eggs_test .${_stem} > ${ARG_ARGS}
72- )
73- else ()
74- add_test (NAME eggs.test.${name} COMMAND _eggs_test.${_stem} ${ARG_ARGS} )
78+ # test_launcher.cmake picks these control args.
79+ set (_control_args)
80+ if (DEFINED ARG_EXITS AND NOT ARG_EXITS EQUAL 0)
81+ list (APPEND _control_args "--eggs-run-test-exits=${ARG_EXITS} " )
7582 endif ()
83+ foreach (_pat IN LISTS ARG_FAIL_REGEX)
84+ list (APPEND _control_args "--eggs-run-test-fail-regex=${_pat} " )
85+ endforeach ()
86+ foreach (_pat IN LISTS ARG_PASS_REGEX)
87+ list (APPEND _control_args "--eggs-run-test-pass-regex=${_pat} " )
88+ endforeach ()
89+
90+ add_test (
91+ NAME eggs.test.${name}
92+ COMMAND _eggs_test.${_stem} ${_control_args} ${ARG_ARGS}
93+ )
7694 set_tests_properties (eggs.test .${name} PROPERTIES LABELS "unit" )
7795endfunction ()
7896
@@ -166,7 +184,9 @@ add_lib_test(
166184 SOURCES check.pass.cpp
167185 ARGS "--help"
168186 PASS_REGEX
169- "Usage: .*_eggs_test\\ .check\\ .pass.*\\ [options\\ ].*-h, --help.*--list.*list selected test case"
187+ "Usage: .*_eggs_test\\ .check\\ .pass.*\\ [options\\ ]"
188+ "-h, --help"
189+ "--list.*list selected test case"
170190 EXITS 0
171191)
172192
@@ -176,7 +196,9 @@ add_lib_test(
176196 SOURCES check.pass.cpp
177197 ARGS "-h"
178198 PASS_REGEX
179- "Usage: .*_eggs_test\\ .check\\ .pass.*\\ [options\\ ].*-h, --help.*--list.*list selected test case"
199+ "Usage: .*_eggs_test\\ .check\\ .pass.*\\ [options\\ ]"
200+ "-h, --help"
201+ "--list.*list selected test case"
180202 EXITS 0
181203)
182204
0 commit comments