Mercurial > hg > orthanc
comparison UnitTestsSources/DicomMapTests.cpp @ 3496:109631ed3564
DicomMap::FromDicomWeb()
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 21 Aug 2019 16:47:17 +0200 |
parents | cf8cbeb35f33 |
children | db71bd11affc |
comparison
equal
deleted
inserted
replaced
3495:cc3e408165eb | 3496:109631ed3564 |
---|---|
568 | 568 |
569 Orthanc::DicomWebJsonVisitor visitor; | 569 Orthanc::DicomWebJsonVisitor visitor; |
570 dicom.Apply(visitor); | 570 dicom.Apply(visitor); |
571 | 571 |
572 { | 572 { |
573 const Json::Value& tag = visitor.GetResult() ["00200037"]; | 573 const Json::Value& tag = visitor.GetResult() ["00200037"]; // ImageOrientationPatient |
574 const Json::Value& value = tag["Value"]; | 574 const Json::Value& value = tag["Value"]; |
575 | 575 |
576 ASSERT_EQ(EnumerationToString(ValueRepresentation_DecimalString), tag["vr"].asString()); | 576 ASSERT_EQ(EnumerationToString(ValueRepresentation_DecimalString), tag["vr"].asString()); |
577 ASSERT_EQ(2u, tag.getMemberNames().size()); | 577 ASSERT_EQ(2u, tag.getMemberNames().size()); |
578 ASSERT_EQ(3u, value.size()); | 578 ASSERT_EQ(3u, value.size()); |
581 ASSERT_FLOAT_EQ(2.3f, value[1].asFloat()); | 581 ASSERT_FLOAT_EQ(2.3f, value[1].asFloat()); |
582 ASSERT_FLOAT_EQ(4.0f, value[2].asFloat()); | 582 ASSERT_FLOAT_EQ(4.0f, value[2].asFloat()); |
583 } | 583 } |
584 | 584 |
585 { | 585 { |
586 const Json::Value& tag = visitor.GetResult() ["00200032"]; | 586 const Json::Value& tag = visitor.GetResult() ["00200032"]; // ImagePositionPatient |
587 ASSERT_EQ(EnumerationToString(ValueRepresentation_DecimalString), tag["vr"].asString()); | 587 ASSERT_EQ(EnumerationToString(ValueRepresentation_DecimalString), tag["vr"].asString()); |
588 ASSERT_EQ(1u, tag.getMemberNames().size()); | 588 ASSERT_EQ(1u, tag.getMemberNames().size()); |
589 } | 589 } |
590 | 590 |
591 std::string xml; | 591 std::string xml; |
592 visitor.FormatXml(xml); | 592 visitor.FormatXml(xml); |
593 | |
594 { | |
595 DicomMap m; | |
596 m.FromDicomWeb(visitor.GetResult()); | |
597 ASSERT_EQ(3u, m.GetSize()); | |
598 | |
599 std::string s; | |
600 ASSERT_TRUE(m.CopyToString(s, DICOM_TAG_PATIENT_NAME, false)); | |
601 ASSERT_EQ("SB1^SB2^SB3^SB4^SB5", s); | |
602 ASSERT_TRUE(m.CopyToString(s, DICOM_TAG_IMAGE_POSITION_PATIENT, false)); | |
603 ASSERT_TRUE(s.empty()); | |
604 | |
605 ASSERT_TRUE(m.CopyToString(s, DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false)); | |
606 | |
607 std::vector<std::string> v; | |
608 Orthanc::Toolbox::TokenizeString(v, s, '\\'); | |
609 ASSERT_FLOAT_EQ(1.0f, boost::lexical_cast<float>(v[0])); | |
610 ASSERT_FLOAT_EQ(2.3f, boost::lexical_cast<float>(v[1])); | |
611 ASSERT_FLOAT_EQ(4.0f, boost::lexical_cast<float>(v[2])); | |
612 } | |
593 } | 613 } |
594 | 614 |
595 | 615 |
596 TEST(DicomWebJson, NullValue) | 616 TEST(DicomWebJson, NullValue) |
597 { | 617 { |
618 ASSERT_FLOAT_EQ(2.5f, value[3].asFloat()); | 638 ASSERT_FLOAT_EQ(2.5f, value[3].asFloat()); |
619 } | 639 } |
620 | 640 |
621 std::string xml; | 641 std::string xml; |
622 visitor.FormatXml(xml); | 642 visitor.FormatXml(xml); |
643 | |
644 { | |
645 DicomMap m; | |
646 m.FromDicomWeb(visitor.GetResult()); | |
647 ASSERT_EQ(1u, m.GetSize()); | |
648 | |
649 std::string s; | |
650 ASSERT_TRUE(m.CopyToString(s, DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false)); | |
651 | |
652 std::vector<std::string> v; | |
653 Orthanc::Toolbox::TokenizeString(v, s, '\\'); | |
654 ASSERT_FLOAT_EQ(1.5f, boost::lexical_cast<float>(v[0])); | |
655 ASSERT_TRUE(v[1].empty()); | |
656 ASSERT_TRUE(v[2].empty()); | |
657 ASSERT_FLOAT_EQ(2.5f, boost::lexical_cast<float>(v[3])); | |
658 } | |
623 } | 659 } |
624 | 660 |
625 | 661 |
626 static void SetTagKey(ParsedDicomFile& dicom, | 662 static void SetTagKey(ParsedDicomFile& dicom, |
627 const DicomTag& tag, | 663 const DicomTag& tag, |
677 dicom.ReplacePlainString(DicomTag(0x0008, 0x1161), "128"); // UL | 713 dicom.ReplacePlainString(DicomTag(0x0008, 0x1161), "128"); // UL |
678 dicom.ReplacePlainString(DicomTag(0x4342, 0x1234), "UN"); // Inexistent tag | 714 dicom.ReplacePlainString(DicomTag(0x4342, 0x1234), "UN"); // Inexistent tag |
679 dicom.ReplacePlainString(DicomTag(0x0008, 0x0120), "UR"); | 715 dicom.ReplacePlainString(DicomTag(0x0008, 0x0120), "UR"); |
680 dicom.ReplacePlainString(DicomTag(0x0008, 0x0301), "17"); // US | 716 dicom.ReplacePlainString(DicomTag(0x0008, 0x0301), "17"); // US |
681 dicom.ReplacePlainString(DicomTag(0x0040, 0x0031), "UT"); | 717 dicom.ReplacePlainString(DicomTag(0x0040, 0x0031), "UT"); |
682 | 718 |
683 Orthanc::DicomWebJsonVisitor visitor; | 719 Orthanc::DicomWebJsonVisitor visitor; |
684 dicom.Apply(visitor); | 720 dicom.Apply(visitor); |
685 | 721 |
686 std::string s; | 722 std::string s; |
687 | 723 |
724 // The tag (0002,0002) is "Media Storage SOP Class UID" and is | |
725 // automatically copied by DCMTK from tag (0008,0016) | |
726 ASSERT_EQ("UI", visitor.GetResult() ["00020002"]["vr"].asString()); | |
727 ASSERT_EQ("UI", visitor.GetResult() ["00020002"]["Value"][0].asString()); | |
688 ASSERT_EQ("AE", visitor.GetResult() ["00400241"]["vr"].asString()); | 728 ASSERT_EQ("AE", visitor.GetResult() ["00400241"]["vr"].asString()); |
689 ASSERT_EQ("AE", visitor.GetResult() ["00400241"]["Value"][0].asString()); | 729 ASSERT_EQ("AE", visitor.GetResult() ["00400241"]["Value"][0].asString()); |
690 ASSERT_EQ("AS", visitor.GetResult() ["00101010"]["vr"].asString()); | 730 ASSERT_EQ("AS", visitor.GetResult() ["00101010"]["vr"].asString()); |
691 ASSERT_EQ("AS", visitor.GetResult() ["00101010"]["Value"][0].asString()); | 731 ASSERT_EQ("AS", visitor.GetResult() ["00101010"]["Value"][0].asString()); |
692 ASSERT_EQ("AT", visitor.GetResult() ["00209165"]["vr"].asString()); | 732 ASSERT_EQ("AT", visitor.GetResult() ["00209165"]["vr"].asString()); |
802 ASSERT_EQ("UT", visitor.GetResult() ["00400031"]["vr"].asString()); | 842 ASSERT_EQ("UT", visitor.GetResult() ["00400031"]["vr"].asString()); |
803 ASSERT_EQ("UT", visitor.GetResult() ["00400031"]["Value"][0].asString()); | 843 ASSERT_EQ("UT", visitor.GetResult() ["00400031"]["Value"][0].asString()); |
804 | 844 |
805 std::string xml; | 845 std::string xml; |
806 visitor.FormatXml(xml); | 846 visitor.FormatXml(xml); |
847 | |
848 { | |
849 DicomMap m; | |
850 m.FromDicomWeb(visitor.GetResult()); | |
851 ASSERT_EQ(31u, m.GetSize()); | |
852 | |
853 std::string s; | |
854 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0002, 0x0002), false)); ASSERT_EQ("UI", s); | |
855 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0040, 0x0241), false)); ASSERT_EQ("AE", s); | |
856 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0010, 0x1010), false)); ASSERT_EQ("AS", s); | |
857 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0020, 0x9165), false)); ASSERT_EQ("00100020", s); | |
858 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0052), false)); ASSERT_EQ("CS", s); | |
859 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0012), false)); ASSERT_EQ("DA", s); | |
860 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0010, 0x1020), false)); ASSERT_EQ("42", s); | |
861 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x002a), false)); ASSERT_EQ("DT", s); | |
862 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0010, 0x9431), false)); ASSERT_EQ("43", s); | |
863 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x1163), false)); ASSERT_EQ("44", s); | |
864 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x1160), false)); ASSERT_EQ("45", s); | |
865 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0070), false)); ASSERT_EQ("LO", s); | |
866 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0010, 0x4000), false)); ASSERT_EQ("LT", s); | |
867 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0028, 0x2000), true)); ASSERT_EQ("OB", s); | |
868 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x7fe0, 0x0009), true)); ASSERT_EQ("OD", s); | |
869 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0064, 0x0009), true)); ASSERT_EQ("OF", s); | |
870 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0066, 0x0040), false)); ASSERT_EQ("46", s); | |
871 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0028, 0x1201), true)); ASSERT_EQ("OWOW", s); | |
872 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0010, 0x0010), false)); ASSERT_EQ("PN", s); | |
873 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0050), false)); ASSERT_EQ("SH", s); | |
874 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0018, 0x6020), false)); ASSERT_EQ("-15", s); | |
875 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0018, 0x9219), false)); ASSERT_EQ("-16", s); | |
876 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0081), false)); ASSERT_EQ("ST", s); | |
877 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0013), false)); ASSERT_EQ("TM", s); | |
878 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0119), false)); ASSERT_EQ("UC", s); | |
879 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0016), false)); ASSERT_EQ("UI", s); | |
880 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x1161), false)); ASSERT_EQ("128", s); | |
881 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x4342, 0x1234), true)); ASSERT_EQ("UN", s); | |
882 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0120), false)); ASSERT_EQ("UR", s); | |
883 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0008, 0x0301), false)); ASSERT_EQ("17", s); | |
884 ASSERT_TRUE(m.CopyToString(s, DicomTag(0x0040, 0x0031), false)); ASSERT_EQ("UT", s); | |
885 } | |
807 } | 886 } |
808 | 887 |
809 | 888 |
810 TEST(DicomWebJson, Sequence) | 889 TEST(DicomWebJson, Sequence) |
811 { | 890 { |
846 ASSERT_TRUE(items.find("item1") != items.end()); | 925 ASSERT_TRUE(items.find("item1") != items.end()); |
847 ASSERT_TRUE(items.find("item2") != items.end()); | 926 ASSERT_TRUE(items.find("item2") != items.end()); |
848 | 927 |
849 std::string xml; | 928 std::string xml; |
850 visitor.FormatXml(xml); | 929 visitor.FormatXml(xml); |
851 } | 930 |
931 { | |
932 DicomMap m; | |
933 m.FromDicomWeb(visitor.GetResult()); | |
934 ASSERT_EQ(0, m.GetSize()); // Sequences are not handled by Orthanc::DicomMap | |
935 } | |
936 } |