cmake/Help/command/add_test.rst

118 lines
3.9 KiB
ReStructuredText
Raw Normal View History

2014-08-03 19:52:23 +02:00
add_test
--------
Add a test to the project to be run by :manual:`ctest(1)`.
2019-11-11 23:01:05 +01:00
.. code-block:: cmake
2014-08-03 19:52:23 +02:00
add_test(NAME <name> COMMAND <command> [<arg>...]
[CONFIGURATIONS <config>...]
2020-02-01 23:06:01 +01:00
[WORKING_DIRECTORY <dir>]
[COMMAND_EXPAND_LISTS])
2014-08-03 19:52:23 +02:00
2021-09-14 00:13:48 +02:00
Adds a test called ``<name>``. The test name may contain arbitrary
characters, expressed as a :ref:`Quoted Argument` or :ref:`Bracket Argument`
2023-07-02 19:51:09 +02:00
if necessary. See policy :policy:`CMP0110`.
CMake only generates tests if the :command:`enable_testing` command has been
invoked. The :module:`CTest` module invokes ``enable_testing`` automatically
unless ``BUILD_TESTING`` is set to ``OFF``.
Tests added with the ``add_test(NAME)`` signature support using
:manual:`generator expressions <cmake-generator-expressions(7)>`
in test properties set by :command:`set_property(TEST)` or
:command:`set_tests_properties`. Test properties may only be set in the
directory the test is created in.
``add_test`` options are:
2014-08-03 19:52:23 +02:00
``COMMAND``
2024-04-14 22:45:38 +02:00
Specify the test command-line.
If ``<command>`` specifies an executable target created by
:command:`add_executable`:
* It will automatically be replaced by the location of the executable
created at build time.
* .. versionadded:: 3.3
The target's :prop_tgt:`CROSSCOMPILING_EMULATOR`, if set, will be
used to run the command on the host::
<emulator> <command>
.. versionchanged:: 3.29
The emulator is used only when
:variable:`cross-compiling <CMAKE_CROSSCOMPILING>`.
See policy :policy:`CMP0158`.
* .. versionadded:: 3.29
The target's :prop_tgt:`TEST_LAUNCHER`, if set, will be
used to launch the command::
<launcher> <command>
If the :prop_tgt:`CROSSCOMPILING_EMULATOR` is also set, both are used::
<launcher> <emulator> <command>
2014-08-03 19:52:23 +02:00
2022-03-29 21:10:50 +02:00
The command may be specified using
:manual:`generator expressions <cmake-generator-expressions(7)>`.
2014-08-03 19:52:23 +02:00
``CONFIGURATIONS``
Restrict execution of the test only to the named configurations.
``WORKING_DIRECTORY``
2023-07-02 19:51:09 +02:00
Set the test property :prop_test:`WORKING_DIRECTORY` in which to execute the
test. If not specified, the test will be run in
:variable:`CMAKE_CURRENT_BINARY_DIR`. The working directory may be specified
using :manual:`generator expressions <cmake-generator-expressions(7)>`.
2022-03-29 21:10:50 +02:00
2020-02-01 23:06:01 +01:00
``COMMAND_EXPAND_LISTS``
2021-09-14 00:13:48 +02:00
.. versionadded:: 3.16
2023-07-02 19:51:09 +02:00
Lists in ``COMMAND`` arguments will be expanded, including those created with
2020-02-01 23:06:01 +01:00
:manual:`generator expressions <cmake-generator-expressions(7)>`.
2023-07-02 19:51:09 +02:00
If the test command exits with code ``0`` the test passes. Non-zero exit code
is a "failed" test. The test property :prop_test:`WILL_FAIL` inverts this
logic. Note that system-level test failures such as segmentation faults or
2024-08-02 22:14:20 +02:00
heap errors will still fail the test even if ``WILL_FAIL`` is true. Output
2023-07-02 19:51:09 +02:00
written to stdout or stderr is captured by :manual:`ctest(1)` and only
affects the pass/fail status via the :prop_test:`PASS_REGULAR_EXPRESSION`,
:prop_test:`FAIL_REGULAR_EXPRESSION`, or :prop_test:`SKIP_REGULAR_EXPRESSION`
test properties.
2015-11-17 17:22:37 +01:00
2021-09-14 00:13:48 +02:00
.. versionadded:: 3.16
Added :prop_test:`SKIP_REGULAR_EXPRESSION` property.
2019-11-11 23:01:05 +01:00
Example usage:
.. code-block:: cmake
2014-08-03 19:52:23 +02:00
add_test(NAME mytest
2021-09-14 00:13:48 +02:00
COMMAND testDriver --config $<CONFIG>
2014-08-03 19:52:23 +02:00
--exe $<TARGET_FILE:myexe>)
This creates a test ``mytest`` whose command runs a ``testDriver`` tool
passing the configuration name and the full path to the executable
file produced by target ``myexe``.
---------------------------------------------------------------------
2023-07-02 19:51:09 +02:00
The command syntax above is recommended over the older, less flexible form:
2022-03-29 21:10:50 +02:00
2019-11-11 23:01:05 +01:00
.. code-block:: cmake
2014-08-03 19:52:23 +02:00
add_test(<name> <command> [<arg>...])
2022-03-29 21:10:50 +02:00
Add a test called ``<name>`` with the given command-line.
Unlike the above ``NAME`` signature, target names are not supported
in the command-line. Furthermore, tests added with this signature do not
support :manual:`generator expressions <cmake-generator-expressions(7)>`
in the command-line or test properties.