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

Reply via email to