2
set ( ITK_NO_IO_FACTORY_REGISTER_MANAGER 1 )
3
include(${ITK_USE_FILE})
7
set ( SimpleITKUnitTestSourceBase
8
SimpleITKTestHarness.cxx
10
sitkTransformCompare.cxx
12
add_library ( SimpleITKUnitTestBase STATIC ${SimpleITKUnitTestSourceBase} )
13
add_dependencies( SimpleITKUnitTestBase BasicFiltersSourceCode )
14
target_link_libraries( SimpleITKUnitTestBase GTest::GTest ${SimpleITK_LIBRARIES} ${ITK_LIBRARIES} )
15
target_include_directories( SimpleITKUnitTestBase
17
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
18
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
20
target_compile_options( SimpleITKUnitTestBase
22
${SimpleITK_PUBLIC_COMPILE_OPTIONS}
24
${SimpleITK_PRIVATE_COMPILE_OPTIONS} )
27
add_executable( sitkCompareDriver sitkCompareDriver.cxx )
28
target_link_libraries( sitkCompareDriver SimpleITKUnitTestBase ${SimpleITK_LIBRARIES} ${ITK_LIBRARIES})
29
target_compile_options( sitkCompareDriver
31
${SimpleITK_PRIVATE_COMPILE_OPTIONS} )
33
sitk_install_exported_target(sitkCompareDriver)
35
# Find tests generated in the binary directory
36
# To add a new file, just add it to this list. Any GoogleTests inside will be automatically
38
set ( SimpleITKUnitTestSource
41
sitkImageRegistrationMethodTests.cxx
43
sitkTypeListsTests.cxx
44
sitkBasicFiltersTests.cxx
45
sitkLabelStatisticsTest.cxx
46
sitkTransformToDisplacementFieldFilterTest.cxx
48
sitkExceptionsTests.cxx
49
sitkTransformTests.cxx
50
sitkImportImageTest.cxx
51
itkHashImageFilterTest.cxx
52
itkSliceImageFilterTest.cxx
55
if ( SimpleITK_4D_IMAGES )
56
list(APPEND SimpleITKUnitTestSource sitkImage4DTests.cxx )
59
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/CTest)
60
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/PythonTests)
61
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/LuaTests)
62
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/TclTests)
63
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/RTests)
64
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/RubyTests)
65
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/JavaTests)
66
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/CSharpTests)
69
set(TEST_HARNESS_TEMP_DIRECTORY ${SimpleITK_BINARY_DIR}/Testing/Temporary)
70
set(TEST_HARNESS_DATA_DIRECTORY ${SimpleITK_BINARY_DIR}/ExternalData/Testing/Data)
72
set( ITK_TEST_DRIVER "$<TARGET_FILE:itkTestDriver>" )
74
# Adjust Python to run in the virtualenv
75
set( PythonVirtualenvHome ${SimpleITK_BINARY_DIR}/Testing/Installation/PythonVirtualenv )
78
add_executable(SimpleITKUnitTestDriver0 SimpleITKUnitTestDriver.cxx ${SimpleITKUnitTestSource})
79
target_link_libraries ( SimpleITKUnitTestDriver0 GTest::GTest SimpleITKUnitTestBase ${SimpleITK_LIBRARIES} ${ITK_LIBRARIES} )
80
target_compile_options( SimpleITKUnitTestDriver0
82
${SimpleITK_PRIVATE_COMPILE_OPTIONS} )
86
# Glob for necessary template files up front, before the foreach loop over
89
file ( GLOB CXX_TEMPLATE_FILES "*Template*.cxx.in" )
90
file ( GLOB LUA_TEMPLATE_FILES "*Template*.lua.in" )
91
file ( GLOB PYTHON_TEMPLATE_FILES "*Template*py.in" )
92
file ( GLOB TCL_TEMPLATE_FILES "*Template*.tcl.in" )
93
file ( GLOB R_TEMPLATE_FILES "*Template*.R.in" )
94
file ( GLOB RUBY_TEMPLATE_FILES "*Template*rb.in" )
95
file ( GLOB JAVA_TEMPLATE_FILES "*Template*.java.in" )
96
file ( GLOB CSHARP_TEMPLATE_FILES "*Template*.cs.in" )
100
# Generate code for the tests in different languages
102
# Break all these source files into a bunch of separate executables
103
# base on every n files in the list.
104
message( STATUS "Generating tests...")
106
set ( _exec_i 1 ) # exec 0 is the manual tests
108
foreach ( FILTERNAME ${GENERATED_FILTER_LIST} )
110
if ( NOT _i LESS _stride )
111
add_executable(SimpleITKUnitTestDriver${_exec_i} SimpleITKUnitTestDriver.cxx ${GENERATED_TEST_SOURCE})
112
target_link_libraries ( SimpleITKUnitTestDriver${_exec_i} GTest::GTest SimpleITKUnitTestBase ${SimpleITK_LIBRARIES} )
113
target_compile_options( SimpleITKUnitTestDriver${_exec_i}
115
${SimpleITK_PRIVATE_COMPILE_OPTIONS} )
117
math(EXPR _exec_i "${_exec_i}+1")
118
set(GENERATED_TEST_SOURCE "")
122
# Set up some convenience variables
123
set (filter_json_file ${SimpleITK_SOURCE_DIR}/Code/BasicFilters/json/${FILTERNAME}.json)
124
set (template_expansion_script ${SimpleITK_SOURCE_DIR}/ExpandTemplateGenerator/ExpandTemplate.lua)
125
set (template_include_dir
126
${SimpleITK_SOURCE_DIR}/ExpandTemplateGenerator/Components)
130
# Figure out which template file gets used
133
# Get the line from the json file that indicates the correct template
134
file(STRINGS ${filter_json_file} template_line REGEX ".*template_test_filename.*")
136
# strip down to what in between the "" after the :
137
string(REGEX MATCH ":.*\"([^\"]+)\"" _out "${template_line}")
138
set(template_name "${CMAKE_MATCH_1}" )
141
set(OUTPUT_TEST_FILENAME "${SimpleITK_BINARY_DIR}/Testing/Unit/CTest/${FILTERNAME}.cmake")
142
file(REMOVE "${OUTPUT_TEST_FILENAME}")
143
set(cmd ${SimpleITK_LUA_EXECUTABLE} ${template_expansion_script} test ${filter_json_file} ${SimpleITK_SOURCE_DIR}/Testing/Unit/ ${template_include_dir} CTestTemplate.cmake.in "${OUTPUT_TEST_FILENAME}")
146
RESULT_VARIABLE failed
150
string (REPLACE ";" " " cmd "${cmd}")
151
message( FATAL_ERROR "Failed to generate \"${OUTPUT_TEST_FILENAME}\"\nCOMMAND: ${cmd} \n${error}" )
153
include("${OUTPUT_TEST_FILENAME}")
155
set(OUTPUT_TEST_FILENAME "${SimpleITK_BINARY_DIR}/Testing/Unit/sitk${FILTERNAME}Test.cxx")
157
OUTPUT ${OUTPUT_TEST_FILENAME}
158
COMMAND ${CMAKE_COMMAND} -E remove -f "${OUTPUT_TEST_FILENAME}"
159
COMMAND ${SimpleITK_LUA_EXECUTABLE} ${template_expansion_script} test ${filter_json_file} ${SimpleITK_SOURCE_DIR}/Testing/Unit/sitk ${template_include_dir} TestTemplate.cxx.in "${OUTPUT_TEST_FILENAME}"
160
DEPENDS ${filter_json_file} ${CXX_TEMPLATE_FILES}
162
add_test( NAME BasicFilters.${FILTERNAME} COMMAND SimpleITKUnitTestDriver${_exec_i} --gtest_filter=BasicFilters.${FILTERNAME}:BasicFilters.${FILTERNAME}_* )
163
set ( GENERATED_TEST_SOURCE ${GENERATED_TEST_SOURCE} ${OUTPUT_TEST_FILENAME})
166
set(OUTPUT_TEST_FILENAME "${SimpleITK_BINARY_DIR}/Testing/Unit/LuaTests/${FILTERNAME}Test.lua")
168
OUTPUT "${OUTPUT_TEST_FILENAME}"
169
COMMAND ${CMAKE_COMMAND} -E remove -f "${OUTPUT_TEST_FILENAME}"
170
COMMAND ${SimpleITK_LUA_EXECUTABLE} ${template_expansion_script} test ${filter_json_file} ${SimpleITK_SOURCE_DIR}/Testing/Unit/Lua ${template_include_dir} TestTemplate.lua.in "${OUTPUT_TEST_FILENAME}"
171
DEPENDS ${filter_json_file} ${LUA_TEMPLATE_FILES}
173
set ( WRAPPED_GENERATED_TEST_SOURCE ${WRAPPED_GENERATED_TEST_SOURCE} ${OUTPUT_TEST_FILENAME})
177
set(OUTPUT_TEST_FILENAME "${SimpleITK_BINARY_DIR}/Testing/Unit/PythonTests/${FILTERNAME}Test.py")
179
OUTPUT "${OUTPUT_TEST_FILENAME}"
180
COMMAND ${CMAKE_COMMAND} -E remove -f "${OUTPUT_TEST_FILENAME}"
181
COMMAND ${SimpleITK_LUA_EXECUTABLE} ${template_expansion_script} test ${filter_json_file} ${SimpleITK_SOURCE_DIR}/Testing/Unit/Python ${template_include_dir} TestTemplate.py.in "${OUTPUT_TEST_FILENAME}"
182
DEPENDS ${filter_json_file} ${PYTHON_TEMPLATE_FILES}
184
set ( WRAPPED_GENERATED_TEST_SOURCE ${WRAPPED_GENERATED_TEST_SOURCE} ${OUTPUT_TEST_FILENAME})
188
set(OUTPUT_TEST_FILENAME "${SimpleITK_BINARY_DIR}/Testing/Unit/TclTests/${FILTERNAME}Test.tcl")
190
OUTPUT "${OUTPUT_TEST_FILENAME}"
191
COMMAND ${CMAKE_COMMAND} -E remove -f "${OUTPUT_TEST_FILENAME}"
192
COMMAND ${SimpleITK_LUA_EXECUTABLE} ${template_expansion_script} test ${filter_json_file} ${SimpleITK_SOURCE_DIR}/Testing/Unit/Tcl ${template_include_dir} TestTemplate.tcl.in "${OUTPUT_TEST_FILENAME}"
193
DEPENDS ${filter_json_file} ${TCL_TEMPLATE_FILES}
195
set ( WRAPPED_GENERATED_TEST_SOURCE ${WRAPPED_GENERATED_TEST_SOURCE} ${OUTPUT_TEST_FILENAME})
199
set(OUTPUT_TEST_FILENAME "${SimpleITK_BINARY_DIR}/Testing/Unit/RTests/${FILTERNAME}Test.R")
201
OUTPUT "${OUTPUT_TEST_FILENAME}"
202
COMMAND ${CMAKE_COMMAND} -E remove -f "${OUTPUT_TEST_FILENAME}"
203
COMMAND ${SimpleITK_LUA_EXECUTABLE} ${template_expansion_script} test ${filter_json_file} ${SimpleITK_SOURCE_DIR}/Testing/Unit/R ${template_include_dir} TestTemplate.R.in "${OUTPUT_TEST_FILENAME}"
204
DEPENDS ${filter_json_file} ${R_TEMPLATE_FILES}
206
set ( WRAPPED_GENERATED_TEST_SOURCE ${WRAPPED_GENERATED_TEST_SOURCE} ${OUTPUT_TEST_FILENAME})
210
set(OUTPUT_TEST_FILENAME "${SimpleITK_BINARY_DIR}/Testing/Unit/RubyTests/${FILTERNAME}Test.rb")
212
OUTPUT "${OUTPUT_TEST_FILENAME}"
213
COMMAND ${CMAKE_COMMAND} -E remove -f "${OUTPUT_TEST_FILENAME}"
214
COMMAND ${SimpleITK_LUA_EXECUTABLE} ${template_expansion_script} test ${filter_json_file} ${SimpleITK_SOURCE_DIR}/Testing/Unit/Ruby ${template_include_dir} TestTemplate.rb.in "${OUTPUT_TEST_FILENAME}"
215
DEPENDS ${filter_json_file} ${RUBY_TEMPLATE_FILES}
217
set ( WRAPPED_GENERATED_TEST_SOURCE ${WRAPPED_GENERATED_TEST_SOURCE} ${OUTPUT_TEST_FILENAME})
222
set(OUTPUT_TEST_FILENAME "${SimpleITK_BINARY_DIR}/Testing/Unit/JavaTests/${FILTERNAME}Test.java")
224
OUTPUT "${OUTPUT_TEST_FILENAME}"
225
COMMAND ${CMAKE_COMMAND} -E remove -f "${OUTPUT_TEST_FILENAME}"
226
COMMAND ${SimpleITK_LUA_EXECUTABLE} ${template_expansion_script} test ${filter_json_file} ${SimpleITK_SOURCE_DIR}/Testing/Unit/Java ${template_include_dir} TestTemplate.java.in "${OUTPUT_TEST_FILENAME}"
227
DEPENDS ${filter_json_file} ${JAVA_TEMPLATE_FILES} ${SWIG_MODULE_SimpleITKJava_TARGET_NAME} )
228
set ( WRAPPED_GENERATED_TEST_SOURCE ${WRAPPED_GENERATED_TEST_SOURCE} ${OUTPUT_TEST_FILENAME})
233
set( OUTPUT_TEST_FILENAME "${SimpleITK_BINARY_DIR}/Testing/Unit/CSharpTests/${FILTERNAME}Test.cs" )
235
OUTPUT "${OUTPUT_TEST_FILENAME}"
236
COMMAND ${CMAKE_COMMAND} -E remove -f "${OUTPUT_TEST_FILENAME}"
237
COMMAND ${SimpleITK_LUA_EXECUTABLE} ${template_expansion_script} test ${filter_json_file} ${SimpleITK_SOURCE_DIR}/Testing/Unit/CSharp ${template_include_dir} TestTemplate.cs.in "${OUTPUT_TEST_FILENAME}"
238
DEPENDS ${filter_json_file} ${CSHARP_TEMPLATE_FILES}
240
set ( WRAPPED_GENERATED_TEST_SOURCE ${WRAPPED_GENERATED_TEST_SOURCE} ${OUTPUT_TEST_FILENAME})
242
endif() # if template_name
243
math(EXPR _i "${_i}+1")
247
message( STATUS "Generating tests...Done")
249
add_executable(SimpleITKUnitTestDriver${_exec_i} SimpleITKUnitTestDriver.cxx ${GENERATED_TEST_SOURCE})
250
target_link_libraries ( SimpleITKUnitTestDriver${_exec_i} GTest::GTest SimpleITKUnitTestBase ${SimpleITK_LIBRARIES} )
251
target_compile_options( SimpleITKUnitTestDriver${_exec_i}
253
${SimpleITK_PRIVATE_COMPILE_OPTIONS} )
256
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/SimpleITKTestHarnessPaths.h.in
257
${CMAKE_CURRENT_BINARY_DIR}/SimpleITKTestHarnessPaths.h ESCAPE_QUOTES)
259
add_custom_target(WrappedGeneratedTests ALL
260
DEPENDS ${WRAPPED_GENERATED_TEST_SOURCE}
263
if(MSVC_VERSION EQUAL 1700)
264
# Tuples are limited by _VARIADIC_MAX in VS11. The variadic
265
# templates are not deep enough by default. We are not currently
266
# using the GTest features which require tuple, so just disable them
267
# and hope that upstream premanetly addresses the problem, with out
268
# required more CMake core for compiler issues.
269
add_definitions(-DGTEST_HAS_TR1_TUPLE=0 )
272
add_executable(sitkShowTest sitkShowTest.cxx )
273
target_link_libraries ( sitkShowTest GTest::GTest ${SimpleITK_LIBRARIES} SimpleITKUnitTestBase )
274
target_compile_options( sitkShowTest
276
${SimpleITK_PRIVATE_COMPILE_OPTIONS} )
279
add_executable( sitkSystemInformationTest sitkSystemInformationTest.cxx )
280
target_link_libraries( sitkSystemInformationTest ${SimpleITK_LIBRARIES} ${ITK_LIBRARIES})
281
add_test( NAME sitkSystemInformaionTest COMMAND sitkSystemInformationTest ${CMAKE_BINARY_DIR} )
282
target_compile_options( sitkSystemInformationTest
284
${SimpleITK_PRIVATE_COMPILE_OPTIONS} )
288
gtest_add_tests(SimpleITKUnitTestDriver0 "" ${SimpleITKUnitTestSource})
291
#######################################################
293
# Tests which use the itkTestDriver
295
#######################################################
298
include(${CMAKE_CURRENT_SOURCE_DIR}/AdditionalTests.cmake)