1
# This function calls the ${scriptname} file to execute one test case:
3
function(execute_one_script_test scriptname testname expected_result)
4
message("execute_one_script_test")
5
message("testname=[${testname}]")
8
COMMAND ${CMAKE_COMMAND}
10
-D "testname:STRING=${testname}"
14
RESULT_VARIABLE result
15
OUTPUT_STRIP_TRAILING_WHITESPACE
16
ERROR_STRIP_TRAILING_WHITESPACE
19
message("out=[${out}]")
20
message("err=[${err}]")
22
if(expected_result STREQUAL "fail")
23
# case expected to fail, result should be non-0...
25
if("${result}" STREQUAL "0")
26
message(SEND_ERROR "script failed: testname='${testname}' [${result}] actually passed, but expected to fail...")
29
# case expected to pass, result should be 0...
31
if(NOT "${result}" STREQUAL "0")
32
message(SEND_ERROR "script failed: testname='${testname}' [${result}] actually failed, but expected to pass...")
40
# This function reads the script file and calls execute_one_script_test for
41
# each testname case listed in the script. To add new cases, simply edit the
42
# script file and add an elseif() clause that matches 'regex' below.
44
function(execute_all_script_tests scriptname result)
45
file(READ "${scriptname}" script)
47
string(REPLACE ";" "\\\\;" script "${script}")
48
string(REPLACE "\n" "E;" script "${script}")
51
set(regex "^ *(if|elseif) *\\( *testname +STREQUAL +\\\"*([^\\\"\\)]+)\\\"* *\\) *# *(fail|pass) *E$")
53
foreach(line ${script})
54
if(line MATCHES "${regex}")
55
math(EXPR count "${count} + 1")
56
string(REGEX REPLACE "${regex}" "\\2" testname "${line}")
57
string(REGEX REPLACE "${regex}" "\\3" expected_result "${line}")
58
execute_one_script_test(${scriptname} ${testname} ${expected_result})
62
set(${result} ${count} PARENT_SCOPE)