diff options
author | Brad King <brad.king@kitware.com> | 2014-01-21 13:51:37 (GMT) |
---|---|---|
committer | CMake Topic Stage <kwrobot@kitware.com> | 2014-01-21 13:51:37 (GMT) |
commit | ce906497c011cf860e0aee2a1f9a4f1d4edc5397 (patch) | |
tree | b87b8a4083f6f1456e1aa64ef574279b77b1f5e2 | |
parent | ceecda12531385d81a4cf23d21d91ae15f9fa380 (diff) | |
parent | d4ca30ae150ea83c91bb75527a4152ce87e289e5 (diff) | |
download | CMake-ce906497c011cf860e0aee2a1f9a4f1d4edc5397.zip CMake-ce906497c011cf860e0aee2a1f9a4f1d4edc5397.tar.gz CMake-ce906497c011cf860e0aee2a1f9a4f1d4edc5397.tar.bz2 |
Merge topic 'improve-Tests-RunCMake'
d4ca30ae Tests/RunCMake: Add function to run a specified command-line
392a6553 Tests/RunCMake: Move documentation to a README.rst
-rw-r--r-- | Tests/RunCMake/CMakeLists.txt | 37 | ||||
-rw-r--r-- | Tests/RunCMake/README.rst | 57 | ||||
-rw-r--r-- | Tests/RunCMake/RunCMake.cmake | 37 |
3 files changed, 84 insertions, 47 deletions
diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 1c23bcd..fc730a7 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -1,39 +1,4 @@ -# 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. -# -# 2.) Call add_RunCMake_test and pass the test directory name. -# -# 3.) Create a RunCMakeTest.cmake script in the directory containing -# include(RunCMake) -# run_cmake(SubTest1) -# ... -# run_cmake(SubTestN) -# where SubTest1..SubTestN are sub-test names each corresponding to -# an independent CMake run and project configuration. -# -# 3.) Create a CMakeLists.txt file in the directory containing -# cmake_minimum_required(...) -# project(${RunCMake_TEST} NONE) # or languages needed -# include(${RunCMake_TEST}.cmake) -# where "${RunCMake_TEST}" is literal. A value for RunCMake_TEST -# will be passed to CMake by the run_cmake macro when running each -# sub-test. -# -# 4.) Create a <SubTest>.cmake file for each sub-test named above -# containing the actual test code. Optionally create files -# containing expected test results: -# <SubTest>-result.txt = Process result expected if not "0" -# <SubTest>-stdout.txt = Regex matching expected stdout content -# <SubTest>-stderr.txt = Regex matching expected stderr content -# <SubTest>-check.cmake = Custom result check -# 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 -# RunCMake_TEST_SOURCE_DIR = Top of test source tree -# RunCMake_TEST_BINARY_DIR = Top of test binary tree -# and an failure must store a message in RunCMake_TEST_FAILED. +# See adjacent README.rst for documentation of this test infrastructure. macro(add_RunCMake_test test) add_test(RunCMake.${test} ${CMAKE_CMAKE_COMMAND} diff --git a/Tests/RunCMake/README.rst b/Tests/RunCMake/README.rst new file mode 100644 index 0000000..536cff2 --- /dev/null +++ b/Tests/RunCMake/README.rst @@ -0,0 +1,57 @@ +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:: + + include(RunCMake) + run_cmake(SubTest1) + ... + run_cmake(SubTestN) + + 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. + +4. Create file ``<Test>/CMakeLists.txt`` in the directory containing:: + + cmake_minimum_required(...) + project(${RunCMake_TEST} NONE) # or languages needed + include(${RunCMake_TEST}.cmake) + + where ``${RunCMake_TEST}`` is literal. A value for ``RunCMake_TEST`` + will be passed to CMake by the ``run_cmake`` macro when running each + sub-test. + +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: + + ``<SubTest>-result.txt`` + Process result expected if not "0" + ``<SubTest>-stdout.txt`` + Regex matching expected stdout content + ``<SubTest>-stderr.txt`` + Regex matching expected stderr content + ``<SubTest>-check.cmake`` + Custom result check. + + 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 + + ``RunCMake_TEST_SOURCE_DIR`` + Top of test source tree + ``RunCMake_TEST_BINARY_DIR`` + Top of test binary tree + + and an failure must store a message in ``RunCMake_TEST_FAILED``. diff --git a/Tests/RunCMake/RunCMake.cmake b/Tests/RunCMake/RunCMake.cmake index 5c7c05c..1d1c523 100644 --- a/Tests/RunCMake/RunCMake.cmake +++ b/Tests/RunCMake/RunCMake.cmake @@ -39,17 +39,27 @@ function(run_cmake test) if(APPLE) list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0025=NEW) endif() - execute_process( - COMMAND ${CMAKE_COMMAND} "${RunCMake_TEST_SOURCE_DIR}" - -G "${RunCMake_GENERATOR}" - -T "${RunCMake_GENERATOR_TOOLSET}" - -DRunCMake_TEST=${test} - ${RunCMake_TEST_OPTIONS} - WORKING_DIRECTORY "${RunCMake_TEST_BINARY_DIR}" - OUTPUT_VARIABLE actual_stdout - ERROR_VARIABLE actual_stderr - RESULT_VARIABLE actual_result - ) + if(RunCMake_TEST_COMMAND) + execute_process( + COMMAND ${RunCMake_TEST_COMMAND} + WORKING_DIRECTORY "${RunCMake_TEST_BINARY_DIR}" + OUTPUT_VARIABLE actual_stdout + ERROR_VARIABLE actual_stderr + RESULT_VARIABLE actual_result + ) + else() + execute_process( + COMMAND ${CMAKE_COMMAND} "${RunCMake_TEST_SOURCE_DIR}" + -G "${RunCMake_GENERATOR}" + -T "${RunCMake_GENERATOR_TOOLSET}" + -DRunCMake_TEST=${test} + ${RunCMake_TEST_OPTIONS} + WORKING_DIRECTORY "${RunCMake_TEST_BINARY_DIR}" + OUTPUT_VARIABLE actual_stdout + ERROR_VARIABLE actual_stderr + RESULT_VARIABLE actual_result + ) + endif() set(msg "") if(NOT "${actual_result}" STREQUAL "${expect_result}") set(msg "${msg}Result is [${actual_result}], not [${expect_result}].\n") @@ -86,3 +96,8 @@ function(run_cmake test) message(STATUS "${test} - PASSED") endif() endfunction() + +function(run_cmake_command test) + set(RunCMake_TEST_COMMAND "${ARGN}") + run_cmake(${test}) +endfunction() |