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