35
35
36
36
37
37
class DescribeTiff (object ):
38
-
39
38
def it_can_construct_from_a_tiff_stream (
40
39
self , stream_ , _TiffParser_ , tiff_parser_ , Tiff__init_
41
40
):
@@ -60,7 +59,7 @@ def it_knows_its_content_type(self):
60
59
61
60
def it_knows_its_default_ext (self ):
62
61
tiff = Tiff (None , None , None , None )
63
- assert tiff .default_ext == ' tiff'
62
+ assert tiff .default_ext == " tiff"
64
63
65
64
# fixtures -------------------------------------------------------
66
65
@@ -70,7 +69,7 @@ def Tiff__init_(self, request):
70
69
71
70
@pytest .fixture
72
71
def _TiffParser_ (self , request , tiff_parser_ ):
73
- _TiffParser_ = class_mock (request , ' docx.image.tiff._TiffParser' )
72
+ _TiffParser_ = class_mock (request , " docx.image.tiff._TiffParser" )
74
73
_TiffParser_ .parse .return_value = tiff_parser_
75
74
return _TiffParser_
76
75
@@ -84,7 +83,6 @@ def stream_(self, request):
84
83
85
84
86
85
class Describe_TiffParser (object ):
87
-
88
86
def it_can_parse_the_properties_from_a_tiff_stream (
89
87
self ,
90
88
stream_ ,
@@ -98,9 +96,7 @@ def it_can_parse_the_properties_from_a_tiff_stream(
98
96
tiff_parser = _TiffParser .parse (stream_ )
99
97
100
98
_make_stream_reader_ .assert_called_once_with (stream_ )
101
- _IfdEntries_ .from_stream .assert_called_once_with (
102
- stream_rdr_ , ifd0_offset_
103
- )
99
+ _IfdEntries_ .from_stream .assert_called_once_with (stream_rdr_ , ifd0_offset_ )
104
100
_TiffParser__init_ .assert_called_once_with (ANY , ifd_entries_ )
105
101
assert isinstance (tiff_parser , _TiffParser )
106
102
@@ -112,10 +108,7 @@ def it_makes_a_stream_reader_to_help_parse(self, mk_stream_rdr_fixture):
112
108
113
109
def it_knows_image_width_and_height_after_parsing (self ):
114
110
px_width , px_height = 42 , 24
115
- entries = {
116
- TIFF_TAG .IMAGE_WIDTH : px_width ,
117
- TIFF_TAG .IMAGE_LENGTH : px_height ,
118
- }
111
+ entries = {TIFF_TAG .IMAGE_WIDTH : px_width , TIFF_TAG .IMAGE_LENGTH : px_height }
119
112
ifd_entries = _IfdEntries (entries )
120
113
tiff_parser = _TiffParser (ifd_entries )
121
114
assert tiff_parser .px_width == px_width
@@ -128,13 +121,15 @@ def it_knows_the_horz_and_vert_dpi_after_parsing(self, dpi_fixture):
128
121
129
122
# fixtures -------------------------------------------------------
130
123
131
- @pytest .fixture (params = [
132
- (1 , 150 , 240 , 72 , 72 ),
133
- (2 , 42 , 24 , 42 , 24 ),
134
- (3 , 100 , 200 , 254 , 508 ),
135
- (2 , None , None , 72 , 72 ),
136
- (None , 96 , 100 , 96 , 100 ),
137
- ])
124
+ @pytest .fixture (
125
+ params = [
126
+ (1 , 150 , 240 , 72 , 72 ),
127
+ (2 , 42 , 24 , 42 , 24 ),
128
+ (3 , 100 , 200 , 254 , 508 ),
129
+ (2 , None , None , 72 , 72 ),
130
+ (None , 96 , 100 , 96 , 100 ),
131
+ ]
132
+ )
138
133
def dpi_fixture (self , request ):
139
134
resolution_unit , x_resolution , y_resolution = request .param [:3 ]
140
135
expected_horz_dpi , expected_vert_dpi = request .param [3 :]
@@ -152,7 +147,7 @@ def dpi_fixture(self, request):
152
147
153
148
@pytest .fixture
154
149
def _IfdEntries_ (self , request , ifd_entries_ ):
155
- _IfdEntries_ = class_mock (request , ' docx.image.tiff._IfdEntries' )
150
+ _IfdEntries_ = class_mock (request , " docx.image.tiff._IfdEntries" )
156
151
_IfdEntries_ .from_stream .return_value = ifd_entries_
157
152
return _IfdEntries_
158
153
@@ -169,15 +164,12 @@ def _make_stream_reader_(self, request, stream_rdr_):
169
164
return method_mock (
170
165
request ,
171
166
_TiffParser ,
172
- ' _make_stream_reader' ,
167
+ " _make_stream_reader" ,
173
168
autospec = False ,
174
- return_value = stream_rdr_
169
+ return_value = stream_rdr_ ,
175
170
)
176
171
177
- @pytest .fixture (params = [
178
- (b'MM\x00 *' , BIG_ENDIAN ),
179
- (b'II*\x00 ' , LITTLE_ENDIAN ),
180
- ])
172
+ @pytest .fixture (params = [(b"MM\x00 *" , BIG_ENDIAN ), (b"II*\x00 " , LITTLE_ENDIAN )])
181
173
def mk_stream_rdr_fixture (self , request , StreamReader_ , stream_rdr_ ):
182
174
bytes_ , endian = request .param
183
175
stream = BytesIO (bytes_ )
@@ -190,7 +182,7 @@ def stream_(self, request):
190
182
@pytest .fixture
191
183
def StreamReader_ (self , request , stream_rdr_ ):
192
184
return class_mock (
193
- request , ' docx.image.tiff.StreamReader' , return_value = stream_rdr_
185
+ request , " docx.image.tiff.StreamReader" , return_value = stream_rdr_
194
186
)
195
187
196
188
@pytest .fixture
@@ -205,7 +197,6 @@ def _TiffParser__init_(self, request):
205
197
206
198
207
199
class Describe_IfdEntries (object ):
208
-
209
200
def it_can_construct_from_a_stream_and_offset (
210
201
self ,
211
202
stream_ ,
@@ -226,7 +217,7 @@ def it_can_construct_from_a_stream_and_offset(
226
217
assert isinstance (ifd_entries , _IfdEntries )
227
218
228
219
def it_has_basic_mapping_semantics (self ):
229
- key , value = 1 , ' foobar'
220
+ key , value = 1 , " foobar"
230
221
entries = {key : value }
231
222
ifd_entries = _IfdEntries (entries )
232
223
assert key in ifd_entries
@@ -249,7 +240,7 @@ def _IfdEntries__init_(self, request):
249
240
@pytest .fixture
250
241
def _IfdParser_ (self , request , ifd_parser_ ):
251
242
return class_mock (
252
- request , ' docx.image.tiff._IfdParser' , return_value = ifd_parser_
243
+ request , " docx.image.tiff._IfdParser" , return_value = ifd_parser_
253
244
)
254
245
255
246
@pytest .fixture
@@ -266,11 +257,14 @@ def stream_(self, request):
266
257
267
258
268
259
class Describe_IfdParser (object ):
269
-
270
- def it_can_iterate_through_the_directory_entries_in_an_IFD (
271
- self , iter_fixture ):
272
- (ifd_parser , _IfdEntryFactory_ , stream_rdr , offsets ,
273
- expected_entries ) = iter_fixture
260
+ def it_can_iterate_through_the_directory_entries_in_an_IFD (self , iter_fixture ):
261
+ (
262
+ ifd_parser ,
263
+ _IfdEntryFactory_ ,
264
+ stream_rdr ,
265
+ offsets ,
266
+ expected_entries ,
267
+ ) = iter_fixture
274
268
entries = [e for e in ifd_parser .iter_entries ()]
275
269
assert _IfdEntryFactory_ .call_args_list == [
276
270
call (stream_rdr , offsets [0 ]),
@@ -291,24 +285,21 @@ def ifd_entry_2_(self, request):
291
285
@pytest .fixture
292
286
def _IfdEntryFactory_ (self , request , ifd_entry_ , ifd_entry_2_ ):
293
287
return function_mock (
294
- request , 'docx.image.tiff._IfdEntryFactory' ,
295
- side_effect = [ifd_entry_ , ifd_entry_2_ ]
288
+ request ,
289
+ "docx.image.tiff._IfdEntryFactory" ,
290
+ side_effect = [ifd_entry_ , ifd_entry_2_ ],
296
291
)
297
292
298
293
@pytest .fixture
299
294
def iter_fixture (self , _IfdEntryFactory_ , ifd_entry_ , ifd_entry_2_ ):
300
- stream_rdr = StreamReader (BytesIO (b' \x00 \x02 ' ), BIG_ENDIAN )
295
+ stream_rdr = StreamReader (BytesIO (b" \x00 \x02 " ), BIG_ENDIAN )
301
296
offsets = [2 , 14 ]
302
297
ifd_parser = _IfdParser (stream_rdr , offset = 0 )
303
298
expected_entries = [ifd_entry_ , ifd_entry_2_ ]
304
- return (
305
- ifd_parser , _IfdEntryFactory_ , stream_rdr , offsets ,
306
- expected_entries
307
- )
299
+ return (ifd_parser , _IfdEntryFactory_ , stream_rdr , offsets , expected_entries )
308
300
309
301
310
302
class Describe_IfdEntryFactory (object ):
311
-
312
303
def it_constructs_the_right_class_for_a_given_ifd_entry (self , fixture ):
313
304
stream_rdr , offset , entry_cls_ , ifd_entry_ = fixture
314
305
ifd_entry = _IfdEntryFactory (stream_rdr , offset )
@@ -317,25 +308,34 @@ def it_constructs_the_right_class_for_a_given_ifd_entry(self, fixture):
317
308
318
309
# fixtures -------------------------------------------------------
319
310
320
- @pytest .fixture (params = [
321
- (b'\x66 \x66 \x00 \x01 ' , 'BYTE' ),
322
- (b'\x66 \x66 \x00 \x02 ' , 'ASCII' ),
323
- (b'\x66 \x66 \x00 \x03 ' , 'SHORT' ),
324
- (b'\x66 \x66 \x00 \x04 ' , 'LONG' ),
325
- (b'\x66 \x66 \x00 \x05 ' , 'RATIONAL' ),
326
- (b'\x66 \x66 \x00 \x06 ' , 'CUSTOM' ),
327
- ])
311
+ @pytest .fixture (
312
+ params = [
313
+ (b"\x66 \x66 \x00 \x01 " , "BYTE" ),
314
+ (b"\x66 \x66 \x00 \x02 " , "ASCII" ),
315
+ (b"\x66 \x66 \x00 \x03 " , "SHORT" ),
316
+ (b"\x66 \x66 \x00 \x04 " , "LONG" ),
317
+ (b"\x66 \x66 \x00 \x05 " , "RATIONAL" ),
318
+ (b"\x66 \x66 \x00 \x06 " , "CUSTOM" ),
319
+ ]
320
+ )
328
321
def fixture (
329
- self , request , ifd_entry_ , _IfdEntry_ , _AsciiIfdEntry_ ,
330
- _ShortIfdEntry_ , _LongIfdEntry_ , _RationalIfdEntry_ ):
322
+ self ,
323
+ request ,
324
+ ifd_entry_ ,
325
+ _IfdEntry_ ,
326
+ _AsciiIfdEntry_ ,
327
+ _ShortIfdEntry_ ,
328
+ _LongIfdEntry_ ,
329
+ _RationalIfdEntry_ ,
330
+ ):
331
331
bytes_ , entry_type = request .param
332
332
entry_cls_ = {
333
- ' BYTE' : _IfdEntry_ ,
334
- ' ASCII' : _AsciiIfdEntry_ ,
335
- ' SHORT' : _ShortIfdEntry_ ,
336
- ' LONG' : _LongIfdEntry_ ,
337
- ' RATIONAL' : _RationalIfdEntry_ ,
338
- ' CUSTOM' : _IfdEntry_ ,
333
+ " BYTE" : _IfdEntry_ ,
334
+ " ASCII" : _AsciiIfdEntry_ ,
335
+ " SHORT" : _ShortIfdEntry_ ,
336
+ " LONG" : _LongIfdEntry_ ,
337
+ " RATIONAL" : _RationalIfdEntry_ ,
338
+ " CUSTOM" : _IfdEntry_ ,
339
339
}[entry_type ]
340
340
stream_rdr = StreamReader (BytesIO (bytes_ ), BIG_ENDIAN )
341
341
offset = 0
@@ -347,35 +347,31 @@ def ifd_entry_(self, request):
347
347
348
348
@pytest .fixture
349
349
def _IfdEntry_ (self , request , ifd_entry_ ):
350
- _IfdEntry_ = class_mock (request , ' docx.image.tiff._IfdEntry' )
350
+ _IfdEntry_ = class_mock (request , " docx.image.tiff._IfdEntry" )
351
351
_IfdEntry_ .from_stream .return_value = ifd_entry_
352
352
return _IfdEntry_
353
353
354
354
@pytest .fixture
355
355
def _AsciiIfdEntry_ (self , request , ifd_entry_ ):
356
- _AsciiIfdEntry_ = class_mock (
357
- request , 'docx.image.tiff._AsciiIfdEntry' )
356
+ _AsciiIfdEntry_ = class_mock (request , "docx.image.tiff._AsciiIfdEntry" )
358
357
_AsciiIfdEntry_ .from_stream .return_value = ifd_entry_
359
358
return _AsciiIfdEntry_
360
359
361
360
@pytest .fixture
362
361
def _ShortIfdEntry_ (self , request , ifd_entry_ ):
363
- _ShortIfdEntry_ = class_mock (
364
- request , 'docx.image.tiff._ShortIfdEntry' )
362
+ _ShortIfdEntry_ = class_mock (request , "docx.image.tiff._ShortIfdEntry" )
365
363
_ShortIfdEntry_ .from_stream .return_value = ifd_entry_
366
364
return _ShortIfdEntry_
367
365
368
366
@pytest .fixture
369
367
def _LongIfdEntry_ (self , request , ifd_entry_ ):
370
- _LongIfdEntry_ = class_mock (
371
- request , 'docx.image.tiff._LongIfdEntry' )
368
+ _LongIfdEntry_ = class_mock (request , "docx.image.tiff._LongIfdEntry" )
372
369
_LongIfdEntry_ .from_stream .return_value = ifd_entry_
373
370
return _LongIfdEntry_
374
371
375
372
@pytest .fixture
376
373
def _RationalIfdEntry_ (self , request , ifd_entry_ ):
377
- _RationalIfdEntry_ = class_mock (
378
- request , 'docx.image.tiff._RationalIfdEntry' )
374
+ _RationalIfdEntry_ = class_mock (request , "docx.image.tiff._RationalIfdEntry" )
379
375
_RationalIfdEntry_ .from_stream .return_value = ifd_entry_
380
376
return _RationalIfdEntry_
381
377
@@ -385,11 +381,10 @@ def offset_(self, request):
385
381
386
382
387
383
class Describe_IfdEntry (object ):
388
-
389
384
def it_can_construct_from_a_stream_and_offset (
390
385
self , _parse_value_ , _IfdEntry__init_ , value_
391
386
):
392
- bytes_ = b' \x00 \x01 \x66 \x66 \x00 \x00 \x00 \x02 \x00 \x00 \x00 \x03 '
387
+ bytes_ = b" \x00 \x01 \x66 \x66 \x00 \x00 \x00 \x02 \x00 \x00 \x00 \x03 "
393
388
stream_rdr = StreamReader (BytesIO (bytes_ ), BIG_ENDIAN )
394
389
offset , tag_code , value_count , value_offset = 0 , 1 , 2 , 3
395
390
_parse_value_ .return_value = value_
@@ -415,44 +410,40 @@ def _IfdEntry__init_(self, request):
415
410
416
411
@pytest .fixture
417
412
def _parse_value_ (self , request ):
418
- return method_mock (request , _IfdEntry , ' _parse_value' , autospec = False )
413
+ return method_mock (request , _IfdEntry , " _parse_value" , autospec = False )
419
414
420
415
@pytest .fixture
421
416
def value_ (self , request ):
422
417
return loose_mock (request )
423
418
424
419
425
420
class Describe_AsciiIfdEntry (object ):
426
-
427
421
def it_can_parse_an_ascii_string_IFD_entry (self ):
428
- bytes_ = b' foobar\x00 '
422
+ bytes_ = b" foobar\x00 "
429
423
stream_rdr = StreamReader (BytesIO (bytes_ ), BIG_ENDIAN )
430
424
val = _AsciiIfdEntry ._parse_value (stream_rdr , None , 7 , 0 )
431
- assert val == ' foobar'
425
+ assert val == " foobar"
432
426
433
427
434
428
class Describe_ShortIfdEntry (object ):
435
-
436
429
def it_can_parse_a_short_int_IFD_entry (self ):
437
- bytes_ = b' foobaroo\x00 \x2A '
430
+ bytes_ = b" foobaroo\x00 \x2A "
438
431
stream_rdr = StreamReader (BytesIO (bytes_ ), BIG_ENDIAN )
439
432
val = _ShortIfdEntry ._parse_value (stream_rdr , 0 , 1 , None )
440
433
assert val == 42
441
434
442
435
443
436
class Describe_LongIfdEntry (object ):
444
-
445
437
def it_can_parse_a_long_int_IFD_entry (self ):
446
- bytes_ = b' foobaroo\x00 \x00 \x00 \x2A '
438
+ bytes_ = b" foobaroo\x00 \x00 \x00 \x2A "
447
439
stream_rdr = StreamReader (BytesIO (bytes_ ), BIG_ENDIAN )
448
440
val = _LongIfdEntry ._parse_value (stream_rdr , 0 , 1 , None )
449
441
assert val == 42
450
442
451
443
452
444
class Describe_RationalIfdEntry (object ):
453
-
454
445
def it_can_parse_a_rational_IFD_entry (self ):
455
- bytes_ = b' \x00 \x00 \x00 \x2A \x00 \x00 \x00 \x54 '
446
+ bytes_ = b" \x00 \x00 \x00 \x2A \x00 \x00 \x00 \x54 "
456
447
stream_rdr = StreamReader (BytesIO (bytes_ ), BIG_ENDIAN )
457
448
val = _RationalIfdEntry ._parse_value (stream_rdr , None , 1 , 0 )
458
449
assert val == 0.5
0 commit comments