From 392a6553f9fe9908d5d7c363ad013003d965e5e0 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 20 Jan 2014 13:44:27 -0500 Subject: [PATCH 1/2] Tests/RunCMake: Move documentation to a README.rst --- Tests/RunCMake/CMakeLists.txt | 37 +------------------------ Tests/RunCMake/README.rst | 51 +++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 36 deletions(-) create mode 100644 Tests/RunCMake/README.rst diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 1c23bcd60..fc730a770 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 .cmake file for each sub-test named above -# containing the actual test code. Optionally create files -# containing expected test results: -# -result.txt = Process result expected if not "0" -# -stdout.txt = Regex matching expected stdout content -# -stderr.txt = Regex matching expected stderr content -# -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 -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 000000000..d4159a59a --- /dev/null +++ b/Tests/RunCMake/README.rst @@ -0,0 +1,51 @@ +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 ``/``. + +2. In ``./CMakeLists.txt`` call ``add_RunCMake_test`` and pass the + test directory name ````. + +3. Create script ``/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. + +4. Create file ``/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 ``/.cmake`` file for each sub-test named + above containing the actual test code. Optionally create files + containing expected test results: + + ``-result.txt`` + Process result expected if not "0" + ``-stdout.txt`` + Regex matching expected stdout content + ``-stderr.txt`` + Regex matching expected stderr content + ``-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 ``-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``. From d4ca30ae150ea83c91bb75527a4152ce87e289e5 Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 20 Jan 2014 13:46:51 -0500 Subject: [PATCH 2/2] Tests/RunCMake: Add function to run a specified command-line Add a 'run_cmake_command' function that can be used by tests to run a given command-line and check the results rather than always running a CMake configuration process. This can be used in the future to test 'cmake -E' for example. --- Tests/RunCMake/README.rst | 6 ++++++ Tests/RunCMake/RunCMake.cmake | 37 ++++++++++++++++++++++++----------- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/Tests/RunCMake/README.rst b/Tests/RunCMake/README.rst index d4159a59a..536cff2e2 100644 --- a/Tests/RunCMake/README.rst +++ b/Tests/RunCMake/README.rst @@ -16,6 +16,12 @@ but do not actually build anything. To add a test: 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 ``/CMakeLists.txt`` in the directory containing:: cmake_minimum_required(...) diff --git a/Tests/RunCMake/RunCMake.cmake b/Tests/RunCMake/RunCMake.cmake index 5c7c05c1a..1d1c523ae 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()