cmTestGenerator: Evaluate generator expressions in test properties
This is useful for cases like: add_test(NAME mytest COMMAND mydriver $<TARGET_FILE:myexe>) set_tests_properties(mytest PROPERTIES REQUIRED_FILES "$<TARGET_FILE:myexe>" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/$<CONFIGURATION>" ) In this example we require the actual test executable to exist to run the test in addition to the test driver at argv[0]. Also the $<CONFIGURATION> expression improves over \${CTEST_CONFIGURATION_TYPE} because the latter is not normalized for case-sensitive filesystems.
This commit is contained in:
parent
6fe5c4afc0
commit
d331292c12
|
@ -51,7 +51,8 @@ public:
|
||||||
" set_tests_properties(test1 [test2...] PROPERTIES prop1 value1 prop2"
|
" set_tests_properties(test1 [test2...] PROPERTIES prop1 value1 prop2"
|
||||||
" value2)\n"
|
" value2)\n"
|
||||||
"Set a property for the tests. If the property is not found, CMake "
|
"Set a property for the tests. If the property is not found, CMake "
|
||||||
"will report an error. The properties include:\n"
|
"will report an error. Generator expressions will be expanded the same "
|
||||||
|
"as supported by the test's add_test call. The properties include:\n"
|
||||||
"WILL_FAIL: If set to true, this will invert the pass/fail flag of the"
|
"WILL_FAIL: If set to true, this will invert the pass/fail flag of the"
|
||||||
" test.\n"
|
" test.\n"
|
||||||
"PASS_REGULAR_EXPRESSION: If set, the test output will be checked "
|
"PASS_REGULAR_EXPRESSION: If set, the test output will be checked "
|
||||||
|
|
|
@ -117,7 +117,8 @@ void cmTestGenerator::GenerateScriptForConfig(std::ostream& os,
|
||||||
i != pm.end(); ++i)
|
i != pm.end(); ++i)
|
||||||
{
|
{
|
||||||
os << " " << i->first
|
os << " " << i->first
|
||||||
<< " " << lg->EscapeForCMake(i->second.GetValue());
|
<< " " << lg->EscapeForCMake(
|
||||||
|
ge.Parse(i->second.GetValue())->Evaluate(mf, config));
|
||||||
}
|
}
|
||||||
os << ")" << std::endl;
|
os << ")" << std::endl;
|
||||||
}
|
}
|
||||||
|
|
|
@ -604,6 +604,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DVERSION=master -P ${CMake_SOURCE_DIR}/Utilities/
|
||||||
${build_generator_args}
|
${build_generator_args}
|
||||||
--build-project GeneratorExpression
|
--build-project GeneratorExpression
|
||||||
--build-options -DCMAKE_BUILD_TYPE=\${CTEST_CONFIGURATION_TYPE}
|
--build-options -DCMAKE_BUILD_TYPE=\${CTEST_CONFIGURATION_TYPE}
|
||||||
|
--test-command ${CMAKE_CTEST_COMMAND} -C \${CTEST_CONFIGURATION_TYPE} -V
|
||||||
)
|
)
|
||||||
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/GeneratorExpression")
|
list(APPEND TEST_BUILD_DIRS "${CMake_BINARY_DIR}/Tests/GeneratorExpression")
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
cmake_minimum_required (VERSION 2.8.8)
|
cmake_minimum_required (VERSION 2.8.8)
|
||||||
project(GeneratorExpression CXX)
|
project(GeneratorExpression)
|
||||||
|
|
||||||
|
include(CTest)
|
||||||
|
|
||||||
# This test is split into multiple parts as needed to avoid NMake command
|
# This test is split into multiple parts as needed to avoid NMake command
|
||||||
# length limits.
|
# length limits.
|
||||||
|
@ -190,3 +192,31 @@ add_custom_target(check-part3 ALL
|
||||||
COMMAND ${CMAKE_COMMAND} -E echo "check done (part 3 of 3)"
|
COMMAND ${CMAKE_COMMAND} -E echo "check done (part 3 of 3)"
|
||||||
VERBATIM
|
VERBATIM
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#-----------------------------------------------------------------------------
|
||||||
|
# Cover test properties with generator expressions.
|
||||||
|
add_executable(echo echo.c)
|
||||||
|
add_executable(pwd pwd.c)
|
||||||
|
|
||||||
|
add_test(NAME echo-configuration COMMAND echo $<CONFIGURATION>)
|
||||||
|
set_property(TEST echo-configuration PROPERTY
|
||||||
|
PASS_REGULAR_EXPRESSION "^$<CONFIGURATION>\n$")
|
||||||
|
|
||||||
|
add_test(NAME echo-target-file COMMAND echo $<TARGET_FILE:echo>)
|
||||||
|
set_property(TEST echo-target-file PROPERTY
|
||||||
|
PASS_REGULAR_EXPRESSION "/echo${CMAKE_EXECUTABLE_SUFFIX}\n$")
|
||||||
|
set_property(TEST echo-target-file PROPERTY
|
||||||
|
REQUIRED_FILES "$<TARGET_FILE:echo>")
|
||||||
|
|
||||||
|
add_test(NAME working-dir-arg
|
||||||
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/WorkingDirectory/$<CONFIGURATION>"
|
||||||
|
COMMAND pwd)
|
||||||
|
set_property(TEST working-dir-arg PROPERTY
|
||||||
|
PASS_REGULAR_EXPRESSION "WorkingDirectory/$<CONFIGURATION>\n$")
|
||||||
|
foreach(c ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})
|
||||||
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/WorkingDirectory/${c}")
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
add_test(echo-old-style echo "\$<CONFIGURATION>")
|
||||||
|
set_property(TEST echo-old-style PROPERTY
|
||||||
|
PASS_REGULAR_EXPRESSION "^\\$<CONFIGURATION>\n$")
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
printf("%s\n", argv[1]);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
#include <limits.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#include <direct.h>
|
||||||
|
#define getcurdir _getcwd
|
||||||
|
#else
|
||||||
|
#include <unistd.h>
|
||||||
|
#define getcurdir getcwd
|
||||||
|
#endif
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
#define BUFSZ 20000
|
||||||
|
char buf[BUFSZ + 1];
|
||||||
|
#ifdef _WIN32
|
||||||
|
char *pos;
|
||||||
|
#endif
|
||||||
|
getcurdir(buf, BUFSZ);
|
||||||
|
#ifdef _WIN32
|
||||||
|
pos = buf;
|
||||||
|
while (*pos)
|
||||||
|
{
|
||||||
|
if (*pos == '\\')
|
||||||
|
{
|
||||||
|
*pos = '/';
|
||||||
|
}
|
||||||
|
++pos;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
printf("%s\n", buf);
|
||||||
|
return EXIT_SUCCESS;
|
||||||
|
}
|
Loading…
Reference in New Issue