summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrad King <brad.king@kitware.com>2014-01-21 13:51:37 (GMT)
committerCMake Topic Stage <kwrobot@kitware.com>2014-01-21 13:51:37 (GMT)
commitce906497c011cf860e0aee2a1f9a4f1d4edc5397 (patch)
treeb87b8a4083f6f1456e1aa64ef574279b77b1f5e2
parentceecda12531385d81a4cf23d21d91ae15f9fa380 (diff)
parentd4ca30ae150ea83c91bb75527a4152ce87e289e5 (diff)
downloadCMake-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.txt37
-rw-r--r--Tests/RunCMake/README.rst57
-rw-r--r--Tests/RunCMake/RunCMake.cmake37
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()