doctest

FORK: The fastest feature-rich C++11/14/17/20 single-header testing framework
git clone https://git.neptards.moe/neptards/doctest.git
Log | Files | Refs | README

exec_test.cmake (2952B)


      1 # Arguments:
      2 # - COMMAND: the command to run with all it's arguments
      3 # - TEST_MODE: NORMAL/VALGRIND/COLLECT/COMPARE
      4 # - TEST_OUTPUT_FILE: the file to/from which to write/read the output of the test
      5 # - TEST_TEMP_FILE: the temp file for the current test output used in COMPARE mode
      6 # To run something through this script use cmake like this:
      7 # cmake -DCOMMAND=path/to/my.exe -arg1 -arg2 -DTEST_MODE=VALGRIND -P path/to/exec_test.cmake
      8 
      9 #message("COMMAND: ${COMMAND}")
     10 #message("TEST_MODE: ${TEST_MODE}")
     11 #message("TEST_OUTPUT_FILE: ${TEST_OUTPUT_FILE}")
     12 #message("TEST_TEMP_FILE: ${TEST_TEMP_FILE}")
     13 
     14 string(REPLACE " " ";" COMMAND_LIST ${COMMAND})
     15 set(cmd COMMAND ${COMMAND_LIST} RESULT_VARIABLE CMD_RESULT)
     16 if("${TEST_MODE}" STREQUAL "COLLECT")
     17     list(APPEND cmd OUTPUT_FILE ${TEST_OUTPUT_FILE} ERROR_FILE ${TEST_OUTPUT_FILE})
     18 elseif("${TEST_MODE}" STREQUAL "COMPARE")
     19     list(APPEND cmd OUTPUT_FILE ${TEST_TEMP_FILE} ERROR_FILE ${TEST_TEMP_FILE})
     20 endif()
     21 
     22 execute_process(${cmd})
     23 
     24 # fix line endings
     25 if("${TEST_MODE}" STREQUAL "COLLECT" AND NOT CMAKE_HOST_UNIX)
     26     execute_process(COMMAND dos2unix ${TEST_OUTPUT_FILE})
     27 endif()
     28 
     29 if("${TEST_MODE}" STREQUAL "COMPARE")
     30     # fix line endings
     31     if(NOT CMAKE_HOST_UNIX)
     32         execute_process(COMMAND dos2unix ${TEST_TEMP_FILE})
     33     endif()
     34 
     35     if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.14.0")
     36         set(IGNORE_EOL --ignore-eol)
     37     endif()
     38         
     39     execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files ${IGNORE_EOL} ${TEST_OUTPUT_FILE} ${TEST_TEMP_FILE} RESULT_VARIABLE cmp_result)
     40 
     41     if(cmp_result)
     42         find_package(Git)
     43         if(GIT_FOUND)
     44             set(cmd ${GIT_EXECUTABLE} diff --no-index ${TEST_OUTPUT_FILE} ${TEST_TEMP_FILE})
     45             execute_process(COMMAND ${GIT_EXECUTABLE} diff --no-index ${TEST_OUTPUT_FILE} ${TEST_TEMP_FILE} OUTPUT_VARIABLE DIFF)
     46             message("${DIFF}")
     47         endif()
     48 
     49         # file(READ ${TEST_OUTPUT_FILE} orig)
     50         # file(READ ${TEST_TEMP_FILE} temp)
     51 
     52         # message("==========================================================================")
     53         # message("== CONTENTS OF ${TEST_OUTPUT_FILE}")
     54         # message("==========================================================================")
     55         # message("${orig}")
     56         # message("==========================================================================")
     57         # message("== CONTENTS OF ${TEST_TEMP_FILE}")
     58         # message("==========================================================================")
     59         # message("${temp}")
     60         # message("==========================================================================")
     61         # message("== CONTENTS END")
     62         # message("==========================================================================")
     63 
     64         set(CMD_RESULT "Output is different from reference file!")
     65     endif()
     66 endif()
     67 
     68 if(CMD_RESULT)
     69     message(FATAL_ERROR "Running '${COMMAND}' ended with code '${CMD_RESULT}'")
     70 endif()