Thank you - this was a very useful explanation!
For any others who may look at this, note that
execute_command
should be
execute_process
On Jul 4, 2009, at 1:11 AM, Michael Wild wrote:
On 4. Jul, 2009, at 0:56, James C. Sutherland wrote:
I have a test that produces output files that I would like to
compare against a "blessed" copy. Is there a way to do this in
CMake/CTest? This is probably a very simple thing, but I have not
figured out how to do it.
I have an
add_test( ... )
that creates the test, but I am not sure how to add the diff on the
output.
FYI, I am running this via "make test" - I am not yet running ctest
directly.
cmake -E compare_files file1 file2
cmake -E md5sum file1 ...
where probably the former is the more appropriate for you (unless
you store a "database" of md5 sums of your "blessed" files, so you
don't have to store/redistribute them in case they are big). E.g put
the following code in run_test.cmake:
# some argument checking:
# test_cmd is the command to run with all its arguments
if( NOT test_cmd )
message( FATAL_ERROR "Variable test_cmd not defined" )
if( NOT test_cmd )
# output_blessed contains the name of the "blessed" output file
if( NOT output_blessed )
message( FATAL_ERROR "Variable output_blessed not defined" )
if( NOT output_blessed )
# output_test contains the name of the output file the test_cmd will
produce
if( NOT output_test )
message( FATAL_ERROR "Variable output_test not defined" )
if( NOT output_test )
execute_command(
COMMAND ${test_cmd}
COMMAND ${CMAKE_COMMAND} -E compare_files ${output_blessed} $
{output_test}
RESULT_VARIABLE test_not_successful
OUTPUT_QUIET
ERROR_QUIET
)
if( test_not_successful )
message( SEND_ERROR "${output_test} does not match $
{output_blessed}!" )
endif( test_not_successful )
and then in your CMakeLists.txt:
add_test( "someImportantTest"
${CMAKE_COMMAND}
-Dtest_cmd="${CMAKE_BINARY_DIR}/tests/someImportantTestProgram --
with arguments"
-Doutput_blessed="${CMAKE_SOURCE_DIR}/tests/output/
someImportatanTestProgram.output"
-Doutput_test="${CMAKE_BINARY_DIR}/someImportatanTestProgram.output"
-P ${CMAKE_SOURCE_DIR}/CMake/run_test.cmake
)
If your test program writes to STDOUT you can use the OUTPUT_FILE
option in the execute_command of your run_test.cmake
HTH
Michael
_______________________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Please keep messages on-topic and check the CMake FAQ at:
http://www.cmake.org/Wiki/CMake_FAQ
Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake