Mercurial > hg > orthanc
comparison OrthancFramework/UnitTestsSources/FromDcmtkTests.cpp @ 4203:4d42408da117
improving const-correctness in ParsedDicomFile
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 17 Sep 2020 15:01:31 +0200 |
parents | 32ac045109a6 |
children | 50b0c69b653a |
comparison
equal
deleted
inserted
replaced
4202:2007ab69ac16 | 4203:4d42408da117 |
---|---|
38 #include "../Sources/Compatibility.h" | 38 #include "../Sources/Compatibility.h" |
39 #include "../Sources/DicomNetworking/DicomFindAnswers.h" | 39 #include "../Sources/DicomNetworking/DicomFindAnswers.h" |
40 #include "../Sources/DicomParsing/DicomModification.h" | 40 #include "../Sources/DicomParsing/DicomModification.h" |
41 #include "../Sources/DicomParsing/DicomWebJsonVisitor.h" | 41 #include "../Sources/DicomParsing/DicomWebJsonVisitor.h" |
42 #include "../Sources/DicomParsing/FromDcmtkBridge.h" | 42 #include "../Sources/DicomParsing/FromDcmtkBridge.h" |
43 #include "../Sources/DicomParsing/Internals/DicomImageDecoder.h" | |
44 #include "../Sources/DicomParsing/ToDcmtkBridge.h" | 43 #include "../Sources/DicomParsing/ToDcmtkBridge.h" |
45 #include "../Sources/Endianness.h" | 44 #include "../Sources/Endianness.h" |
46 #include "../Sources/Images/Image.h" | 45 #include "../Sources/Images/Image.h" |
47 #include "../Sources/Images/ImageBuffer.h" | 46 #include "../Sources/Images/ImageBuffer.h" |
48 #include "../Sources/Images/ImageProcessing.h" | 47 #include "../Sources/Images/ImageProcessing.h" |
779 { | 778 { |
780 std::string s; | 779 std::string s; |
781 Orthanc::SystemToolbox::ReadFile(s, PATH); | 780 Orthanc::SystemToolbox::ReadFile(s, PATH); |
782 Orthanc::ParsedDicomFile f(s); | 781 Orthanc::ParsedDicomFile f(s); |
783 | 782 |
784 std::unique_ptr<Orthanc::ImageAccessor> decoded(Orthanc::DicomImageDecoder::Decode(f, 0)); | 783 std::unique_ptr<Orthanc::ImageAccessor> decoded(f.DecodeFrame(0)); |
785 ASSERT_EQ(256u, decoded->GetWidth()); | 784 ASSERT_EQ(256u, decoded->GetWidth()); |
786 ASSERT_EQ(256u, decoded->GetHeight()); | 785 ASSERT_EQ(256u, decoded->GetHeight()); |
787 ASSERT_EQ(Orthanc::PixelFormat_Grayscale8, decoded->GetFormat()); | 786 ASSERT_EQ(Orthanc::PixelFormat_Grayscale8, decoded->GetFormat()); |
788 | 787 |
789 for (int y = 0; y < 256; y++) | 788 for (int y = 0; y < 256; y++) |
841 { | 840 { |
842 std::string s; | 841 std::string s; |
843 Orthanc::SystemToolbox::ReadFile(s, PATH); | 842 Orthanc::SystemToolbox::ReadFile(s, PATH); |
844 Orthanc::ParsedDicomFile f(s); | 843 Orthanc::ParsedDicomFile f(s); |
845 | 844 |
846 std::unique_ptr<Orthanc::ImageAccessor> decoded(Orthanc::DicomImageDecoder::Decode(f, 0)); | 845 std::unique_ptr<Orthanc::ImageAccessor> decoded(f.DecodeFrame(0)); |
847 ASSERT_EQ(384u, decoded->GetWidth()); | 846 ASSERT_EQ(384u, decoded->GetWidth()); |
848 ASSERT_EQ(256u, decoded->GetHeight()); | 847 ASSERT_EQ(256u, decoded->GetHeight()); |
849 ASSERT_EQ(Orthanc::PixelFormat_RGB24, decoded->GetFormat()); | 848 ASSERT_EQ(Orthanc::PixelFormat_RGB24, decoded->GetFormat()); |
850 | 849 |
851 for (int y = 0; y < 256; y++) | 850 for (int y = 0; y < 256; y++) |
898 { | 897 { |
899 std::string s; | 898 std::string s; |
900 Orthanc::SystemToolbox::ReadFile(s, PATH); | 899 Orthanc::SystemToolbox::ReadFile(s, PATH); |
901 Orthanc::ParsedDicomFile f(s); | 900 Orthanc::ParsedDicomFile f(s); |
902 | 901 |
903 std::unique_ptr<Orthanc::ImageAccessor> decoded(Orthanc::DicomImageDecoder::Decode(f, 0)); | 902 std::unique_ptr<Orthanc::ImageAccessor> decoded(f.DecodeFrame(0)); |
904 ASSERT_EQ(256u, decoded->GetWidth()); | 903 ASSERT_EQ(256u, decoded->GetWidth()); |
905 ASSERT_EQ(256u, decoded->GetHeight()); | 904 ASSERT_EQ(256u, decoded->GetHeight()); |
906 ASSERT_EQ(Orthanc::PixelFormat_Grayscale16, decoded->GetFormat()); | 905 ASSERT_EQ(Orthanc::PixelFormat_Grayscale16, decoded->GetFormat()); |
907 | 906 |
908 for (int y = 0; y < 256; y++) | 907 for (int y = 0; y < 256; y++) |
954 { | 953 { |
955 std::string s; | 954 std::string s; |
956 Orthanc::SystemToolbox::ReadFile(s, PATH); | 955 Orthanc::SystemToolbox::ReadFile(s, PATH); |
957 Orthanc::ParsedDicomFile f(s); | 956 Orthanc::ParsedDicomFile f(s); |
958 | 957 |
959 std::unique_ptr<Orthanc::ImageAccessor> decoded(Orthanc::DicomImageDecoder::Decode(f, 0)); | 958 std::unique_ptr<Orthanc::ImageAccessor> decoded(f.DecodeFrame(0)); |
960 ASSERT_EQ(256u, decoded->GetWidth()); | 959 ASSERT_EQ(256u, decoded->GetWidth()); |
961 ASSERT_EQ(256u, decoded->GetHeight()); | 960 ASSERT_EQ(256u, decoded->GetHeight()); |
962 ASSERT_EQ(Orthanc::PixelFormat_SignedGrayscale16, decoded->GetFormat()); | 961 ASSERT_EQ(Orthanc::PixelFormat_SignedGrayscale16, decoded->GetFormat()); |
963 | 962 |
964 for (int y = 0; y < 256; y++) | 963 for (int y = 0; y < 256; y++) |
970 } | 969 } |
971 } | 970 } |
972 | 971 |
973 | 972 |
974 | 973 |
975 static void CheckEncoding(const ParsedDicomFile& dicom, | 974 static void CheckEncoding(ParsedDicomFile& dicom, |
976 Encoding expected) | 975 Encoding expected) |
977 { | 976 { |
978 const char* value = NULL; | 977 const char* value = NULL; |
979 ASSERT_TRUE(dicom.GetDcmtkObject().getDataset()->findAndGetString(DCM_SpecificCharacterSet, value).good()); | 978 ASSERT_TRUE(dicom.GetDcmtkObject().getDataset()->findAndGetString(DCM_SpecificCharacterSet, value).good()); |
980 | 979 |
1050 if (testEncodings[i] != Encoding_Chinese) | 1049 if (testEncodings[i] != Encoding_Chinese) |
1051 { | 1050 { |
1052 // A specific source string is used in "EncodingTests.py" to | 1051 // A specific source string is used in "EncodingTests.py" to |
1053 // test against Chinese, it is normal that it does not correspond to UTF8 | 1052 // test against Chinese, it is normal that it does not correspond to UTF8 |
1054 | 1053 |
1055 std::string encoded = Toolbox::ConvertToUtf8(Toolbox::ConvertFromUtf8(utf8, testEncodings[i]), testEncodings[i], false); | 1054 const std::string tmp = Toolbox::ConvertToUtf8( |
1056 ASSERT_STREQ(testEncodingsExpected[i], encoded.c_str()); | 1055 Toolbox::ConvertFromUtf8(utf8, testEncodings[i]), testEncodings[i], false); |
1056 ASSERT_STREQ(testEncodingsExpected[i], tmp.c_str()); | |
1057 } | 1057 } |
1058 } | 1058 } |
1059 | 1059 |
1060 | 1060 |
1061 Json::Value v; | 1061 Json::Value v; |
1967 | 1967 |
1968 { | 1968 { |
1969 DicomMap m; | 1969 DicomMap m; |
1970 m.FromDicomWeb(visitor.GetResult()); | 1970 m.FromDicomWeb(visitor.GetResult()); |
1971 ASSERT_EQ(31u, m.GetSize()); | 1971 ASSERT_EQ(31u, m.GetSize()); |
1972 | 1972 |
1973 std::string s; | |
1974 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0002, 0x0002), false)); ASSERT_EQ("UI", s); | 1973 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0002, 0x0002), false)); ASSERT_EQ("UI", s); |
1975 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0040, 0x0241), false)); ASSERT_EQ("AE", s); | 1974 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0040, 0x0241), false)); ASSERT_EQ("AE", s); |
1976 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0010, 0x1010), false)); ASSERT_EQ("AS", s); | 1975 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0010, 0x1010), false)); ASSERT_EQ("AS", s); |
1977 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0020, 0x9165), false)); ASSERT_EQ("00100020", s); | 1976 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0020, 0x9165), false)); ASSERT_EQ("00100020", s); |
1978 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0008, 0x0052), false)); ASSERT_EQ("CS", s); | 1977 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0008, 0x0052), false)); ASSERT_EQ("CS", s); |
2017 #else | 2016 #else |
2018 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0066, 0x0040), true)); ASSERT_EQ("46", s); // OL | 2017 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0066, 0x0040), true)); ASSERT_EQ("46", s); // OL |
2019 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0008, 0x0119), true)); ASSERT_EQ("UC", s); | 2018 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0008, 0x0119), true)); ASSERT_EQ("UC", s); |
2020 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0008, 0x0120), true)); ASSERT_EQ("UR", s); | 2019 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0008, 0x0120), true)); ASSERT_EQ("UR", s); |
2021 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0008, 0x0301), true)); ASSERT_EQ("17", s); // US (but tag unknown to DCMTK 3.6.0) | 2020 ASSERT_TRUE(m.LookupStringValue(s, DicomTag(0x0008, 0x0301), true)); ASSERT_EQ("17", s); // US (but tag unknown to DCMTK 3.6.0) |
2022 #endif | 2021 #endif |
2023 | |
2024 } | 2022 } |
2025 } | 2023 } |
2026 | 2024 |
2027 | 2025 |
2028 TEST(DicomWebJson, Sequence) | 2026 TEST(DicomWebJson, Sequence) |
2105 printf("\n======= %s\n", GetTransferSyntaxUid(a)); | 2103 printf("\n======= %s\n", GetTransferSyntaxUid(a)); |
2106 | 2104 |
2107 std::string source; | 2105 std::string source; |
2108 Orthanc::SystemToolbox::ReadFile(source, path); | 2106 Orthanc::SystemToolbox::ReadFile(source, path); |
2109 | 2107 |
2110 std::string c, i; | 2108 std::string c, k; |
2111 try | 2109 try |
2112 { | 2110 { |
2113 scu.Transcode(c, i, transcoder, source.c_str(), source.size(), false, "", 0); | 2111 scu.Transcode(c, k, transcoder, source.c_str(), source.size(), false, "", 0); |
2114 } | 2112 } |
2115 catch (OrthancException& e) | 2113 catch (OrthancException& e) |
2116 { | 2114 { |
2117 if (e.GetErrorCode() == ErrorCode_NotImplemented) | 2115 if (e.GetErrorCode() == ErrorCode_NotImplemented) |
2118 { | 2116 { |
2119 LOG(ERROR) << "cannot transcode " << GetTransferSyntaxUid(a); | 2117 LOG(ERROR) << "cannot transcode " << GetTransferSyntaxUid(a); |
2120 } | 2118 } |
2121 else | 2119 else |
2122 { | 2120 { |
2123 throw e; | 2121 throw; |
2124 } | 2122 } |
2125 } | 2123 } |
2126 } | 2124 } |
2127 } | 2125 } |
2128 } | 2126 } |
2129 | 2127 |
2130 | 2128 |
2131 TEST(Toto, DISABLED_Transcode4) | 2129 TEST(Toto, DISABLED_Transcode4) |
2132 { | 2130 { |
2133 std::string source; | 2131 std::unique_ptr<DcmFileFormat> toto; |
2134 Orthanc::SystemToolbox::ReadFile(source, "/home/jodogne/Subversion/orthanc-tests/Database/KarstenHilbertRF.dcm"); | 2132 |
2135 | 2133 { |
2136 std::unique_ptr<DcmFileFormat> toto(FromDcmtkBridge::LoadFromMemoryBuffer(source.c_str(), source.size())); | 2134 std::string source; |
2135 Orthanc::SystemToolbox::ReadFile(source, "/home/jodogne/Subversion/orthanc-tests/Database/KarstenHilbertRF.dcm"); | |
2136 toto.reset(FromDcmtkBridge::LoadFromMemoryBuffer(source.c_str(), source.size())); | |
2137 } | |
2138 | |
2137 const std::string sourceUid = IDicomTranscoder::GetSopInstanceUid(*toto); | 2139 const std::string sourceUid = IDicomTranscoder::GetSopInstanceUid(*toto); |
2138 | 2140 |
2139 DicomTransferSyntax sourceSyntax; | 2141 DicomTransferSyntax sourceSyntax; |
2140 ASSERT_TRUE(FromDcmtkBridge::LookupOrthancTransferSyntax(sourceSyntax, *toto)); | 2142 ASSERT_TRUE(FromDcmtkBridge::LookupOrthancTransferSyntax(sourceSyntax, *toto)); |
2141 | 2143 |