comparison Plugins/DicomWeb/Run.py @ 248:26c3a1ed935a

testing of encodings in DICOMweb
author Sebastien Jodogne <s.jodogne@gmail.com>
date Tue, 25 Jun 2019 14:22:48 +0200
parents e4e0e2ff91ae
children 24e5c8ca9440
comparison
equal deleted inserted replaced
247:1abdab0ba0e6 248:26c3a1ed935a
737 DoGet(ORTHANC, '/dicom-web/studies/0.0.0.0.0/series/0.0.0.0.0/instances/0.0.0.0.0/metadata') 737 DoGet(ORTHANC, '/dicom-web/studies/0.0.0.0.0/series/0.0.0.0.0/instances/0.0.0.0.0/metadata')
738 self.assertFail() 738 self.assertFail()
739 except Exception as e: 739 except Exception as e:
740 self.assertEqual(404, e[0]) 740 self.assertEqual(404, e[0])
741 741
742
743 def test_encodings_qido(self):
744 # The "DefaultEncoding" condifuration option is set to "UTF8"
745 # in the integration tests, so all the QIDO-RS requests must
746 # lead to a "ISO_IR 192" specific character set
747 def GetPatientName(dicom, onlyAlphabetic):
748 i = UploadInstance(ORTHANC, dicom) ['ID']
749 j = DoGet(ORTHANC, '/instances/%s/tags?simplify' % i) ['StudyInstanceUID']
750 qido = DoGet(ORTHANC, '/dicom-web/studies?0020000D=%s' % j)
751 self.assertEqual(1, len(qido))
752 self.assertEqual('CS', qido[0]['00080005']['vr'])
753 self.assertEqual('ISO_IR 192', qido[0]['00080005']['Value'][0])
754 if onlyAlphabetic:
755 self.assertEqual(1, len(qido[0]['00100010']['Value'][0]))
756 else:
757 self.assertEqual(3, len(qido[0]['00100010']['Value'][0]))
758 return qido[0]['00100010']['Value'][0]
759
760 # Check out "test_issue_95_encodings" in "../../Tests/Tests.py"
761
762 self.assertEqual(u'Buc^Jérôme', GetPatientName('Encodings/DavidClunie/SCSFREN', True) ['Alphabetic'])
763 self.assertEqual(u'Äneas^Rüdiger', GetPatientName('Encodings/DavidClunie/SCSGERM', True)['Alphabetic'])
764 self.assertEqual(u'Διονυσιος', GetPatientName('Encodings/DavidClunie/SCSGREEK', True)['Alphabetic'])
765 self.assertEqual(u'Люкceмбypг', GetPatientName('Encodings/DavidClunie/SCSRUSS', True)['Alphabetic'])
766 self.assertEqual(u'שרון^דבורה', GetPatientName('Encodings/DavidClunie/SCSHBRW', True)['Alphabetic'])
767 self.assertEqual(u'قباني^لنزار', GetPatientName('Encodings/DavidClunie/SCSARAB', True)['Alphabetic'])
768
769 self.assertEqual(u'Hong^Gildong', GetPatientName('Encodings/DavidClunie/SCSI2', False)['Alphabetic'])
770 self.assertEqual(u'洪^吉洞', GetPatientName('Encodings/DavidClunie/SCSI2', False)['Ideographic'])
771 self.assertEqual(u'홍^길동', GetPatientName('Encodings/DavidClunie/SCSI2', False)['Phonetic'])
772 self.assertEqual(u'Wang^XiaoDong', GetPatientName('Encodings/DavidClunie/SCSX2', False)['Alphabetic'])
773 self.assertEqual(u'王^小东', GetPatientName('Encodings/DavidClunie/SCSX2', False)['Ideographic'])
774 self.assertEqual(u'', GetPatientName('Encodings/DavidClunie/SCSX2', False)['Phonetic'])
775 self.assertEqual(u'Wang^XiaoDong', GetPatientName('Encodings/DavidClunie/SCSX1', False)['Alphabetic'])
776 self.assertEqual(u'王^小東', GetPatientName('Encodings/DavidClunie/SCSX1', False)['Ideographic'])
777 self.assertEqual(u'', GetPatientName('Encodings/DavidClunie/SCSX1', False)['Phonetic'])
778 self.assertEqual(u'Yamada^Tarou', GetPatientName('Encodings/DavidClunie/SCSH31', False)['Alphabetic'])
779 self.assertEqual(u'山田^太郎', GetPatientName('Encodings/DavidClunie/SCSH31', False)['Ideographic'])
780 self.assertEqual(u'やまだ^たろう', GetPatientName('Encodings/DavidClunie/SCSH31', False)['Phonetic'])
781 self.assertEqual(u'ヤマダ^タロウ', GetPatientName('Encodings/DavidClunie/SCSH32', False)['Alphabetic'])
782
783 # TODO - Not supported yet by the Orthanc core
784 #self.assertEqual(u'山田^太郎', GetPatientName('Encodings/DavidClunie/SCSH32')['Ideographic'])
785 #self.assertEqual(u'やまだ^たろう', GetPatientName('Encodings/DavidClunie/SCSH32')['Phonetic'])
786
787
788 def test_encodings_wado_metadata(self):
789 # If querying the instance metadata, the "DefaultEncoding"
790 # configuration is not used, but the actual encoding
791 def GetEncoding(dicom, length):
792 i = UploadInstance(ORTHANC, dicom) ['ID']
793 study = DoGet(ORTHANC, '/instances/%s/tags?simplify' % i) ['StudyInstanceUID']
794 series = DoGet(ORTHANC, '/instances/%s/tags?simplify' % i) ['SeriesInstanceUID']
795 instance = DoGet(ORTHANC, '/instances/%s/tags?simplify' % i) ['SOPInstanceUID']
796 qido = DoGet(ORTHANC, '/dicom-web/studies/%s/series/%s/instances/%s/metadata' % (study, series, instance))
797 self.assertEqual(1, len(qido))
798 self.assertEqual(length, len(qido[0]['00080005']['Value']))
799 self.assertEqual('CS', qido[0]['00080005']['vr'])
800 return qido[0]['00080005']['Value']
801
802 self.assertEqual('ISO_IR 100', GetEncoding('Encodings/DavidClunie/SCSFREN', 1)[0])
803 self.assertEqual('ISO_IR 100', GetEncoding('Encodings/DavidClunie/SCSGERM', 1)[0])
804 self.assertEqual('ISO_IR 126', GetEncoding('Encodings/DavidClunie/SCSGREEK', 1)[0])
805 self.assertEqual('ISO_IR 144', GetEncoding('Encodings/DavidClunie/SCSRUSS', 1)[0])
806 self.assertEqual('ISO_IR 138', GetEncoding('Encodings/DavidClunie/SCSHBRW', 1)[0])
807 self.assertEqual('ISO_IR 127', GetEncoding('Encodings/DavidClunie/SCSARAB', 1)[0])
808 self.assertEqual('ISO 2022 IR 149', GetEncoding('Encodings/DavidClunie/SCSI2', 1)[0])
809 self.assertEqual('GB18030', GetEncoding('Encodings/DavidClunie/SCSX2', 1)[0])
810 self.assertEqual('ISO_IR 192', GetEncoding('Encodings/DavidClunie/SCSX1', 1)[0])
811 self.assertEqual('ISO 2022 IR 87', GetEncoding('Encodings/DavidClunie/SCSH31', 1)[0])
812 self.assertEqual('ISO 2022 IR 13', GetEncoding('Encodings/DavidClunie/SCSH32', 2)[0])
813 self.assertEqual('ISO 2022 IR 87', GetEncoding('Encodings/DavidClunie/SCSH32', 2)[1])
814
742 815
743 try: 816 try:
744 print('\nStarting the tests...') 817 print('\nStarting the tests...')
745 unittest.main(argv = [ sys.argv[0] ] + args.options) 818 unittest.main(argv = [ sys.argv[0] ] + args.options)
746 819