]> Creatis software - gdcm.git/blob - Testing/CMakeLists.txt
ENH: strstream were deprecated around 1998. Need to use stringstream instead. Add...
[gdcm.git] / Testing / CMakeLists.txt
1 # CMakeLists for Testing purpose
2 # Cxx file that need a file to run should be place aproprietly
3
4 SET(CXX_TEST_PATH ${EXECUTABLE_OUTPUT_PATH})
5
6 SET(GDCM_TESTS ${CXX_TEST_PATH}/gdcmTests)
7
8 # add test that does not require data:
9 # They usally return if no argument is given
10 SET(TEST_SOURCES
11   TestEmpty.cxx
12   TestUtil.cxx
13   TestBug.cxx
14   TestHash.cxx
15   TestCommand.cxx
16   TestTS.cxx
17   TestVR.cxx
18   TestDictGroupName.cxx
19   TestDict.cxx
20   TestDataEntry.cxx
21   TestWriteSimple.cxx
22   TestImageSet.cxx
23   TestDicomDirElement.cxx
24   TestDicomString.cxx
25   TestEnumVR.cxx
26   TestBuildUpDicomDir.cxx          # writes a file named "NewDICOMDIR"
27 )
28 IF(UNIX)
29   SET(TEST_SOURCES ${TEST_SOURCES}
30     #TestInline.cxx
31   )
32 ENDIF(UNIX)
33
34 # add tests that require data
35 IF (GDCM_DATA_ROOT)
36   SET(TEST_SOURCES ${TEST_SOURCES}
37     TestFileAccessors.cxx
38     TestMakeIcon.cxx
39     TestLoadAllDocumentsNoPrivNoSeq.cxx # includes generated gdcmDataImages.h
40     #TestLoadAllDocumentsNoShadow.cxx   # includes generated gdcmDataImages.h
41     TestPrintAllDocument.cxx            # includes generated gdcmDataImages.h
42     #TestAllEntryVerify.cxx             # includes generated gdcmDataImages.h
43     #TestAllReadCompareDicom.cxx        # includes generated gdcmDataImages.h
44     TestReadWriteReadCompare.cxx        # includes generated gdcmDataImages.h 
45     TestReadWriteJPEGReadCompare.cxx    # includes generated gdcmDataImages.h 
46     #TestReadWriteJPEG2000ReadCompare.cxx # includes generated gdcmDataImages.h     
47         
48     #TestCopyDicom.cxx                  # includes generated gdcmDataImages.h 
49     #    TestCopyRescaleDicom.cxx       # includes generated gdcmDataImages.h 
50     #TestChangeHeader.cxx
51     #    TestAnonymize.cxx
52     TestDirList.cxx
53     TestDicomDir.cxx                 # require DICOMDIR
54
55     TestMakeDicomDir.cxx             # writes a file named "NewDICOMDIR"
56     TestSerieHelper.cxx              # uses gdcmData as a default root directory    
57     TestAllVM.cxx
58     TestValidate.cxx                 #Just to have on overviews of oddities ...  
59   )
60   # add test that require VTK:
61   IF(GDCM_VTK)
62     IF("${VTK_MAJOR_VERSION}" LESS 4)
63       MESSAGE(FATAL_ERROR "This VTK version is not supported, you are on your own !")
64     ELSE("${VTK_MAJOR_VERSION}" LESS 4)
65       IF("${VTK_MAJOR_VERSION}" EQUAL 4 AND "${VTK_MINOR_VERSION}" EQUAL 2)
66         MESSAGE(FATAL_ERROR "This VTK version is not supported, you are on your own !"
67                              "Although gdcm should compile fine. You just need to turn BUILD_TESTING:=OFF")
68       ENDIF("${VTK_MAJOR_VERSION}" EQUAL 4 AND "${VTK_MINOR_VERSION}" EQUAL 2)
69       IF("${VTK_MAJOR_VERSION}" EQUAL 4 AND "${VTK_MINOR_VERSION}" EQUAL 4 AND "${VTK_BUILD_VERSION}" LESS 3)
70         MESSAGE(FATAL_ERROR "This VTK version is not supported, you are on your own !"
71                              "Although gdcm should compile fine. You just need to turn BUILD_TESTING:=OFF")
72       ENDIF("${VTK_MAJOR_VERSION}" EQUAL 4 AND "${VTK_MINOR_VERSION}" EQUAL 4 AND "${VTK_BUILD_VERSION}" LESS 3)
73       # Include the VTK library since we know this is going to work
74       INCLUDE(${VTK_USE_FILE})
75
76       INCLUDE_DIRECTORIES(
77         ${GDCM_SOURCE_DIR}/vtk
78       )
79       SET(TEST_SOURCES ${TEST_SOURCES}
80         VTKTestRead.cxx
81         VTKTestReadSeq.cxx
82         VTKTestWrite.cxx
83         VTKTestWriteSeq.cxx
84       )
85     ENDIF("${VTK_MAJOR_VERSION}" LESS 4)
86   ENDIF(GDCM_VTK)
87 ENDIF (GDCM_DATA_ROOT)
88
89
90
91 # include stuff
92 INCLUDE_DIRECTORIES(
93   ${GDCM_SOURCE_DIR}/src
94   ${GDCM_BINARY_DIR}
95 )
96
97 CREATE_TEST_SOURCELIST(Tests gdcmTests.cxx ${TEST_SOURCES})
98 ADD_EXECUTABLE(gdcmTests ${Tests})
99 IF(GDCM_VTK)
100   IF(GDCM_DATA_ROOT)
101     TARGET_LINK_LIBRARIES(gdcmTests vtkgdcm vtkRendering)
102   ELSE(GDCM_DATA_ROOT)
103     TARGET_LINK_LIBRARIES(gdcmTests gdcm)
104   ENDIF(GDCM_DATA_ROOT)     
105 ELSE(GDCM_VTK)
106   TARGET_LINK_LIBRARIES(gdcmTests gdcm)
107 ENDIF(GDCM_VTK)
108
109 SET (TestsToRun ${Tests})
110 REMOVE (TestsToRun gdcmTests.cxx)
111
112 # Loop over files and create executables
113 FOREACH(file ${TEST_SOURCES})
114   GET_FILENAME_COMPONENT(name ${file} NAME_WE)
115   ADD_TEST(${name} ${GDCM_TESTS} ${name})
116 ENDFOREACH(file ${TEST_SOURCES})
117
118 #-----------------------------------------------------------------------------
119
120 # We need to test the reading of all dicom images in the gdcmData directory
121 # First parse this directory and extract all images
122
123 FILE(GLOB GDCM_DATA_IMAGES_GLOB
124   "${GDCM_DATA_ROOT}/*.acr"
125   "${GDCM_DATA_ROOT}/*.dcm"
126   "${GDCM_DATA_ROOT}/*.nema"
127   "${GDCM_DATA_ROOT}/*.ima"
128   )
129
130 FILE(GLOB GDCM_DATA_EXTRA_IMAGES_GLOB
131   "${GDCM_DATA_EXTRA_ROOT}/gdcmSampleData/images_of_interest/*.dcm"
132   )
133 #MESSAGE(${GDCM_DATA_EXTRA_IMAGES_GLOB})
134
135 # Black list of images known to break lots of readers (efilm, xmedcon ...):
136 SET(BLACK_LIST
137   # Multiframe Papyrus format image
138   # Just to remember this format exists, and is gdcm::File compliant
139   # (NOT gdcm::FileHelper ...)
140   # any contribution is welcome
141   "PET-cardio-Multiframe-Papyrus.dcm"
142   # From David Clunie's Compresion Dataset  
143   "D_CLUNIE_CT1_JLSN.dcm"
144   "D_CLUNIE_CT1_JLSL.dcm"
145   #Not a Dicom Image, but a RT Object
146   "RS2.16.124.113534.2.3.5.0.120040728.21342.353.12747_anonimized.dcm" 
147   #Dicom MPEG image
148   "ETIAM_video_002.dcm"
149   #Something stupid occured in the code for LibIDO images.
150   #I Black list them for a while. JP
151   #"gdcm-ACR-LibIDO.acr"
152   "LIBIDO-24-ACR_NEMA-Rectangle.dcm"
153   #16 Bits per pixel images with LUT 16 Bits.
154   #I wait to be 100% sure before releasing them. JP
155   "rle16sti.dcm"
156   "rle16loo.dcm"   
157   # Jasper cannot handle this image, only kakadu so far, unless you patch jasper
158   # but then it breaks other images...
159   "CT_Phillips_JPEG2K_Decompr_Problem.dcm"
160   
161   #RTDOSE, 32 bits image : cannot be compressed
162   #"RTDOSE.dcm"
163   
164   #
165   # ------------
166   #  
167   #Still cause troubles (see the .README.txt file for more details)  
168   "MR_Philips_Intera_in_SQ_2001_e05f_item_wrong_lgt_use_NOSHADOWSEQ.dcm"  
169   "MR_Philips_Intera_PrivateSequenceExplicitVR.dcm" 
170   #The 2 previous images are identical !
171   #--> Replaced by more significant name
172   "MR_Philips_Intera_PrivateSequenceExplicitVR_in_SQ_2001_e05f_item_wrong_lgt_use_NOSHADOWSEQ.dcm"
173
174   #hexedit shows something *very* strange around offset 0x76e !
175   #the images looks *over*corrupted (on disc, not from the manufacturer!)
176   "MR_Philips_Intera_PrivateSequenceImplicitVR.dcm"
177   
178   # Seems this one hangs on 64 bits processors ?!?
179   # I blacklist it until the pb is solved.
180   # (to get some more green on the Dasboards)
181   "MR_Philips-Intera_BreaksNOSHADOW.dcm"
182   )
183
184 # Create a specific list of dicom files that we know are part of a sequence
185 SET(SEQ_LIST
186   "SIEMENS_MAGNETOM-12-MONO2-FileSeq[0-9].dcm"
187   )
188
189 # Add a special test that requires dciodvfy from dicom3tools
190 INCLUDE(${GDCM_SOURCE_DIR}/CMake/FindDicom3Tools.cmake)
191
192 # This is a GLOB expression, change it into a list separated with a comma and \n
193 SET(GDCM_DATA_IMAGES)
194 SET(GDCM_DATA_SEQ_IMAGES)
195 FOREACH(filename ${GDCM_DATA_IMAGES_GLOB})
196   GET_FILENAME_COMPONENT(filename_temp ${filename} NAME)
197   IF(DCIODVFY_FOUND)
198     #ADD_TEST("DCIODVFY-INPUT-${filename_temp}" "${DCIODVFY_EXECUTABLE}" "${filename}")
199     #ADD_TEST("DCIODVFY-OUTPUT-${filename_temp}" "${DCIODVFY_EXECUTABLE}" "${GDCM_DATA_ROOT}/BaselineDicom/${filename_temp}")
200   ENDIF(DCIODVFY_FOUND)
201   STRING(REGEX MATCH ${filename_temp} bad_dicom ${BLACK_LIST})
202   IF(NOT bad_dicom)
203     SET(GDCM_DATA_IMAGES "${GDCM_DATA_IMAGES}\n\"${filename_temp}\",")
204     # SEQ_LIST is a regular expression:
205     STRING(REGEX MATCH ${SEQ_LIST} is_seq ${filename_temp})
206     IF(is_seq)
207       SET(GDCM_DATA_SEQ_IMAGES "${GDCM_DATA_SEQ_IMAGES}\n\"${filename_temp}\",")
208     ENDIF(is_seq)
209   ENDIF(NOT bad_dicom)
210 ENDFOREACH(filename)
211
212 # Paranoid / dcmdump
213 IF(GDCM_DCMTK_CHECK)
214 FOREACH(filename ${GDCM_DATA_IMAGES_GLOB} ${GDCM_DATA_EXTRA_IMAGES_GLOB})
215   GET_FILENAME_COMPONENT(filename_temp ${filename} NAME)
216   STRING(REGEX MATCH ${filename_temp} bad_dicom ${BLACK_LIST})
217   IF(NOT bad_dicom)
218     IF(BUILD_EXAMPLES)
219       FOREACH(mode a d x) #r
220         FOREACH(opt "" monochrome1 noshadowseq noshadow noseq rgb)
221           ADD_TEST(ReWrite-${mode}-${opt}-${filename_temp} ${EXECUTABLE_OUTPUT_PATH}/ReWrite filein=${filename} fileout=${GDCM_BINARY_DIR}/${mode}-${opt}-${filename_temp} mode=${mode} ${opt})
222           ADD_TEST(dcmdump-${mode}-${opt}-${filename_temp} /usr/bin/dcmdump -E -dc +ae ${GDCM_BINARY_DIR}/${mode}-${opt}-${filename_temp})
223           #ADD_TEST(ReWrite-${mode}-${opt}-${filename_temp}-bis ${EXECUTABLE_OUTPUT_PATH}/ReWrite filein=${GDCM_BINARY_DIR}/${mode}-${opt}-${filename_temp} fileout=${GDCM_BINARY_DIR}/reference.dcm mode=${mode} ${opt})
224           #ADD_TEST(diff-${mode}-${opt}-${filename_temp} /usr/bin/diff ${GDCM_BINARY_DIR}/${mode}-${opt}-${filename_temp} ${GDCM_BINARY_DIR}/reference.dcm)
225         ENDFOREACH(opt)
226       ENDFOREACH(mode)
227     ENDIF(BUILD_EXAMPLES)
228   ENDIF(NOT bad_dicom)
229 ENDFOREACH(filename)
230 ENDIF(GDCM_DCMTK_CHECK)
231
232 # Populate GDCM_DATA_IMAGES:
233 FILE(WRITE "${GDCM_BINARY_DIR}/gdcmDataImages.h"
234   "const char * const gdcmDataImages[] = { ${GDCM_DATA_IMAGES}\n0 };\n" 
235 )
236
237 # Populate GDCM_DATA_SEQ_IMAGES:
238 FILE(WRITE "${GDCM_BINARY_DIR}/gdcmDataSeqImages.h"
239   "const char * const gdcmDataSeqImages[] = { ${GDCM_DATA_SEQ_IMAGES}\n0 };\n" 
240 )
241
242 #-----------------------------------------------------------------------------
243 # Trying to solve a bizarre problem when loading shared lib if gdcm is static
244 # Therefore I disable the test when building SHAREDLIBS
245 IF(UNIX AND NOT BUILD_SHARED_LIBS)
246   ADD_LIBRARY(dynmodule MODULE dynmodule.cxx)
247   TARGET_LINK_LIBRARIES(dynmodule gdcm)
248   ADD_EXECUTABLE(loadmodule loadmodule.cxx )
249   TARGET_LINK_LIBRARIES(loadmodule gdcm -ldl)
250   ADD_TEST(loadmodule ${CXX_TEST_PATH}/loadmodule)
251 ENDIF(UNIX AND NOT BUILD_SHARED_LIBS)
252
253
254 #-----------------------------------------------------------------------------
255 # Do the build against an installed gdcm
256 SET(GDCM_TEST_INSTALL_LEFT "${CMAKE_INSTALL_PREFIX}")
257 SET(GDCM_TEST_INSTALL_RIGHT "${GDCM_BINARY_DIR}/InstallTest/Root")
258 STRING(COMPARE EQUAL "${GDCM_TEST_INSTALL_LEFT}" "${GDCM_TEST_INSTALL_RIGHT}"
259   GDCM_TEST_INSTALL)
260 IF(GDCM_TEST_INSTALL)
261   ADD_TEST(Install
262     ${CMAKE_CTEST_COMMAND}
263     #  ${GDCM_INSTALL_TEST_CONFIG_TYPE}
264     --build-and-test ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR}
265     --build-generator ${CMAKE_GENERATOR}
266     --build-project GDCM
267     --build-makeprogram ${CMAKE_MAKE_PROGRAM}
268     --build-noclean
269     --build-target install)
270 ENDIF(GDCM_TEST_INSTALL)
271