Mercurial > hg > orthanc
comparison UnitTestsSources/DicomMapTests.cpp @ 3581:4de1b019ca71
unit test DicomWebJson.PixelSpacing
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 22 Nov 2019 13:29:41 +0100 |
parents | 173c7f363d8f |
children | 94f4a18a79cc |
comparison
equal
deleted
inserted
replaced
3580:46a8050583a1 | 3581:4de1b019ca71 |
---|---|
592 ParsedDicomFile dicom(false); | 592 ParsedDicomFile dicom(false); |
593 dicom.ReplacePlainString(DICOM_TAG_PATIENT_NAME, "SB1^SB2^SB3^SB4^SB5"); | 593 dicom.ReplacePlainString(DICOM_TAG_PATIENT_NAME, "SB1^SB2^SB3^SB4^SB5"); |
594 dicom.ReplacePlainString(DICOM_TAG_IMAGE_ORIENTATION_PATIENT, "1\\2.3\\4"); | 594 dicom.ReplacePlainString(DICOM_TAG_IMAGE_ORIENTATION_PATIENT, "1\\2.3\\4"); |
595 dicom.ReplacePlainString(DICOM_TAG_IMAGE_POSITION_PATIENT, ""); | 595 dicom.ReplacePlainString(DICOM_TAG_IMAGE_POSITION_PATIENT, ""); |
596 | 596 |
597 Orthanc::DicomWebJsonVisitor visitor; | 597 DicomWebJsonVisitor visitor; |
598 dicom.Apply(visitor); | 598 dicom.Apply(visitor); |
599 | 599 |
600 { | 600 { |
601 const Json::Value& tag = visitor.GetResult() ["00200037"]; // ImageOrientationPatient | 601 const Json::Value& tag = visitor.GetResult() ["00200037"]; // ImageOrientationPatient |
602 const Json::Value& value = tag["Value"]; | 602 const Json::Value& value = tag["Value"]; |
631 ASSERT_TRUE(s.empty()); | 631 ASSERT_TRUE(s.empty()); |
632 | 632 |
633 ASSERT_TRUE(m.LookupStringValue(s, DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false)); | 633 ASSERT_TRUE(m.LookupStringValue(s, DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false)); |
634 | 634 |
635 std::vector<std::string> v; | 635 std::vector<std::string> v; |
636 Orthanc::Toolbox::TokenizeString(v, s, '\\'); | 636 Toolbox::TokenizeString(v, s, '\\'); |
637 ASSERT_FLOAT_EQ(1.0f, boost::lexical_cast<float>(v[0])); | 637 ASSERT_FLOAT_EQ(1.0f, boost::lexical_cast<float>(v[0])); |
638 ASSERT_FLOAT_EQ(2.3f, boost::lexical_cast<float>(v[1])); | 638 ASSERT_FLOAT_EQ(2.3f, boost::lexical_cast<float>(v[1])); |
639 ASSERT_FLOAT_EQ(4.0f, boost::lexical_cast<float>(v[2])); | 639 ASSERT_FLOAT_EQ(4.0f, boost::lexical_cast<float>(v[2])); |
640 } | 640 } |
641 } | 641 } |
646 // http://dicom.nema.org/medical/dicom/current/output/chtml/part18/sect_F.2.5.html | 646 // http://dicom.nema.org/medical/dicom/current/output/chtml/part18/sect_F.2.5.html |
647 | 647 |
648 ParsedDicomFile dicom(false); | 648 ParsedDicomFile dicom(false); |
649 dicom.ReplacePlainString(DICOM_TAG_IMAGE_ORIENTATION_PATIENT, "1.5\\\\\\2.5"); | 649 dicom.ReplacePlainString(DICOM_TAG_IMAGE_ORIENTATION_PATIENT, "1.5\\\\\\2.5"); |
650 | 650 |
651 Orthanc::DicomWebJsonVisitor visitor; | 651 DicomWebJsonVisitor visitor; |
652 dicom.Apply(visitor); | 652 dicom.Apply(visitor); |
653 | 653 |
654 { | 654 { |
655 const Json::Value& tag = visitor.GetResult() ["00200037"]; | 655 const Json::Value& tag = visitor.GetResult() ["00200037"]; |
656 const Json::Value& value = tag["Value"]; | 656 const Json::Value& value = tag["Value"]; |
676 | 676 |
677 std::string s; | 677 std::string s; |
678 ASSERT_TRUE(m.LookupStringValue(s, DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false)); | 678 ASSERT_TRUE(m.LookupStringValue(s, DICOM_TAG_IMAGE_ORIENTATION_PATIENT, false)); |
679 | 679 |
680 std::vector<std::string> v; | 680 std::vector<std::string> v; |
681 Orthanc::Toolbox::TokenizeString(v, s, '\\'); | 681 Toolbox::TokenizeString(v, s, '\\'); |
682 ASSERT_FLOAT_EQ(1.5f, boost::lexical_cast<float>(v[0])); | 682 ASSERT_FLOAT_EQ(1.5f, boost::lexical_cast<float>(v[0])); |
683 ASSERT_TRUE(v[1].empty()); | 683 ASSERT_TRUE(v[1].empty()); |
684 ASSERT_TRUE(v[2].empty()); | 684 ASSERT_TRUE(v[2].empty()); |
685 ASSERT_FLOAT_EQ(2.5f, boost::lexical_cast<float>(v[3])); | 685 ASSERT_FLOAT_EQ(2.5f, boost::lexical_cast<float>(v[3])); |
686 } | 686 } |
742 dicom.ReplacePlainString(DicomTag(0x4342, 0x1234), "UN"); // Inexistent tag | 742 dicom.ReplacePlainString(DicomTag(0x4342, 0x1234), "UN"); // Inexistent tag |
743 dicom.ReplacePlainString(DicomTag(0x0008, 0x0120), "UR"); | 743 dicom.ReplacePlainString(DicomTag(0x0008, 0x0120), "UR"); |
744 dicom.ReplacePlainString(DicomTag(0x0008, 0x0301), "17"); // US | 744 dicom.ReplacePlainString(DicomTag(0x0008, 0x0301), "17"); // US |
745 dicom.ReplacePlainString(DicomTag(0x0040, 0x0031), "UT"); | 745 dicom.ReplacePlainString(DicomTag(0x0040, 0x0031), "UT"); |
746 | 746 |
747 Orthanc::DicomWebJsonVisitor visitor; | 747 DicomWebJsonVisitor visitor; |
748 dicom.Apply(visitor); | 748 dicom.Apply(visitor); |
749 | 749 |
750 std::string s; | 750 std::string s; |
751 | 751 |
752 // The tag (0002,0002) is "Media Storage SOP Class UID" and is | 752 // The tag (0002,0002) is "Media Storage SOP Class UID" and is |
936 } | 936 } |
937 | 937 |
938 ASSERT_TRUE(dicom.GetDcmtkObject().getDataset()->insert(sequence.release(), false, false).good()); | 938 ASSERT_TRUE(dicom.GetDcmtkObject().getDataset()->insert(sequence.release(), false, false).good()); |
939 } | 939 } |
940 | 940 |
941 Orthanc::DicomWebJsonVisitor visitor; | 941 DicomWebJsonVisitor visitor; |
942 dicom.Apply(visitor); | 942 dicom.Apply(visitor); |
943 | 943 |
944 ASSERT_EQ("SQ", visitor.GetResult() ["00081115"]["vr"].asString()); | 944 ASSERT_EQ("SQ", visitor.GetResult() ["00081115"]["vr"].asString()); |
945 ASSERT_EQ(3u, visitor.GetResult() ["00081115"]["Value"].size()); | 945 ASSERT_EQ(3u, visitor.GetResult() ["00081115"]["Value"].size()); |
946 | 946 |
963 visitor.FormatXml(xml); | 963 visitor.FormatXml(xml); |
964 | 964 |
965 { | 965 { |
966 DicomMap m; | 966 DicomMap m; |
967 m.FromDicomWeb(visitor.GetResult()); | 967 m.FromDicomWeb(visitor.GetResult()); |
968 ASSERT_EQ(0u, m.GetSize()); // Sequences are not handled by Orthanc::DicomMap | 968 ASSERT_EQ(0u, m.GetSize()); // Sequences are not handled by DicomMap |
969 } | 969 } |
970 } | 970 } |
971 | |
972 | |
973 TEST(DicomWebJson, PixelSpacing) | |
974 { | |
975 // Test related to locales: Make sure that decimal separator is | |
976 // correctly handled (dot "." vs comma ",") | |
977 ParsedDicomFile source(false); | |
978 source.ReplacePlainString(DICOM_TAG_PIXEL_SPACING, "1.5\\1.3"); | |
979 | |
980 DicomWebJsonVisitor visitor; | |
981 source.Apply(visitor); | |
982 | |
983 DicomMap target; | |
984 target.FromDicomWeb(visitor.GetResult()); | |
985 | |
986 ASSERT_EQ("DS", visitor.GetResult() ["00280030"]["vr"].asString()); | |
987 ASSERT_FLOAT_EQ(1.5f, visitor.GetResult() ["00280030"]["Value"][0].asFloat()); | |
988 ASSERT_FLOAT_EQ(1.3f, visitor.GetResult() ["00280030"]["Value"][1].asFloat()); | |
989 | |
990 std::string s; | |
991 ASSERT_TRUE(target.LookupStringValue(s, DICOM_TAG_PIXEL_SPACING, false)); | |
992 ASSERT_EQ(s, "1.5\\1.3"); | |
993 } |