Mercurial > hg > orthanc
comparison OrthancServer/UnitTestsSources/UnitTestsMain.cpp @ 4057:8b7cd69806f2 framework
move DicomMapTests from OrthancServer to OrthancFramework
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 11 Jun 2020 13:55:25 +0200 |
parents | 9214e3a7b0a2 |
children | e241e5f3f088 |
comparison
equal
deleted
inserted
replaced
4056:55727d85f419 | 4057:8b7cd69806f2 |
---|---|
39 #include "../../OrthancFramework/Sources/Logging.h" | 39 #include "../../OrthancFramework/Sources/Logging.h" |
40 #include "../../OrthancFramework/Sources/Toolbox.h" | 40 #include "../../OrthancFramework/Sources/Toolbox.h" |
41 #include "../../OrthancFramework/Sources/OrthancException.h" | 41 #include "../../OrthancFramework/Sources/OrthancException.h" |
42 #include "../../OrthancFramework/Sources/Images/Image.h" | 42 #include "../../OrthancFramework/Sources/Images/Image.h" |
43 #include "../../OrthancFramework/Sources/Images/PngWriter.h" | 43 #include "../../OrthancFramework/Sources/Images/PngWriter.h" |
44 #include "../../OrthancFramework/Sources/DicomParsing/ParsedDicomFile.h" | |
44 #include "../../OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.h" | 45 #include "../../OrthancFramework/Sources/DicomParsing/FromDcmtkBridge.h" |
45 #include "../../OrthancFramework/Sources/DicomParsing/ToDcmtkBridge.h" | 46 #include "../../OrthancFramework/Sources/DicomParsing/ToDcmtkBridge.h" |
46 | 47 |
48 #include "../Plugins/Engine/PluginsEnumerations.h" | |
49 #include "../Sources/DicomInstanceToStore.h" | |
47 #include "../Sources/OrthancConfiguration.h" // For the FontRegistry | 50 #include "../Sources/OrthancConfiguration.h" // For the FontRegistry |
48 #include "../Sources/OrthancInitialization.h" | 51 #include "../Sources/OrthancInitialization.h" |
49 #include "../Sources/ServerEnumerations.h" | 52 #include "../Sources/ServerEnumerations.h" |
50 #include "../Sources/ServerToolbox.h" | 53 #include "../Sources/ServerToolbox.h" |
51 #include "../Plugins/Engine/PluginsEnumerations.h" | 54 |
55 #include <dcmtk/dcmdata/dcdeftag.h> | |
52 | 56 |
53 | 57 |
54 using namespace Orthanc; | 58 using namespace Orthanc; |
55 | 59 |
56 | 60 |
185 #endif | 189 #endif |
186 } | 190 } |
187 | 191 |
188 | 192 |
189 | 193 |
194 TEST(DicomMap, DicomAsJson) | |
195 { | |
196 // This is a Latin-1 test string: "crane" with a circumflex accent | |
197 const unsigned char raw[] = { 0x63, 0x72, 0xe2, 0x6e, 0x65 }; | |
198 std::string latin1((char*) &raw[0], sizeof(raw) / sizeof(char)); | |
199 | |
200 std::string utf8 = Toolbox::ConvertToUtf8(latin1, Encoding_Latin1, false); | |
201 | |
202 ParsedDicomFile dicom(false); | |
203 dicom.SetEncoding(Encoding_Latin1); | |
204 dicom.ReplacePlainString(DICOM_TAG_PATIENT_NAME, "Hello"); | |
205 dicom.ReplacePlainString(DICOM_TAG_STUDY_DESCRIPTION, utf8); | |
206 dicom.ReplacePlainString(DICOM_TAG_SERIES_DESCRIPTION, std::string(ORTHANC_MAXIMUM_TAG_LENGTH, 'a')); | |
207 dicom.ReplacePlainString(DICOM_TAG_MANUFACTURER, std::string(ORTHANC_MAXIMUM_TAG_LENGTH + 1, 'a')); | |
208 dicom.ReplacePlainString(DICOM_TAG_PIXEL_DATA, "binary"); | |
209 dicom.ReplacePlainString(DICOM_TAG_ROWS, "512"); | |
210 | |
211 DcmDataset& dataset = *dicom.GetDcmtkObject().getDataset(); | |
212 dataset.insertEmptyElement(DCM_StudyID, OFFalse); | |
213 | |
214 { | |
215 std::unique_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_ReferencedSeriesSequence)); | |
216 | |
217 { | |
218 std::unique_ptr<DcmItem> item(new DcmItem); | |
219 item->putAndInsertString(DCM_ReferencedSOPInstanceUID, "nope", OFFalse); | |
220 ASSERT_TRUE(sequence->insert(item.release(), false, false).good()); | |
221 } | |
222 | |
223 ASSERT_TRUE(dataset.insert(sequence.release(), false, false).good()); | |
224 } | |
225 | |
226 | |
227 // Check re-encoding | |
228 DcmElement* element = NULL; | |
229 ASSERT_TRUE(dataset.findAndGetElement(DCM_StudyDescription, element).good() && | |
230 element != NULL); | |
231 | |
232 char* c = NULL; | |
233 ASSERT_TRUE(element != NULL && | |
234 element->isLeaf() && | |
235 element->isaString() && | |
236 element->getString(c).good()); | |
237 ASSERT_EQ(0, memcmp(c, raw, latin1.length())); | |
238 | |
239 ASSERT_TRUE(dataset.findAndGetElement(DCM_Rows, element).good() && | |
240 element != NULL && | |
241 element->getTag().getEVR() == EVR_US); | |
242 | |
243 DicomInstanceToStore toStore; | |
244 toStore.SetParsedDicomFile(dicom); | |
245 | |
246 DicomMap m; | |
247 m.FromDicomAsJson(toStore.GetJson()); | |
248 | |
249 ASSERT_EQ("ISO_IR 100", m.GetValue(DICOM_TAG_SPECIFIC_CHARACTER_SET).GetContent()); | |
250 | |
251 ASSERT_FALSE(m.GetValue(DICOM_TAG_PATIENT_NAME).IsBinary()); | |
252 ASSERT_EQ("Hello", m.GetValue(DICOM_TAG_PATIENT_NAME).GetContent()); | |
253 | |
254 ASSERT_FALSE(m.GetValue(DICOM_TAG_STUDY_DESCRIPTION).IsBinary()); | |
255 ASSERT_EQ(utf8, m.GetValue(DICOM_TAG_STUDY_DESCRIPTION).GetContent()); | |
256 | |
257 ASSERT_FALSE(m.HasTag(DICOM_TAG_MANUFACTURER)); // Too long | |
258 ASSERT_FALSE(m.HasTag(DICOM_TAG_PIXEL_DATA)); // Pixel data | |
259 ASSERT_FALSE(m.HasTag(DICOM_TAG_REFERENCED_SERIES_SEQUENCE)); // Sequence | |
260 ASSERT_EQ(DICOM_TAG_REFERENCED_SERIES_SEQUENCE.GetGroup(), DCM_ReferencedSeriesSequence.getGroup()); | |
261 ASSERT_EQ(DICOM_TAG_REFERENCED_SERIES_SEQUENCE.GetElement(), DCM_ReferencedSeriesSequence.getElement()); | |
262 | |
263 ASSERT_TRUE(m.HasTag(DICOM_TAG_SERIES_DESCRIPTION)); // Maximum length | |
264 ASSERT_FALSE(m.GetValue(DICOM_TAG_SERIES_DESCRIPTION).IsBinary()); | |
265 ASSERT_EQ(ORTHANC_MAXIMUM_TAG_LENGTH, | |
266 static_cast<int>(m.GetValue(DICOM_TAG_SERIES_DESCRIPTION).GetContent().length())); | |
267 | |
268 ASSERT_FALSE(m.GetValue(DICOM_TAG_ROWS).IsBinary()); | |
269 ASSERT_EQ("512", m.GetValue(DICOM_TAG_ROWS).GetContent()); | |
270 | |
271 ASSERT_FALSE(m.GetValue(DICOM_TAG_STUDY_ID).IsNull()); | |
272 ASSERT_FALSE(m.GetValue(DICOM_TAG_STUDY_ID).IsBinary()); | |
273 ASSERT_EQ("", m.GetValue(DICOM_TAG_STUDY_ID).GetContent()); | |
274 | |
275 DicomArray a(m); | |
276 ASSERT_EQ(6u, a.GetSize()); | |
277 | |
278 | |
279 //dicom.SaveToFile("/tmp/test.dcm"); | |
280 //std::cout << toStore.GetJson() << std::endl; | |
281 //a.Print(stdout); | |
282 } | |
283 | |
284 | |
285 | |
190 namespace Orthanc | 286 namespace Orthanc |
191 { | 287 { |
192 // Namespace for the "FRIEND_TEST()" directive in "FromDcmtkBridge" to apply: | 288 // Namespace for the "FRIEND_TEST()" directive in "FromDcmtkBridge" to apply: |
193 // https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md#private-class-members | 289 // https://github.com/google/googletest/blob/master/googletest/docs/AdvancedGuide.md#private-class-members |
194 | 290 |