Mercurial > hg > orthanc
comparison UnitTestsSources/DicomMapTests.cpp @ 3005:8265a6b56100
DicomMap::FromDicomAsJson
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 12 Dec 2018 15:42:33 +0100 |
parents | da12ba232119 |
children | 0e1755e5efd0 |
comparison
equal
deleted
inserted
replaced
3004:80d1a3452807 | 3005:8265a6b56100 |
---|---|
35 #include "gtest/gtest.h" | 35 #include "gtest/gtest.h" |
36 | 36 |
37 #include "../Core/OrthancException.h" | 37 #include "../Core/OrthancException.h" |
38 #include "../Core/DicomFormat/DicomMap.h" | 38 #include "../Core/DicomFormat/DicomMap.h" |
39 #include "../Core/DicomParsing/FromDcmtkBridge.h" | 39 #include "../Core/DicomParsing/FromDcmtkBridge.h" |
40 #include "../Core/DicomParsing/ParsedDicomFile.h" | |
41 | |
42 #include "../OrthancServer/DicomInstanceToStore.h" | |
40 | 43 |
41 #include <memory> | 44 #include <memory> |
45 #include <dcmtk/dcmdata/dcdeftag.h> | |
42 | 46 |
43 using namespace Orthanc; | 47 using namespace Orthanc; |
44 | 48 |
45 TEST(DicomMap, MainTags) | 49 TEST(DicomMap, MainTags) |
46 { | 50 { |
407 ASSERT_TRUE(v->IsNull()); | 411 ASSERT_TRUE(v->IsNull()); |
408 ASSERT_FALSE(v->IsBinary()); | 412 ASSERT_FALSE(v->IsBinary()); |
409 ASSERT_THROW(v->GetContent(), OrthancException); | 413 ASSERT_THROW(v->GetContent(), OrthancException); |
410 } | 414 } |
411 } | 415 } |
416 | |
417 | |
418 | |
419 TEST(DicomMap, DicomAsJson) | |
420 { | |
421 // This is a Latin-1 test string: "crane" with a circumflex accent | |
422 const unsigned char raw[] = { 0x63, 0x72, 0xe2, 0x6e, 0x65 }; | |
423 std::string latin1((char*) &raw[0], sizeof(raw) / sizeof(char)); | |
424 | |
425 std::string utf8 = Toolbox::ConvertToUtf8(latin1, Encoding_Latin1); | |
426 | |
427 ParsedDicomFile dicom(false); | |
428 dicom.SetEncoding(Encoding_Latin1); | |
429 dicom.ReplacePlainString(DICOM_TAG_PATIENT_NAME, "Hello"); | |
430 dicom.ReplacePlainString(DICOM_TAG_STUDY_DESCRIPTION, utf8); | |
431 dicom.ReplacePlainString(DICOM_TAG_SERIES_DESCRIPTION, std::string(ORTHANC_MAXIMUM_TAG_LENGTH, 'a')); | |
432 dicom.ReplacePlainString(DICOM_TAG_MANUFACTURER, std::string(ORTHANC_MAXIMUM_TAG_LENGTH + 1, 'a')); | |
433 dicom.ReplacePlainString(DICOM_TAG_PIXEL_DATA, "binary"); | |
434 dicom.ReplacePlainString(DICOM_TAG_ROWS, "512"); | |
435 | |
436 DcmDataset& dataset = *dicom.GetDcmtkObject().getDataset(); | |
437 dataset.insertEmptyElement(DCM_StudyID, OFFalse); | |
438 | |
439 { | |
440 std::auto_ptr<DcmSequenceOfItems> sequence(new DcmSequenceOfItems(DCM_ReferencedSeriesSequence)); | |
441 | |
442 { | |
443 std::auto_ptr<DcmItem> item(new DcmItem); | |
444 item->putAndInsertString(DCM_ReferencedSOPInstanceUID, "nope", OFFalse); | |
445 ASSERT_TRUE(sequence->insert(item.release(), false, false).good()); | |
446 } | |
447 | |
448 ASSERT_TRUE(dataset.insert(sequence.release(), false, false).good()); | |
449 } | |
450 | |
451 | |
452 // Check re-encoding | |
453 DcmElement* element = NULL; | |
454 ASSERT_TRUE(dataset.findAndGetElement(DCM_StudyDescription, element).good() && | |
455 element != NULL); | |
456 | |
457 char* c = NULL; | |
458 ASSERT_TRUE(element != NULL && | |
459 element->isLeaf() && | |
460 element->isaString() && | |
461 element->getString(c).good()); | |
462 ASSERT_EQ(0, memcmp(c, raw, latin1.length())); | |
463 | |
464 ASSERT_TRUE(dataset.findAndGetElement(DCM_Rows, element).good() && | |
465 element != NULL && | |
466 element->getTag().getEVR() == EVR_US); | |
467 | |
468 DicomInstanceToStore toStore; | |
469 toStore.SetParsedDicomFile(dicom); | |
470 | |
471 DicomMap m; | |
472 m.FromDicomAsJson(toStore.GetJson()); | |
473 | |
474 ASSERT_EQ("ISO_IR 100", m.GetValue(DICOM_TAG_SPECIFIC_CHARACTER_SET).GetContent()); | |
475 | |
476 ASSERT_FALSE(m.GetValue(DICOM_TAG_PATIENT_NAME).IsBinary()); | |
477 ASSERT_EQ("Hello", m.GetValue(DICOM_TAG_PATIENT_NAME).GetContent()); | |
478 | |
479 ASSERT_FALSE(m.GetValue(DICOM_TAG_STUDY_DESCRIPTION).IsBinary()); | |
480 ASSERT_EQ(utf8, m.GetValue(DICOM_TAG_STUDY_DESCRIPTION).GetContent()); | |
481 | |
482 ASSERT_FALSE(m.HasTag(DICOM_TAG_MANUFACTURER)); // Too long | |
483 ASSERT_FALSE(m.HasTag(DICOM_TAG_PIXEL_DATA)); // Pixel data | |
484 ASSERT_FALSE(m.HasTag(DICOM_TAG_REFERENCED_SERIES_SEQUENCE)); // Sequence | |
485 ASSERT_EQ(DICOM_TAG_REFERENCED_SERIES_SEQUENCE.GetGroup(), DCM_ReferencedSeriesSequence.getGroup()); | |
486 ASSERT_EQ(DICOM_TAG_REFERENCED_SERIES_SEQUENCE.GetElement(), DCM_ReferencedSeriesSequence.getElement()); | |
487 | |
488 ASSERT_TRUE(m.HasTag(DICOM_TAG_SERIES_DESCRIPTION)); // Maximum length | |
489 ASSERT_FALSE(m.GetValue(DICOM_TAG_SERIES_DESCRIPTION).IsBinary()); | |
490 ASSERT_EQ(ORTHANC_MAXIMUM_TAG_LENGTH, m.GetValue(DICOM_TAG_SERIES_DESCRIPTION).GetContent().length()); | |
491 | |
492 ASSERT_FALSE(m.GetValue(DICOM_TAG_ROWS).IsBinary()); | |
493 ASSERT_EQ("512", m.GetValue(DICOM_TAG_ROWS).GetContent()); | |
494 | |
495 ASSERT_FALSE(m.GetValue(DICOM_TAG_STUDY_ID).IsNull()); | |
496 ASSERT_FALSE(m.GetValue(DICOM_TAG_STUDY_ID).IsBinary()); | |
497 ASSERT_EQ("", m.GetValue(DICOM_TAG_STUDY_ID).GetContent()); | |
498 | |
499 DicomArray a(m); | |
500 ASSERT_EQ(6u, a.GetSize()); | |
501 | |
502 | |
503 //dicom.SaveToFile("/tmp/test.dcm"); | |
504 //std::cout << toStore.GetJson() << std::endl; | |
505 //a.Print(stdout); | |
506 } |