ECMAddTests¶
Convenience functions for adding tests.
ecm_add_tests(<sources>
[COMPILE_DEFINITIONS <definition> [<definition> [...]]] # Since 6.13.0
[ENVIRONMENT <list>] # Since 6.13.0
LINK_LIBRARIES <library> [<library> [...]]
[NAME_PREFIX <prefix> (| NO_NAME_PREFIX] # Since 6.22.0)
[GUI]
[TARGET_NAMES_VAR <target_names_var>]
[TEST_NAMES_VAR <test_names_var>]
[WORKING_DIRECTORY <dir>] # Since 5.111
)
A convenience function for adding multiple tests, each consisting of a
single source file. For each file in <sources>, an executable target is
created (whose name is the base name of the source file) with the compiler
definitions passed with COMPILE_DEFINITIONS. This will be linked
against the libraries given with LINK_LIBRARIES. Each executable will
be added as a test with the same name and can have an environment provided
by ENVIRONMENT.
If NAME_PREFIX is given, this prefix will be prepended to the test names, but
not the target names. As a result, it will not prevent clashes between tests
with the same name in different parts of the project, but it can be used to
give an indication of where to look for a failing test.
If NAME_PREFIX is not set, it will default to a value depending on the
strategy as controlled by the variable ECM_TEST_NAME_PREFIX_STRATEGY, if
set in the current scope and NO_NAME_PREFIX is not set (since 6.22).
If the flag GUI is passed the test binaries will be GUI executables, otherwise
the resulting binaries will be console applications (regardless of the value
of CMAKE_WIN32_EXECUTABLE or CMAKE_MACOSX_BUNDLE). Be aware that this changes
the executable entry point on Windows (although some frameworks, such as Qt,
abstract this difference away).
The tests will be build with -DQT_FORCE_ASSERTS to enable assertions in the
test executable even for release builds.
The TARGET_NAMES_VAR and TEST_NAMES_VAR arguments, if given, should specify a
variable name to receive the list of generated target and test names,
respectively. This makes it convenient to apply properties to them as a
whole, for example, using set_target_properties() or set_tests_properties().
The generated target executables will have the effects of ecm_mark_as_test()
(from the ECMMarkAsTest module) applied to it.
WORKING_DIRECTORY sets the test property WORKING_DIRECTORY
in which to execute the test. By default the test will be run in
${CMAKE_CURRENT_BINARY_DIR}. The working directory can be specified using
generator expressions. Since 5.111.
ecm_add_test(
<sources>
[COMPILE_DEFINITIONS <definition> [<definition> [...]]] # Since 6.13.0
[ENVIRONMENT <list>] # Since 6.13.0
LINK_LIBRARIES <library> [<library> [...]]
[TEST_NAME <name>]
[NAME_PREFIX <prefix> (| NO_NAME_PREFIX] # Since 6.22.0)
[GUI]
[TARGET_NAME_VAR <target_name_var>]
[TEST_NAME_VAR <test_name_var>]
[WORKING_DIRECTORY <dir>] # Since 5.111
)
This is a single-test form of ecm_add_tests that allows multiple source files
to be used for a single test. If using multiple source files, TEST_NAME must
be given; this will be used for both the target and test names.
As with ecm_add_tests(), the NAME_PREFIX argument will be prepended to
the test name.
If NAME_PREFIX is not set, it will default to a value depending on the
strategy as controlled by the variable ECM_TEST_NAME_PREFIX_STRATEGY, if
set in the current scope and NO_NAME_PREFIX is not set (since 6.22).
The TARGET_NAME_VAR and TEST_NAME_VAR arguments, if given, should specify a
variable name to receive the generated target and test name,
respectively. This makes it convenient to apply properties to them as a
whole, for example, using set_target_properties() or set_tests_properties().
WORKING_DIRECTORY sets the test property WORKING_DIRECTORY
in which to execute the test. By default the test will be run in
${CMAKE_CURRENT_BINARY_DIR}. The working directory can be specified using
generator expressions. Since 5.111.
ecm_test_set_dir_properties( # Since 6.22.0
[DIR <dir>]
[PREFIX_NAME <name>]
[PREFIX_NAME_IGNORE | PREFIX_NAME_NOT_IGNORE]
[FIRST_PREFIX_NAME]
[LAST_PREFIX_NAME]
)
The function can be used to set properties to individual directories to
influence the behaviour of the test functions. The properties will be set to
the current source directory. For source directories which themselves do not
have a CMakeLists.txt file and thus are not added by any add_subdirectory() calls,
the DIR argument can be used to instead set the property to any such
subdirectory <dir>.
PREFIX_NAME can be used to override by <name> the name derived from
the given directory.
PREFIX_NAME_IGNORE or PREFIX_NAME_NOT_IGNORE can be used to override
the filtering done by ECM_TEST_NAME_PREFIX_IGNORE_DIRS for the name of the
given directory.
FIRST_PREFIX_NAME and LAST_PREFIX_NAME can be used to limit the range
of directories in the path used for deriving the prefix name.
ecm_test_get_name_prefix( # Since 6.22.0
<name_prefix_var>
)
The name_prefix_var argument should specify a variable name to receive the
default test prefix name for the current scope, based on
the value of ECM_TEST_NAME_PREFIX_STRATEGY and the respective further setup.
ECM_TEST_NAME_PREFIX_STRATEGY # Since 6.22.0
This variable is specifying the strategy to use when estimating the default
test name prefix to use by the macros ecm_add_tests() and ecm_add_test()
when no explicit NAME_PREFIX argument is passed. The supported values are:
VARIABLE: The default name prefix is taken from the value of the variableECM_TEST_NAME_PREFIXin the scope where the macros are called.
PATH: The default name prefix is derived from the relative path of the current source directory where the macros are called, by replacing the dir separators with “-“. See alsoECM_TEST_NAME_PREFIX_IGNORE_DIRSfor skipping some directory names.
When unset, the VARIABLE strategy is used.
ECM_TEST_NAME_PREFIX # Since 6.22.0
When ECM_TEST_NAME_PREFIX_STRATEGY is set to VARIABLE,
the current value of the variable is used as default for the test name prefix.
ECM_TEST_NAME_PREFIX_IGNORE_DIRS # Since 6.22.0
When ECM_TEST_NAME_PREFIX_STRATEGY is set to PATH, this variable is used
to filter out directory names in the relative path of the current source directory
when deriving the name prefix. By default the variable is set to
“src”, “test”, “tests”, “autotest”, “autotests” when including the ECMAddTest module,
if not already defined.
Example usage:
set(ECM_TEST_NAME_PREFIX_STRATEGY "PATH")
list(APPEND ECM_TEST_NAME_PREFIX_IGNORE_DIRS "plugins")
# Being in subdir "src/plugins/foo" this test will get
# the test name prefix set to "foo-", next to base name "mytest":
ecm_add_test(
mytest.cpp
LINK_LIBRARIES mylib
)
Since pre-1.0.0.