forked from os-autoinst/os-autoinst
/
test-targets.cmake
119 lines (109 loc) · 4.81 KB
/
test-targets.cmake
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
cmake_minimum_required(VERSION 3.3.0)
enable_testing()
# enable verbose CTest output by default
# note: We're mainly using prove which already provides a condensed output by default. To be able
# to follow the prove output as usual and configure the test verbosity on prove-level it makes
# sense to configure CTest to be verbose by default.
option(VERBOSE_CTEST "enables verbose tests on CTest level" ON)
if (VERBOSE_CTEST)
set(CMAKE_CTEST_COMMAND ${CMAKE_CTEST_COMMAND} -V)
endif ()
# test for install target
add_test(
NAME test-installed-files
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/check-installed-files" "${CMAKE_MAKE_PROGRAM}"
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}"
)
# add test for YAML syntax
find_program(YAMLLINT_PATH yamllint)
if (YAMLLINT_PATH)
add_test(
NAME test-local-yaml-syntax
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/check-yaml-syntax" "${YAMLLINT_PATH}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
else ()
message(STATUS "Set YAMLLINT_PATH to the path of the yamllint executable to enable YAML syntax checks.")
endif ()
# add tidy check
add_test(
NAME test-local-tidy
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/tidy" --check
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
# add test for Perl syntax/style issues
find_program(PERLCRITIC_PATH perlcritic)
if (PERLCRITIC_PATH)
add_test(
NAME test-local-perl-style
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/check-perl-style" "${PERLCRITIC_PATH}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
else ()
message(STATUS "Set PERLCRITIC_PATH to the path of the perlcritic executable to enable Perl syntax/style checks.")
endif ()
# add spell checking for test API documentation
find_program(PODSPELL_PATH podspell)
find_program(SPELL_PATH spell)
if (PODSPELL_PATH AND SPELL_PATH)
add_test(
NAME test-doc-testapi-spellchecking
COMMAND sh -c "\"${PODSPELL_PATH}\" \"${CMAKE_CURRENT_SOURCE_DIR}/testapi.pm\" | \"${SPELL_PATH}\""
)
else ()
message(STATUS "Set PODSPELL_PATH/SPELL_PATH to the path of the podspell/spell executable to enable spell checking.")
endif ()
# add targets for invoking Perl test suite
find_program(PROVE_PATH prove)
if (PROVE_PATH)
set(INVOKE_TEST_ARGS --prove-tool "${PROVE_PATH}" --make-tool "${CMAKE_MAKE_PROGRAM}" --build-directory "${CMAKE_CURRENT_BINARY_DIR}")
add_test(
NAME test-perl-testsuite
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/invoke-tests" ${INVOKE_TEST_ARGS}
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
else ()
message(STATUS "Set PROVE_PATH to the path of the prove executable to enable running the Perl testsuite.")
endif ()
# add build system targets for invoking specific tests
add_custom_target(test-local COMMAND ${CMAKE_CTEST_COMMAND} -R "test-local-.*" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
add_custom_target(test-doc COMMAND ${CMAKE_CTEST_COMMAND} -R "test-doc-.*" WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
add_custom_target(test-installed-files COMMAND ${CMAKE_CTEST_COMMAND} -R "test-installed-files" WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
add_custom_target(test-perl-testsuite COMMAND ${CMAKE_CTEST_COMMAND} -R "test-perl-testsuite" WORKING_DIRECTORY ${CMAKE_BINARY_DIR})
add_dependencies(test-perl-testsuite symlinks)
# add target for computing test coverage of Perl test suite
find_program(COVER_PATH cover)
if (COVER_PATH AND PROVE_PATH)
add_custom_command(
COMMENT "Run Perl testsuite with coverage instrumentation"
COMMAND "${CMAKE_CURRENT_SOURCE_DIR}/tools/invoke-tests" --coverage ${INVOKE_TEST_ARGS}
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/cover_db/structure"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
)
add_custom_command(
COMMENT "Generate coverage report (HTML)"
COMMAND "${COVER_PATH}" -report html_basic "${CMAKE_CURRENT_BINARY_DIR}/cover_db"
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/cover_db/structure"
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/coverage.html"
)
add_custom_target(
coverage-reset
COMMENT "Resetting previously gathered Perl test suite coverage"
COMMAND rm -r "${CMAKE_CURRENT_BINARY_DIR}/cover_db"
)
add_custom_target(
coverage
COMMENT "Perl test suite coverage (HTML)"
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/coverage.html"
)
add_dependencies(coverage symlinks)
add_custom_target(
coverage-codecov
COMMENT "Perl test suite coverage (codecov)"
COMMAND "${COVER_PATH}" -report codecov "${CMAKE_CURRENT_BINARY_DIR}/cover_db"
DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/cover_db/structure"
)
add_dependencies(coverage-codecov symlinks)
else ()
message(STATUS "Set COVER_PATH to the path of the cover executable to enable coverage computition of the Perl testsuite.")
endif ()