Jelajahi Sumber

Increase coverage. Intentionally trigger error conditions. Call all the else*/end* functions without proper opening or containing code structure: else, elseif, endforeach, endfunction, endif, endmacro, endwhile.

David Cole 16 tahun lalu
induk
melakukan
5b74d031db

+ 5 - 0
Tests/CMakeTests/CMakeLists.txt

@@ -26,6 +26,11 @@ AddCMakeTest(String "")
 AddCMakeTest(Math "")
 AddCMakeTest(CMakeMinimumRequired "")
 
+SET(EndStuff_PreArgs
+  "-Ddir:STRING=${CMAKE_CURRENT_BINARY_DIR}/EndStuffTest"
+  )
+AddCMakeTest(EndStuff "${EndStuff_PreArgs}")
+
 SET(GetPrerequisites_PreArgs
   "-DCTEST_CONFIGURATION_TYPE:STRING=\\\${CTEST_CONFIGURATION_TYPE}"
   )

+ 18 - 0
Tests/CMakeTests/EndStuffTest.cmake.in

@@ -0,0 +1,18 @@
+# Execute each test listed in:
+#
+set(scriptname "@CMAKE_CURRENT_SOURCE_DIR@/EndStuffTestScript.cmake")
+set(number_of_tests_expected 9)
+
+include("@CMAKE_CURRENT_SOURCE_DIR@/ExecuteScriptTests.cmake")
+execute_all_script_tests(${scriptname} number_of_tests_executed)
+
+# And verify that number_of_tests_executed is at least as many as we know
+# about as of this writing...
+#
+message(STATUS "scriptname='${scriptname}'")
+message(STATUS "number_of_tests_executed='${number_of_tests_executed}'")
+message(STATUS "number_of_tests_expected='${number_of_tests_expected}'")
+
+if(number_of_tests_executed LESS number_of_tests_expected)
+  message(FATAL_ERROR "error: some test cases were skipped")
+endif()

+ 70 - 0
Tests/CMakeTests/EndStuffTestScript.cmake

@@ -0,0 +1,70 @@
+message(STATUS "testname='${testname}'")
+
+if(testname STREQUAL bad_else) # fail
+  file(WRITE "${dir}/${testname}.cmake"
+"else()
+")
+  execute_process(COMMAND ${CMAKE_COMMAND} -P "${dir}/${testname}.cmake"
+    RESULT_VARIABLE rv)
+  if(NOT rv EQUAL 0)
+    message(FATAL_ERROR "${testname} failed")
+  endif()
+
+elseif(testname STREQUAL bad_elseif) # fail
+  file(WRITE "${dir}/${testname}.cmake"
+"elseif()
+")
+  execute_process(COMMAND ${CMAKE_COMMAND} -P "${dir}/${testname}.cmake"
+    RESULT_VARIABLE rv)
+  if(NOT rv EQUAL 0)
+    message(FATAL_ERROR "${testname} failed")
+  endif()
+
+elseif(testname STREQUAL bad_endforeach) # fail
+  endforeach()
+
+elseif(testname STREQUAL bad_endfunction) # fail
+  endfunction()
+
+elseif(testname STREQUAL bad_endif) # fail
+  file(WRITE "${dir}/${testname}.cmake"
+"cmake_minimum_required(VERSION 2.8)
+endif()
+")
+  execute_process(COMMAND ${CMAKE_COMMAND} -P "${dir}/${testname}.cmake"
+    RESULT_VARIABLE rv)
+  if(NOT rv EQUAL 0)
+    message(FATAL_ERROR "${testname} failed")
+  endif()
+
+elseif(testname STREQUAL endif_low_min_version) # pass
+  file(WRITE "${dir}/${testname}.cmake"
+"cmake_minimum_required(VERSION 1.2)
+endif()
+")
+  execute_process(COMMAND ${CMAKE_COMMAND} -P "${dir}/${testname}.cmake"
+    RESULT_VARIABLE rv)
+  if(NOT rv EQUAL 0)
+    message(FATAL_ERROR "${testname} failed")
+  endif()
+
+elseif(testname STREQUAL endif_no_min_version) # pass
+  file(WRITE "${dir}/${testname}.cmake"
+"endif()
+")
+  execute_process(COMMAND ${CMAKE_COMMAND} -P "${dir}/${testname}.cmake"
+    RESULT_VARIABLE rv)
+  if(NOT rv EQUAL 0)
+    message(FATAL_ERROR "${testname} failed")
+  endif()
+
+elseif(testname STREQUAL bad_endmacro) # fail
+  endmacro()
+
+elseif(testname STREQUAL bad_endwhile) # fail
+  endwhile()
+
+else() # fail
+  message(FATAL_ERROR "testname='${testname}' - error: no such test in '${CMAKE_CURRENT_LIST_FILE}'")
+
+endif()

+ 1 - 0
Tests/CMakeTests/ExecuteScriptTests.cmake

@@ -6,6 +6,7 @@ function(execute_one_script_test scriptname testname expected_result)
 
   execute_process(
     COMMAND ${CMAKE_COMMAND}
+      -D "dir:STRING=${dir}"
       -D "testname:STRING=${testname}"
       -P "${scriptname}"
     OUTPUT_VARIABLE out