blob: ebe40cf480f54f6fefd8a9d6d985abb34d0d6a09 [file] [log] [blame]
This directory contains tests that run CMake to configure a project
but do not actually build anything. To add a test:
1. Add a subdirectory named for the test, say ``<Test>/``.
2. In ``./CMakeLists.txt`` call ``add_RunCMake_test`` and pass the
test directory name ``<Test>``.
3. Create script ``<Test>/RunCMakeTest.cmake`` in the directory containing::
where ``SubTest1`` through ``SubTestN`` are sub-test names each
corresponding to an independent CMake run and project configuration.
One may also add calls of the form::
run_cmake_command(SubTestI ${CMAKE_COMMAND} ...)
to fully customize the test case command-line.
Alternatively, if the test is to cover running ``ctest -S`` then use::
and create ````, ````, and
```` files to be configured for each case.
4. Create file ``<Test>/CMakeLists.txt`` in the directory containing::
project(${RunCMake_TEST} NONE) # or languages needed
where ``${RunCMake_TEST}`` is literal. A value for ``RunCMake_TEST``
will be passed to CMake by the ``run_cmake`` macro when running each
5. Create a ``<Test>/<SubTest>.cmake`` file for each sub-test named
above containing the actual test code. Optionally create files
containing expected test results:
Regex matching expected process result, if not ``0``
Regex matching expected stdout content
Regex matching expected stderr content, if not ``^$``
Custom result check.
Note that when a specific platform expects differing stdout or stderr that
can be done by adding a platform specific output file. These follow the
naming convention of:
Note that trailing newlines will be stripped from actual and expected
test output before matching against the stdout and stderr expressions.
The code in ``<SubTest>-check.cmake`` may use variables
Top of test source tree
Top of test binary tree
and an failure must store a message in ``RunCMake_TEST_FAILED``.
To speed up local testing, you can choose to run only a subset of
``run_cmake()`` tests in a ``RunCMakeTest.cmake`` script by using the
``RunCMake_TEST_FILTER`` environment variable. If this variable is set,
it is treated as a regular expression, and any tests whose names don't
match the regular expression are not run. For example::
$ RunCMake_TEST_FILTER="^example" ctest -R '^RunCMake\.Example$'
This will only run subtests in ``RunCMake.Example`` that start with