ExecuteScriptTests.cmake 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # This function calls the ${scriptname} file to execute one test case:
  2. #
  3. function(execute_one_script_test scriptname testname expected_result)
  4. message("execute_one_script_test")
  5. message("testname=[${testname}]")
  6. execute_process(
  7. COMMAND ${CMAKE_COMMAND}
  8. -D "dir:STRING=${dir}"
  9. -D "testname:STRING=${testname}"
  10. -P "${scriptname}"
  11. OUTPUT_VARIABLE out
  12. ERROR_VARIABLE err
  13. RESULT_VARIABLE result
  14. OUTPUT_STRIP_TRAILING_WHITESPACE
  15. ERROR_STRIP_TRAILING_WHITESPACE
  16. )
  17. message("out=[${out}]")
  18. message("err=[${err}]")
  19. if(expected_result STREQUAL "fail")
  20. # case expected to fail, result should be non-0...
  21. # error if it's 0
  22. if("${result}" STREQUAL "0")
  23. message(SEND_ERROR "script failed: testname='${testname}' [${result}] actually passed, but expected to fail...")
  24. endif()
  25. else()
  26. # case expected to pass, result should be 0...
  27. # error if it's non-0
  28. if(NOT "${result}" STREQUAL "0")
  29. message(SEND_ERROR "script failed: testname='${testname}' [${result}] actually failed, but expected to pass...")
  30. endif()
  31. endif()
  32. message("")
  33. endfunction()
  34. # This function reads the script file and calls execute_one_script_test for
  35. # each testname case listed in the script. To add new cases, simply edit the
  36. # script file and add an elseif() clause that matches 'regex' below.
  37. #
  38. function(execute_all_script_tests scriptname result)
  39. file(READ "${scriptname}" script)
  40. string(REPLACE ";" "\\\\;" script "${script}")
  41. string(REPLACE "\n" "E;" script "${script}")
  42. set(count 0)
  43. set(regex "^ *(if|elseif) *\\( *testname +STREQUAL +\\\"*([^\\\"\\)]+)\\\"* *\\) *# *(fail|pass) *E$")
  44. foreach(line ${script})
  45. if(line MATCHES "${regex}")
  46. set(testname "${CMAKE_MATCH_2}")
  47. set(expected_result "${CMAKE_MATCH_3}")
  48. math(EXPR count "${count} + 1")
  49. execute_one_script_test(${scriptname} ${testname} ${expected_result})
  50. endif()
  51. endforeach()
  52. set(${result} ${count} PARENT_SCOPE)
  53. endfunction()