# 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>]
        [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 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>]
        [GUI]
        [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 (and, as with `ecm_add_tests()`, the `NAME_PREFIX` argument will be prepended to the test name).

`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.

Since pre-1.0.0.