cmake/Help/prop_test/PASS_REGULAR_EXPRESSION.rst

51 lines
1.5 KiB
ReStructuredText
Raw Normal View History

2014-08-03 19:52:23 +02:00
PASS_REGULAR_EXPRESSION
-----------------------
2024-04-14 22:45:38 +02:00
The test output (stdout or stderr) must match this regular expression
for the test to pass. The process exit code is ignored. Tests that exceed
the timeout specified by :prop_test:`TIMEOUT` still fail regardless of
``PASS_REGULAR_EXPRESSION``. System-level test failures including
segmentation faults, signal abort, or heap errors may fail the test even
if ``PASS_REGULAR_EXPRESSION`` is matched.
2014-08-03 19:52:23 +02:00
2024-04-14 22:45:38 +02:00
Example:
2015-08-17 11:37:30 +02:00
.. code-block:: cmake
2024-04-14 22:45:38 +02:00
add_test(NAME mytest COMMAND ${CMAKE_COMMAND} -E echo "Passed this test")
set_property(TEST mytest PROPERTY
PASS_REGULAR_EXPRESSION "pass;Passed"
2015-08-17 11:37:30 +02:00
)
``PASS_REGULAR_EXPRESSION`` expects a list of regular expressions.
2021-09-14 00:13:48 +02:00
2024-04-14 22:45:38 +02:00
To run a test that may have a system-level failure, but still pass if
``PASS_REGULAR_EXPRESSION`` matches, use a CMake command to wrap the
executable run. Note that this will prevent automatic handling of the
:prop_tgt:`CROSSCOMPILING_EMULATOR` and :prop_tgt:`TEST_LAUNCHER`
target property.
.. code-block:: cmake
add_executable(main main.c)
add_test(NAME sigabrt COMMAND ${CMAKE_COMMAND} -E env $<TARGET_FILE:main>)
set_property(TEST sigabrt PROPERTY PROPERTY_REGULAR_EXPRESSION "pass;Passed")
.. code-block:: c
#include <signal.h>
#include <stdio.h>
int main(void){
fprintf(stdout, "Passed\n");
fflush(stdout); /* ensure the output buffer is seen */
raise(SIGABRT);
return 0;
}
2021-09-14 00:13:48 +02:00
See also the :prop_test:`FAIL_REGULAR_EXPRESSION` and
:prop_test:`SKIP_REGULAR_EXPRESSION` test properties.