| # ---------------------------------------------------------------------------- |
| # sanitize string stored in variable for use in regular expression. |
| macro (sanitize_for_regex STRVAR) |
| string (REGEX REPLACE "([.+*?^$()])" "\\\\\\1" ${STRVAR} "${${STRVAR}}") |
| endmacro () |
| |
| # ---------------------------------------------------------------------------- |
| # script arguments |
| if (NOT COMMAND) |
| message (FATAL_ERROR "Test command not specified!") |
| endif () |
| if (NOT DEFINED EXPECTED_RC) |
| set (EXPECTED_RC 0) |
| endif () |
| if (EXPECTED_OUTPUT) |
| sanitize_for_regex(EXPECTED_OUTPUT) |
| endif () |
| if (UNEXPECTED_OUTPUT) |
| sanitize_for_regex(UNEXPECTED_OUTPUT) |
| endif () |
| |
| # ---------------------------------------------------------------------------- |
| # set a few environment variables (useful for --tryfromenv) |
| set (ENV{FLAGS_undefok} "foo,bar") |
| set (ENV{FLAGS_weirdo} "") |
| set (ENV{FLAGS_version} "true") |
| set (ENV{FLAGS_help} "false") |
| |
| # ---------------------------------------------------------------------------- |
| # execute test command |
| execute_process( |
| COMMAND ${COMMAND} |
| RESULT_VARIABLE RC |
| OUTPUT_VARIABLE OUTPUT |
| ERROR_VARIABLE OUTPUT |
| ) |
| |
| if (OUTPUT) |
| message ("${OUTPUT}") |
| endif () |
| |
| # ---------------------------------------------------------------------------- |
| # check test result |
| if (NOT RC EQUAL EXPECTED_RC) |
| string (REPLACE ";" " " COMMAND "${COMMAND}") |
| message (FATAL_ERROR "Command:\n\t${COMMAND}\nExit status is ${RC}, expected ${EXPECTED_RC}") |
| endif () |
| if (EXPECTED_OUTPUT AND NOT OUTPUT MATCHES "${EXPECTED_OUTPUT}") |
| message (FATAL_ERROR "Test output does not match expected output: ${EXPECTED_OUTPUT}") |
| endif () |
| if (UNEXPECTED_OUTPUT AND OUTPUT MATCHES "${UNEXPECTED_OUTPUT}") |
| message (FATAL_ERROR "Test output matches unexpected output: ${UNEXPECTED_OUTPUT}") |
| endif () |