Medical Imaging Interaction Toolkit  2018.4.99-389bf124
Medical Imaging Interaction Toolkit
mitkMacroCreateModuleTests.cmake
Go to the documentation of this file.
1 #
2 # Create tests and testdriver for this module
3 #
4 # Usage: MITK_CREATE_MODULE_TESTS( [EXTRA_DRIVER_INIT init_code] )
5 #
6 # EXTRA_DRIVER_INIT is inserted as c++ code in the testdriver and will be executed before each test
7 #
9  cmake_parse_arguments(MODULE_TEST
10  "US_MODULE;NO_INIT" "EXTRA_DRIVER_INIT;EXTRA_DRIVER_INCLUDE" "EXTRA_DEPENDS;DEPENDS;PACKAGE_DEPENDS" ${ARGN})
11 
12  if(BUILD_TESTING AND MODULE_IS_ENABLED)
13  include(files.cmake)
14  include_directories(.)
15 
16  set(TESTDRIVER ${MODULE_NAME}TestDriver)
17 
18  set(MODULE_TEST_EXTRA_DRIVER_INIT "${MODULE_TEST_EXTRA_DRIVER_INIT}")
19 
20  if(MITK_XVFB_TESTING)
21  set(xvfb_run "xvfb-run" "--auto-servernum")
22  else()
23  set(xvfb_run )
24  endif()
25 
26  if(MODULE_TEST_US_MODULE)
27  message(WARNING "The US_MODULE argument is deprecated and should be removed")
28  endif()
29 
30  if(MODULE_TEST_US_MODULE AND MODULE_TEST_NO_INIT)
31  message(WARNING "Conflicting arguments US_MODULE and NO_INIT: NO_INIT wins.")
32  endif()
33 
34  set(_no_init)
35  if(MODULE_TEST_NO_INIT)
36  set(_no_init NO_INIT)
37  endif()
38 
39  set(MITK_MODULE_NAME_REGEX_MATCH )
40  set(MITK_MODULE_NAME_REGEX_NOT_MATCH )
41 
42  set(_testdriver_file_list ${CMAKE_CURRENT_BINARY_DIR}/testdriver_files.cmake)
43  configure_file(${MITK_CMAKE_DIR}/mitkTestDriverFiles.cmake.in ${_testdriver_file_list} @ONLY)
44  mitk_create_executable(${TESTDRIVER}
45  DEPENDS ${MODULE_NAME} ${MODULE_TEST_DEPENDS} ${MODULE_TEST_EXTRA_DEPENDS} MitkTestingHelper
46  PACKAGE_DEPENDS ${MODULE_TEST_PACKAGE_DEPENDS}
47  SUBPROJECTS ${MODULE_SUBPROJECTS}
48  FILES_CMAKE ${_testdriver_file_list}
49  NO_FEATURE_INFO NO_BATCH_FILE ${_no_init})
50  set_property(TARGET ${EXECUTABLE_TARGET} PROPERTY FOLDER "${MITK_ROOT_FOLDER}/Modules/Tests")
51 
52  #
53  # Now tell CMake which tests should be run. This is done automatically
54  # for all tests in ${KITNAME}_TESTS and ${KITNAME}_IMAGE_TESTS. The IMAGE_TESTS
55  # are run for each image in the TESTIMAGES list.
56  #
57  include(files.cmake)
58  foreach( test ${MODULE_TESTS} )
59  get_filename_component(TName ${test} NAME_WE)
60  add_test(NAME ${TName} COMMAND ${xvfb_run} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTDRIVER} ${TName})
61  # Add labels for CDash subproject support
62  if(MODULE_SUBPROJECTS)
63  set_property(TEST ${TName} PROPERTY LABELS ${MODULE_SUBPROJECTS} MITK)
64  endif()
65  mitkFunctionGetLibrarySearchPaths(MITK_RUNTIME_PATH_RELEASE release RELEASE)
66  mitkFunctionGetLibrarySearchPaths(MITK_RUNTIME_PATH_DEBUG debug DEBUG)
67  set(test_env_path ${MITK_RUNTIME_PATH_RELEASE} ${MITK_RUNTIME_PATH_DEBUG} $ENV{PATH})
68  list(REMOVE_DUPLICATES test_env_path)
69  string (REGEX REPLACE "\;" "\\\;" test_env_path "${test_env_path}")
70  set_property(TEST ${TName} PROPERTY ENVIRONMENT "PATH=${test_env_path}" APPEND)
71  set_property(TEST ${TName} PROPERTY SKIP_RETURN_CODE 77)
72  endforeach()
73 
74  set(TEST_TYPES IMAGE SURFACE POINTSET) # add other file types here
75 
76  foreach(test_type ${TEST_TYPES})
77  foreach(test_data ${MODULE_TEST${test_type}} ${ADDITIONAL_TEST_${test_type}})
78  if(EXISTS ${test_data})
79  set(TEST_DATA_FULL_PATH ${test_data})
80  else()
81  # todo: maybe search other paths as well
82  # yes, please in mitk/Testing/Data, too
83  set(TEST_DATA_FULL_PATH ${MITK_DATA_DIR}/${test_data})
84  endif()
85 
86  if(EXISTS ${TEST_DATA_FULL_PATH})
87  foreach( test ${MODULE_${test_type}_TESTS})
88  get_filename_component(TName ${test} NAME_WE)
89  get_filename_component(DName ${TEST_DATA_FULL_PATH} NAME)
90  add_test(NAME ${TName}_${DName} COMMAND ${xvfb_run} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${TESTDRIVER} ${TName} ${TEST_DATA_FULL_PATH})
91  # Add labels for CDash subproject support
92  if(MODULE_SUBPROJECTS)
93  set_property(TEST ${TName}_${DName} PROPERTY LABELS ${MODULE_SUBPROJECTS} MITK)
94  endif()
95  set_property(TEST ${TName}_${DName} PROPERTY ENVIRONMENT "PATH=${test_env_path}" APPEND)
96  set_property(TEST ${TName}_${DName} PROPERTY SKIP_RETURN_CODE 77)
97  endforeach()
98  else()
99  message("!!!!! No such file: ${TEST_DATA_FULL_PATH} !!!!!")
100  endif()
101  endforeach()
102  endforeach()
103 
104  endif()
105 
106 endmacro()
#define MITK_DATA_DIR
mitkFunctionGetLibrarySearchPaths(search_path, intermediate_dir)
MITK_CREATE_MODULE_TESTS()
Follow Up Storage - Class to facilitate loading/accessing structured follow-up data.
Definition: testcase.h:28
static bool in(Reader::Char c, Reader::Char c1, Reader::Char c2, Reader::Char c3, Reader::Char c4)
Definition: jsoncpp.cpp:244
#define BUILD_TESTING
const std::string NAME
mitk_create_executable()
const std::string TARGET