[CMake] compare two files - testing
Michael Wild
themiwi at gmail.com
Sat Jul 4 03:11:47 EDT 2009
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
More information about the CMake
mailing list