@@ -45,15 +45,13 @@ def test_ignore_condition_without_tag(self):
45
45
)
46
46
self .assertEqual ('U' , result .type )
47
47
48
- def test_handle_condition_without_value (self ):
48
+ def test_ignore_condition_without_value (self ):
49
49
# regression test for #15
50
50
result = self .parser .parse (
51
51
'required if Selector Attribute (0072,0026) is nested in '
52
52
'one or more Sequences or is absent.'
53
53
)
54
- self .assertEqual ('MN' , result .type )
55
- self .assertEqual ('(0072,0026)' , result .tag )
56
- self .assertEqual ('=' , result .operator )
54
+ self .assertEqual ('U' , result .type )
57
55
58
56
59
57
class SimpleConditionParserTest (ConditionParserTest ):
@@ -86,6 +84,42 @@ def test_is_present(self):
86
84
self .assertEqual ('+' , result .operator )
87
85
self .assertEqual ([], result .values )
88
86
87
+ def test_equal_sign (self ):
88
+ result = self .parser .parse (
89
+ 'Required if Pixel Component Organization = Bit aligned.'
90
+ )
91
+ self .assertEqual ('MN' , result .type )
92
+ self .assertEqual ('(0018,6044)' , result .tag )
93
+ self .assertEqual ('=' , result .operator )
94
+ self .assertEqual (['Bit aligned' ], result .values )
95
+
96
+ def test_value_has_explanation (self ):
97
+ result = self .parser .parse (
98
+ 'Required if Conversion Type (0008,0064) is DF (Digitized Film).'
99
+ )
100
+ self .assertEqual ('MN' , result .type )
101
+ self .assertEqual ('(0008,0064)' , result .tag )
102
+ self .assertEqual ('=' , result .operator )
103
+ self .assertEqual (['DF' ], result .values )
104
+
105
+ def test_values_have_explanation (self ):
106
+ result = self .parser .parse (
107
+ 'Required if Conversion Type (0008,0064) is SD (Scanned Document) or SI (Scanned Image).'
108
+ )
109
+ self .assertEqual ('MN' , result .type )
110
+ self .assertEqual ('(0008,0064)' , result .tag )
111
+ self .assertEqual ('=' , result .operator )
112
+ self .assertEqual (['SD' , 'SI' ], result .values )
113
+
114
+ def test_is_with_colon_after_value (self ):
115
+ result = self .parser .parse (
116
+ 'Required if the value of Reformatting Operation Type (0072,0510) is 3D_RENDERING:'
117
+ )
118
+ self .assertEqual ('MN' , result .type )
119
+ self .assertEqual ('(0072,0510)' , result .tag )
120
+ self .assertEqual ('=' , result .operator )
121
+ self .assertEqual (['3D_RENDERING' ], result .values )
122
+
89
123
def test_is_present_with_value (self ):
90
124
result = self .parser .parse (
91
125
'Required if Responsible Person is present and has a value.'
@@ -95,6 +129,15 @@ def test_is_present_with_value(self):
95
129
self .assertEqual ('++' , result .operator )
96
130
self .assertEqual ([], result .values )
97
131
132
+ def test_is_set_to (self ):
133
+ result = self .parser .parse (
134
+ 'Required if Ophthalmic Volumetric Properties Flag (0022,1622) is set to YES. May be present otherwise.'
135
+ )
136
+ self .assertEqual ('MU' , result .type )
137
+ self .assertEqual ('(0022,1622)' , result .tag )
138
+ self .assertEqual ('=' , result .operator )
139
+ self .assertEqual (['YES' ], result .values )
140
+
98
141
def test_is_present_tag_name_with_digit (self ):
99
142
result = self .parser .parse (
100
143
'Required if 3D Mating Point (0068,64C0) is present.'
@@ -135,6 +178,14 @@ def test_required_only_if(self):
135
178
self .assertEqual ('-' , result .operator )
136
179
self .assertEqual ([], result .values )
137
180
181
+ def test_values_failed_parsing (self ):
182
+ """Regression test for #20 (if the value could not be parsed ignore the condition)"""
183
+ result = self .parser .parse (
184
+ 'Required if Constraint Violation Significance (0082,0036) '
185
+ 'is only significant under certain conditions.'
186
+ )
187
+ self .assertEqual ('U' , result .type )
188
+
138
189
139
190
class ValueConditionParserTest (ConditionParserTest ):
140
191
def test_equality_tag (self ):
@@ -318,6 +369,14 @@ def test_present_with_value(self):
318
369
self .assertEqual ('=' , result .operator )
319
370
self .assertEqual (['AS' ], result .values )
320
371
372
+ def test_value_is_not (self ):
373
+ result = self .parser .parse (
374
+ 'Required if Shadow Style (0070,0244) value is not OFF.'
375
+ )
376
+ self .assertEqual ('MN' , result .type )
377
+ self .assertEqual ('!=' , result .operator )
378
+ self .assertEqual (['OFF' ], result .values )
379
+
321
380
def test_other_than (self ):
322
381
result = self .parser .parse (
323
382
'Required if Decay Correction (0054,1102) is other than NONE.'
@@ -335,6 +394,14 @@ def test_not_equal_to(self):
335
394
self .assertEqual ('!=' , result .operator )
336
395
self .assertEqual (['UNDEFINED' ], result .values )
337
396
397
+ def test_equal_to (self ):
398
+ result = self .parser .parse (
399
+ 'Required if Blending Mode (0070,1B06) is equal to FOREGROUND.'
400
+ )
401
+ self .assertEqual ('MN' , result .type )
402
+ self .assertEqual ('=' , result .operator )
403
+ self .assertEqual (['FOREGROUND' ], result .values )
404
+
338
405
def test_present_with_value_of (self ):
339
406
result = self .parser .parse (
340
407
'Required if Partial View '
@@ -361,6 +428,26 @@ def test_non_zero(self):
361
428
self .assertEqual ('!=' , result .operator )
362
429
self .assertEqual (['0' ], result .values )
363
430
431
+ def test_non_null (self ):
432
+ result = self .parser .parse (
433
+ 'Required if value Transfer Tube Number (300A,02A2) is non-null.'
434
+ )
435
+ assert result .type == 'MN'
436
+ assert result .tag == '(300A,02A2)'
437
+ assert result .operator == '++'
438
+ self .assertEqual ([], result .values )
439
+
440
+ def test_zero_length (self ):
441
+ result = self .parser .parse (
442
+ 'Required if Material ID (300A,00E1) is zero-length. '
443
+ 'May be present if Material ID (300A,00E1) is non-zero length.'
444
+ )
445
+ assert result .type == 'MC'
446
+ assert result .tag == '(300A,00E1)'
447
+ assert result .operator == '='
448
+ self .assertEqual (['' ], result .values )
449
+ assert result .other_condition is not None
450
+
364
451
def test_greater_than_zero (self ):
365
452
result = self .parser .parse (
366
453
'Required if Number of Beams (300A,0080) is greater than zero'
0 commit comments