comparison Tests/Tests.py @ 92:dbcbffb889da

test_findscu_encoding
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 08 Dec 2016 12:46:04 +0100
parents 74b7b9aed5f8
children a807a4699eb4
comparison
equal deleted inserted replaced
91:ba5619c3941d 92:dbcbffb889da
2088 2088
2089 self.assertEqual('b57e6c872a3da50877c7da689b03a444', ComputeMD5(DoGet(_REMOTE, '/instances/%s/matlab' % signed))) 2089 self.assertEqual('b57e6c872a3da50877c7da689b03a444', ComputeMD5(DoGet(_REMOTE, '/instances/%s/matlab' % signed)))
2090 2090
2091 2091
2092 def test_googlecode_issue_32(self): 2092 def test_googlecode_issue_32(self):
2093 self.assertRaises(Exception, lambda: DoPut(_REMOTE, '/tools/default-encoding', 'nope'))
2094 self.assertEqual('Windows1251', DoPut(_REMOTE, '/tools/default-encoding', 'Windows1251'))
2095 self.assertEqual('Windows1251', DoGet(_REMOTE, '/tools/default-encoding'))
2096
2093 f = UploadInstance(_REMOTE, 'Issue32.dcm')['ID'] 2097 f = UploadInstance(_REMOTE, 'Issue32.dcm')['ID']
2094 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % f) 2098 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % f)
2095 self.assertEqual(u'Рентгенография', tags['SeriesDescription']) 2099 self.assertEqual(u'Рентгенография', tags['SeriesDescription'])
2096 self.assertEqual(u'Таз', tags['BodyPartExamined']) 2100 self.assertEqual(u'Таз', tags['BodyPartExamined'])
2097 self.assertEqual(u'Прямая', tags['ViewPosition']) 2101 self.assertEqual(u'Прямая', tags['ViewPosition'])
2098 2102
2099 2103 # Replay the same test using Latin1 as default encoding: This must fail
2104 self.assertEqual('Latin1', DoPut(_REMOTE, '/tools/default-encoding', 'Latin1'))
2105
2106 DoDelete(_REMOTE, '/instances/%s' % f)
2107 f = UploadInstance(_REMOTE, 'Issue32.dcm')['ID']
2108 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % f)
2109 self.assertNotEqual(u'Рентгенография', tags['SeriesDescription'])
2110
2111
2100 def test_encodings(self): 2112 def test_encodings(self):
2101 # Latin-1 (ISO_IR 100) 2113 # Latin-1 (ISO_IR 100)
2102 brainix = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID'] 2114 brainix = UploadInstance(_REMOTE, 'Brainix/Epi/IM-0001-0001.dcm')['ID']
2103 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % brainix) 2115 tags = DoGet(_REMOTE, '/instances/%s/tags?simplify' % brainix)
2104 self.assertEqual(u'IRM cérébrale, neuro-crâne', tags['StudyDescription']) 2116 self.assertEqual(u'IRM cérébrale, neuro-crâne', tags['StudyDescription'])
2987 i = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID'] 2999 i = UploadInstance(_REMOTE, 'PrivateMDNTags.dcm')['ID']
2988 t = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i) 3000 t = DoGet(_REMOTE, '/instances/%s/tags?simplify' % i)
2989 self.assertEqual('1.2.840.113704.1.111.6320.1342451261.21', t['PET-CT Multi Modality Name']) 3001 self.assertEqual('1.2.840.113704.1.111.6320.1342451261.21', t['PET-CT Multi Modality Name'])
2990 self.assertEqual('p37s0_na_ctac.img', t['Original Image Filename']) 3002 self.assertEqual('p37s0_na_ctac.img', t['Original Image Filename'])
2991 3003
3004
3005 def test_findscu_encoding(self):
3006 # Check out ../Database/Encodings/Generate.sh
3007 TEST = u'Test-éüäöòДΘĝדصķћ๛ネİ'
3008 ENCODINGS = {
3009 'Arabic' : [ 'ISO_IR 127' ],
3010 'Ascii' : [ 'ISO_IR 6' ], # More accurately, ISO 646
3011 'Cyrillic' : [ 'ISO_IR 144' ],
3012 'Greek' : [ 'ISO_IR 126' ],
3013 'Hebrew' : [ 'ISO_IR 138' ],
3014 'Japanese' : [ 'ISO_IR 13', 'shift-jis' ],
3015 'Latin1' : [ 'ISO_IR 100' ],
3016 'Latin2' : [ 'ISO_IR 101' ],
3017 'Latin3' : [ 'ISO_IR 109' ],
3018 'Latin4' : [ 'ISO_IR 110' ],
3019 'Latin5' : [ 'ISO_IR 148' ],
3020 'Thai' : [ 'ISO_IR 166', 'tis-620' ],
3021 'Utf8' : [ 'ISO_IR 192' ],
3022 }
3023
3024 for name in ENCODINGS.iterkeys():
3025 if len(ENCODINGS[name]) == 1:
3026 ENCODINGS[name].append(name.lower())
3027
3028 UploadInstance(_REMOTE, 'Encodings/Lena-utf8.dcm')
3029
3030 for name in ENCODINGS.iterkeys():
3031 self.assertEqual(name, DoPut(_REMOTE, '/tools/default-encoding', name))
3032 self.assertEqual(name, DoGet(_REMOTE, '/tools/default-encoding'))
3033
3034 i = CallFindScu([ '-k', '0008,0052=STUDY',
3035 '-k', 'SpecificCharacterSet',
3036 '-k', 'PatientName' ])
3037
3038 characterSet = re.findall('\(0008,0005\).*?\[(.*?)\]', i)
3039 self.assertEqual(1, len(characterSet))
3040 self.assertEqual(ENCODINGS[name][0], characterSet[0].strip())
3041
3042 patientName = re.findall('\(0010,0010\).*?\[(.*?)\]', i)
3043 self.assertEqual(1, len(patientName))
3044
3045 expected = TEST.encode(ENCODINGS[name][1], 'ignore')
3046 self.assertEqual(expected, patientName[0].strip())
3047
3048
3049 #for master in ENCODINGS:
3050 for master in [ 'Latin1', 'Utf8', 'Cyrillic' ]: # Shortcut to speedup tests
3051 self.assertEqual(master, DoPut(_REMOTE, '/tools/default-encoding', master))
3052 self.assertEqual(master, DoGet(_REMOTE, '/tools/default-encoding'))
3053
3054 for name in ENCODINGS:
3055 DropOrthanc(_REMOTE)
3056 UploadInstance(_REMOTE, 'Encodings/Lena-%s.dcm' % ENCODINGS[name][1])
3057
3058 i = CallFindScu([ '-k', '0008,0052=STUDY',
3059 '-k', 'PatientID',
3060 '-k', 'SpecificCharacterSet',
3061 '-k', 'PatientName' ])
3062 i = i.decode(ENCODINGS[master][1])
3063
3064 characterSet = re.findall('\(0008,0005\).*?\[(.*?)\]', i)
3065 self.assertEqual(1, len(characterSet))
3066 self.assertEqual(ENCODINGS[master][0], characterSet[0].strip())
3067
3068 patientId = re.findall('\(0010,0020\).*?\[(.*?)\]', i)
3069 self.assertEqual(1, len(patientId))
3070 self.assertEqual(ENCODINGS[name][1], patientId[0].strip())
3071
3072 patientName = re.findall('\(0010,0010\).*?\[(.*?)\]', i)
3073 self.assertEqual(1, len(patientName))
3074
3075 tmp = ENCODINGS[name][1]
3076 expected = TEST.encode(tmp, 'ignore').decode(tmp)
3077 tmp = ENCODINGS[master][1]
3078 expected = expected.encode(tmp, 'ignore').decode(tmp)
3079
3080 self.assertEqual(expected, patientName[0].strip())
3081
3082
3083 a = DoPost(_REMOTE, '/tools/find', { 'Expand' : True,
3084 'Level' : 'Study',
3085 'Query' : { }})
3086 self.assertEqual(1, len(a))
3087
3088 tmp = ENCODINGS[name][1]
3089 self.assertEqual(TEST.encode(tmp, 'ignore').decode(tmp), a[0]["PatientMainDicomTags"]["PatientName"])