test.cmake.in 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. cmake_minimum_required(VERSION 3.10)
  2. set(CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Tests/CTestCoverageCollectGCOV/TestProject")
  3. set(CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestCoverageCollectGCOV/TestProject")
  4. set(CTEST_CMAKE_GENERATOR "@CMAKE_GENERATOR@")
  5. ctest_start(Experimental)
  6. ctest_configure()
  7. ctest_build()
  8. ctest_test()
  9. #------------------------------------------------------------------------------#
  10. # Common setup for all tests.
  11. #------------------------------------------------------------------------------#
  12. list(APPEND CTEST_CUSTOM_COVERAGE_EXCLUDE
  13. "/foo/something"
  14. "/3rdparty/"
  15. "/bar/somethingelse"
  16. "/CMakeFiles/"
  17. )
  18. list(APPEND CTEST_EXTRA_COVERAGE_GLOB "*.cpp")
  19. include(CTestCoverageCollectGCOV)
  20. set(expected_out
  21. CMakeFiles/myexecutable.dir/Labels.json
  22. Testing/CoverageInfo/data.json
  23. Testing/CoverageInfo/extra.cpp.gcov
  24. Testing/CoverageInfo/main.cpp.gcov
  25. uncovered/extra/uncovered1.cpp
  26. uncovered/uncovered2.cpp
  27. )
  28. # A symbolic link in the path can cause tar to put an equivalent, but not
  29. # minimal file name to some files in the tar file. Convert paths to absolute
  30. # then back to relative to get them in canonical form (or maybe this is a bug
  31. # in how the tarball is generated?)
  32. function(to_relative_paths real_paths paths)
  33. file(REAL_PATH "${CTEST_BINARY_DIRECTORY}" base)
  34. foreach(file ${paths})
  35. file(REAL_PATH "${file}" real_path BASE_DIRECTORY "${base}")
  36. file(RELATIVE_PATH relative_path "${base}" "${real_path}")
  37. list(APPEND local_real_paths "${relative_path}")
  38. message(DEBUG "${file} -> ${real_path} -> ${relative_path}")
  39. endforeach()
  40. set("${real_paths}" "${local_real_paths}" PARENT_SCOPE)
  41. endfunction()
  42. #------------------------------------------------------------------------------#
  43. # Test 1: with standard arguments
  44. #------------------------------------------------------------------------------#
  45. set(tar_file ${CTEST_BINARY_DIRECTORY}/gcov.tbz)
  46. ctest_coverage_collect_gcov(
  47. TARBALL "${tar_file}"
  48. SOURCE "${CTEST_SOURCE_DIRECTORY}"
  49. BUILD "${CTEST_BINARY_DIRECTORY}"
  50. GCOV_COMMAND "${CMAKE_COMMAND}"
  51. GCOV_OPTIONS -P "@CMake_SOURCE_DIR@/Tests/CTestCoverageCollectGCOV/fakegcov.cmake")
  52. file(REMOVE_RECURSE "${CTEST_BINARY_DIRECTORY}/uncovered")
  53. execute_process(COMMAND
  54. ${CMAKE_COMMAND} -E tar tf ${tar_file}
  55. OUTPUT_VARIABLE out
  56. WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
  57. OUTPUT_STRIP_TRAILING_WHITESPACE
  58. )
  59. string(REPLACE "\n" ";" out "${out}")
  60. to_relative_paths(out "${out}")
  61. list(SORT out)
  62. if("${out}" STREQUAL "${expected_out}")
  63. message("PASSED with correct output: ${out}")
  64. else()
  65. message(FATAL_ERROR "FAILED: expected:\n${expected_out}\nGot:\n${out}")
  66. endif()
  67. #------------------------------------------------------------------------------#
  68. # Test 2: with optional argument: TARBALL_COMPRESSION "GZIP"
  69. #------------------------------------------------------------------------------#
  70. set(tar_file ${CTEST_BINARY_DIRECTORY}/gcov.tgz)
  71. ctest_coverage_collect_gcov(
  72. TARBALL "${tar_file}"
  73. TARBALL_COMPRESSION "GZIP"
  74. SOURCE "${CTEST_SOURCE_DIRECTORY}"
  75. BUILD "${CTEST_BINARY_DIRECTORY}"
  76. GCOV_COMMAND "${CMAKE_COMMAND}"
  77. GCOV_OPTIONS -P "@CMake_SOURCE_DIR@/Tests/CTestCoverageCollectGCOV/fakegcov.cmake")
  78. file(REMOVE_RECURSE "${CTEST_BINARY_DIRECTORY}/uncovered")
  79. execute_process(COMMAND
  80. ${CMAKE_COMMAND} -E tar tf ${tar_file}
  81. OUTPUT_VARIABLE out
  82. WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
  83. OUTPUT_STRIP_TRAILING_WHITESPACE
  84. )
  85. string(REPLACE "\n" ";" out "${out}")
  86. to_relative_paths(out "${out}")
  87. list(SORT out)
  88. if("${out}" STREQUAL "${expected_out}")
  89. message("PASSED with correct output: ${out}")
  90. else()
  91. message(FATAL_ERROR "FAILED: expected:\n${expected_out}\nGot:\n${out}")
  92. endif()
  93. #------------------------------------------------------------------------------#
  94. # Test 3: with optional argument: TARBALL_COMPRESSION "FROM_EXT"
  95. #------------------------------------------------------------------------------#
  96. set(tar_file ${CTEST_BINARY_DIRECTORY}/gcov.txz)
  97. ctest_coverage_collect_gcov(
  98. TARBALL "${tar_file}"
  99. TARBALL_COMPRESSION "FROM_EXT"
  100. SOURCE "${CTEST_SOURCE_DIRECTORY}"
  101. BUILD "${CTEST_BINARY_DIRECTORY}"
  102. GCOV_COMMAND "${CMAKE_COMMAND}"
  103. GCOV_OPTIONS -P "@CMake_SOURCE_DIR@/Tests/CTestCoverageCollectGCOV/fakegcov.cmake")
  104. file(REMOVE_RECURSE "${CTEST_BINARY_DIRECTORY}/uncovered")
  105. execute_process(COMMAND
  106. ${CMAKE_COMMAND} -E tar tf ${tar_file}
  107. OUTPUT_VARIABLE out
  108. WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
  109. OUTPUT_STRIP_TRAILING_WHITESPACE
  110. )
  111. string(REPLACE "\n" ";" out "${out}")
  112. to_relative_paths(out "${out}")
  113. list(SORT out)
  114. if("${out}" STREQUAL "${expected_out}")
  115. message("PASSED with correct output: ${out}")
  116. else()
  117. message(FATAL_ERROR "FAILED: expected:\n${expected_out}\nGot:\n${out}")
  118. endif()
  119. #------------------------------------------------------------------------------#
  120. # Test 4: with optional argument: TARBALL_COMPRESSION "FALSE"
  121. #------------------------------------------------------------------------------#
  122. set(tar_file ${CTEST_BINARY_DIRECTORY}/gcov.tar)
  123. ctest_coverage_collect_gcov(
  124. TARBALL "${tar_file}"
  125. TARBALL_COMPRESSION "FALSE"
  126. SOURCE "${CTEST_SOURCE_DIRECTORY}"
  127. BUILD "${CTEST_BINARY_DIRECTORY}"
  128. GCOV_COMMAND "${CMAKE_COMMAND}"
  129. GCOV_OPTIONS -P "@CMake_SOURCE_DIR@/Tests/CTestCoverageCollectGCOV/fakegcov.cmake")
  130. file(REMOVE_RECURSE "${CTEST_BINARY_DIRECTORY}/uncovered")
  131. execute_process(COMMAND
  132. ${CMAKE_COMMAND} -E tar tf ${tar_file}
  133. OUTPUT_VARIABLE out
  134. WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
  135. OUTPUT_STRIP_TRAILING_WHITESPACE
  136. )
  137. string(REPLACE "\n" ";" out "${out}")
  138. to_relative_paths(out "${out}")
  139. list(SORT out)
  140. if("${out}" STREQUAL "${expected_out}")
  141. message("PASSED with correct output: ${out}")
  142. else()
  143. message(FATAL_ERROR "FAILED: expected:\n${expected_out}\nGot:\n${out}")
  144. endif()
  145. #------------------------------------------------------------------------------#
  146. # Test 5: with optional argument: TARBALL_COMPRESSION "ZSTD"
  147. #------------------------------------------------------------------------------#
  148. set(tar_file ${CTEST_BINARY_DIRECTORY}/gcov.zstd)
  149. ctest_coverage_collect_gcov(
  150. TARBALL "${tar_file}"
  151. TARBALL_COMPRESSION "ZSTD"
  152. SOURCE "${CTEST_SOURCE_DIRECTORY}"
  153. BUILD "${CTEST_BINARY_DIRECTORY}"
  154. GCOV_COMMAND "${CMAKE_COMMAND}"
  155. GCOV_OPTIONS -P "@CMake_SOURCE_DIR@/Tests/CTestCoverageCollectGCOV/fakegcov.cmake")
  156. file(REMOVE_RECURSE "${CTEST_BINARY_DIRECTORY}/uncovered")
  157. execute_process(COMMAND
  158. ${CMAKE_COMMAND} -E tar tf ${tar_file}
  159. OUTPUT_VARIABLE out
  160. WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}
  161. OUTPUT_STRIP_TRAILING_WHITESPACE
  162. )
  163. string(REPLACE "\n" ";" out "${out}")
  164. to_relative_paths(out "${out}")
  165. list(SORT out)
  166. if("${out}" STREQUAL "${expected_out}")
  167. message("PASSED with correct output: ${out}")
  168. else()
  169. message(FATAL_ERROR "FAILED: expected:\n${expected_out}\nGot:\n${out}")
  170. endif()