[CMake] Test Script problems
Allen D Byrne
byrn at hdfgroup.org
Fri Apr 30 14:52:20 EDT 2010
I have a test script that works on linux but fails to work properly on Windows. It runs a command, captures the standard out and compares it to a reference file.
On linux everything works 99% of the time (issue with '=' or '--' in a parameter argument - later question). On windows, the execution of the test program fails with;
"The process cannot access the file because it is being used by another process"
Any suggestions would be welcomed. As a fallback I will need to create a windows batch file.
Allen
The Script - runTest.cmake :
####################################
# process arguments for the test program
SET (arg_list)
FOREACH (arg ${TEST_ARGS})
SET (arg_list ${arg_list} ${arg})
ENDFOREACH (arg ${TEST_ARGS})
# run the test program, capture the stdout/stderr and the result var
EXECUTE_PROCESS (
COMMAND ${TEST_PROGRAM} ${arg_list}
WORKING_DIRECTORY ${TEST_FOLDER}
RESULT_VARIABLE TEST_RESULT
OUTPUT_FILE ${TEST_OUTPUT}
ERROR_FILE ${TEST_OUTPUT}
OUTPUT_VARIABLE TEST_ERROR
ERROR_VARIABLE TEST_ERROR
)
# if the return value is !=0 bail out
IF (NOT ${TEST_RESULT} STREQUAL ${TEST_EXPECT})
MESSAGE ( FATAL_ERROR "Failed: Test program ${TEST_PROGRAM} exited != 0.\n${TEST_ERROR}")
ENDIF (NOT ${TEST_RESULT} STREQUAL ${TEST_EXPECT})
# now compare the output with the reference
EXECUTE_PROCESS (
COMMAND ${CMAKE_COMMAND} -E compare_files ${TEST_OUTPUT} ${TEST_REFERENCE}
RESULT_VARIABLE TEST_RESULT
)
# again, if return value is !=0 scream and shout
IF (TEST_RESULT)
MESSAGE (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not match ${TEST_REFERENCE}")
ENDIF (TEST_RESULT)
#############################################
The CMakeLists.txt :
#################################
...
MACRO (ADD_CMP_TEST resultfile resultcode)
ADD_TEST (
NAME TOOL-${resultfile}
COMMAND "${CMAKE_COMMAND}"
-D "TEST_PROGRAM=$<TARGET_FILE:tool>"
-D "TEST_ARGS=${ARGN}"
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
-D "TEST_OUTPUT=${resultfile}.out"
-D "TEST_EXPECT=${resultcode}"
-D "TEST_REFERENCE=${resultfile}.txt"
-D "TEST_APPEND=EXIT CODE:"
-P "runTest.cmake"
)
ENDMACRO (ADD_CMP_TEST file)
...
ADD_CMP_TEST (tool_11 1 tool_param1 tool_param2 tool_paramN)
...
#################################
More information about the CMake
mailing list