forked from InsightSoftwareConsortium/ITK
/
ITKModuleTest.cmake
159 lines (147 loc) · 5.5 KB
/
ITKModuleTest.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
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# This file contains CMake functions and macros used when testing ITK modules.
#-----------------------------------------------------------------------------
# Create source code, compile and link a test driver
# Two variables must be defined before including this file.
# KIT should define a unique name for the test driver.
# KitTests should contain a list of test file names.
# Arguments - Input
# KIT - the name of the test directory
# KIT_LIBS - a list of libraries needed to link the test driver
# KitTests - a list of tests to be included in the test driver
# ADDITIONAL_SRC (optional) - additional source files, which don't contain tests
macro(CreateTestDriver KIT KIT_LIBS KitTests)
set(ADDITIONAL_SRC ${ARGN})
if(EMSCRIPTEN)
set(emscripten_before "
EM_ASM(
var cmake_source_dir = '${CMAKE_SOURCE_DIR}'.split('/');
// This is intentionally global so it can be unmounted at the end.
source_mount_dir = null;
if(cmake_source_dir[1] === 'home') {
source_mount_dir = cmake_source_dir.slice(0, 3).join('/');
}
else {
source_mount_dir = cmake_source_dir.slice(0, 2).join('/');
}
FS.mkdir(source_mount_dir);
FS.mount(NODEFS, { root: source_mount_dir }, source_mount_dir);
var cmake_binary_dir = '${CMAKE_BINARY_DIR}'.split('/');
// This is intentionally global so it can be unmounted at the end.
binary_mount_dir = null;
if(cmake_binary_dir[1] === 'home') {
binary_mount_dir = cmake_binary_dir.slice(0, 3).join('/');
}
else {
binary_mount_dir = cmake_binary_dir.slice(0, 2).join('/');
}
if(source_mount_dir != binary_mount_dir) {
FS.mkdir(binary_mount_dir);
FS.mount(NODEFS, { root: binary_mount_dir }, binary_mount_dir);
}
);
")
set(emscripten_after "
EM_ASM(
FS.unmount(source_mount_dir);
if(source_mount_dir != binary_mount_dir) {
FS.unmount(binary_mount_dir);
}
);
")
endif()
set(CMAKE_TESTDRIVER_BEFORE_TESTMAIN "${emscripten_before}#include \"itkTestDriverBeforeTest.inc\"")
set(CMAKE_TESTDRIVER_AFTER_TESTMAIN "#include \"itkTestDriverAfterTest.inc\"${emscripten_after}")
create_test_sourcelist(Tests ${KIT}TestDriver.cxx
${KitTests}
EXTRA_INCLUDE itkTestDriverIncludeRequiredIOFactories.h
FUNCTION ProcessArgumentsAndRegisterRequiredFactories
)
add_executable(${KIT}TestDriver ${KIT}TestDriver.cxx ${Tests} ${ADDITIONAL_SRC})
target_link_libraries(${KIT}TestDriver LINK_PUBLIC ${KIT_LIBS} ${ITKTestKernel_LIBRARIES})
itk_module_target_label(${KIT}TestDriver)
endmacro()
macro(CreateTestDriver_SupportBuildInIOFactories KIT KIT_LIBS KitTests)
set(ADDITIONAL_SRC ${ARGN} )
if(EMSCRIPTEN)
set(emscripten_before "
EM_ASM(
var cmake_source_dir = '${CMAKE_SOURCE_DIR}'.split('/');
// This is intentionally global so it can be unmounted at the end.
source_mount_dir = null;
if(cmake_source_dir[1] === 'home') {
source_mount_dir = cmake_source_dir.slice(0, 3).join('/');
}
else {
source_mount_dir = cmake_source_dir.slice(0, 2).join('/');
}
FS.mkdir(source_mount_dir);
FS.mount(NODEFS, { root: source_mount_dir }, source_mount_dir);
// This is intentionally global so it can be unmounted at the end.
binary_mount_dir = null;
var cmake_binary_dir = '${CMAKE_BINARY_DIR}'.split('/');
if(cmake_binary_dir[1] === 'home') {
binary_mount_dir = cmake_binary_dir.slice(0, 3).join('/');
}
else {
binary_mount_dir = cmake_binary_dir.slice(0, 2).join('/');
}
if(source_mount_dir != binary_mount_dir) {
FS.mkdir(binary_mount_dir);
FS.mount(NODEFS, { root: binary_mount_dir }, binary_mount_dir);
}
);
")
set(emscripten_after "
EM_ASM(
FS.unmount(source_mount_dir);
if(source_mount_dir != binary_mount_dir) {
FS.unmount(binary_mount_dir);
}
);
")
endif()
set(CMAKE_TESTDRIVER_BEFORE_TESTMAIN "${emscripten_before}#include \"itkTestDriverBeforeTest.inc\"")
set(CMAKE_TESTDRIVER_AFTER_TESTMAIN "#include \"itkTestDriverAfterTest.inc\"${emscripten_after}")
create_test_sourcelist(Tests ${KIT}TestDriver.cxx
${KitTests}
EXTRA_INCLUDE itkTestDriverIncludeBuiltInIOFactories.h
FUNCTION ProcessArgumentsAndRegisterBuiltInFactories
)
add_executable(${KIT}TestDriver ${KIT}TestDriver.cxx ${Tests} ${ADDITIONAL_SRC})
target_link_libraries(${KIT}TestDriver LINK_PUBLIC ${KIT_LIBS} ${ITKTestKernel_LIBRARIES})
itk_module_target_label(${KIT}TestDriver)
endmacro()
#-----------------------------------------------------------------------------
# ITK wrapper for add_test that automatically sets the test's LABELS property
# to the value of its containing module.
#
function(itk_add_test)
# Add tests with data in the ITKData group.
ExternalData_add_test(ITKData ${ARGN})
if("NAME" STREQUAL "${ARGV0}")
set(_iat_testname ${ARGV1})
else()
set(_iat_testname ${ARGV0})
endif()
if(itk-module)
set(_label ${itk-module})
if(TARGET ${itk-module}-all AND "${ARGN}" MATCHES "DATA{")
add_dependencies(${itk-module}-all ITKData)
endif()
else()
set(_label ${main_project_name})
endif()
set_property(TEST ${_iat_testname} PROPERTY LABELS ${_label})
endfunction()
#-----------------------------------------------------------------------------
# ITK function to ignore a test
#
function(itk_tests_ignore)
set_property(GLOBAL APPEND PROPERTY CTEST_CUSTOM_TESTS_IGNORE ${ARGN})
endfunction()
#-----------------------------------------------------------------------------
# ITK function to ignore a test during MemCheck
#
function(itk_memcheck_ignore)
set_property(GLOBAL APPEND PROPERTY CTEST_CUSTOM_MEMCHECK_IGNORE ${ARGN})
endfunction()