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
This commit is contained in:
commit
ce906497c0
@ -1,39 +1,4 @@
|
|||||||
# This directory contains tests that run CMake to configure a project
|
# See adjacent README.rst for documentation of this test infrastructure.
|
||||||
# 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.
|
|
||||||
|
|
||||||
macro(add_RunCMake_test test)
|
macro(add_RunCMake_test test)
|
||||||
add_test(RunCMake.${test} ${CMAKE_CMAKE_COMMAND}
|
add_test(RunCMake.${test} ${CMAKE_CMAKE_COMMAND}
|
||||||
|
57
Tests/RunCMake/README.rst
Normal file
57
Tests/RunCMake/README.rst
Normal file
@ -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``.
|
@ -39,17 +39,27 @@ function(run_cmake test)
|
|||||||
if(APPLE)
|
if(APPLE)
|
||||||
list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0025=NEW)
|
list(APPEND RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0025=NEW)
|
||||||
endif()
|
endif()
|
||||||
execute_process(
|
if(RunCMake_TEST_COMMAND)
|
||||||
COMMAND ${CMAKE_COMMAND} "${RunCMake_TEST_SOURCE_DIR}"
|
execute_process(
|
||||||
-G "${RunCMake_GENERATOR}"
|
COMMAND ${RunCMake_TEST_COMMAND}
|
||||||
-T "${RunCMake_GENERATOR_TOOLSET}"
|
WORKING_DIRECTORY "${RunCMake_TEST_BINARY_DIR}"
|
||||||
-DRunCMake_TEST=${test}
|
OUTPUT_VARIABLE actual_stdout
|
||||||
${RunCMake_TEST_OPTIONS}
|
ERROR_VARIABLE actual_stderr
|
||||||
WORKING_DIRECTORY "${RunCMake_TEST_BINARY_DIR}"
|
RESULT_VARIABLE actual_result
|
||||||
OUTPUT_VARIABLE actual_stdout
|
)
|
||||||
ERROR_VARIABLE actual_stderr
|
else()
|
||||||
RESULT_VARIABLE actual_result
|
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 "")
|
set(msg "")
|
||||||
if(NOT "${actual_result}" STREQUAL "${expect_result}")
|
if(NOT "${actual_result}" STREQUAL "${expect_result}")
|
||||||
set(msg "${msg}Result is [${actual_result}], not [${expect_result}].\n")
|
set(msg "${msg}Result is [${actual_result}], not [${expect_result}].\n")
|
||||||
@ -86,3 +96,8 @@ function(run_cmake test)
|
|||||||
message(STATUS "${test} - PASSED")
|
message(STATUS "${test} - PASSED")
|
||||||
endif()
|
endif()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(run_cmake_command test)
|
||||||
|
set(RunCMake_TEST_COMMAND "${ARGN}")
|
||||||
|
run_cmake(${test})
|
||||||
|
endfunction()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user