forked from python-openxml/python-docx
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_jpeg.py
More file actions
279 lines (224 loc) · 9.16 KB
/
test_jpeg.py
File metadata and controls
279 lines (224 loc) · 9.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
# encoding: utf-8
"""
Test suite for docx.image.jpeg module
"""
from __future__ import absolute_import, print_function
import pytest
from mock import call
from docx.compat import BytesIO
from docx.image.constants import JPEG_MARKER_CODE
from docx.image.helpers import BIG_ENDIAN, StreamReader
from docx.image.jpeg import (
_App0Marker, Jfif, _JfifMarkers, _Marker, _MarkerFinder, _MarkerParser,
_SofMarker
)
from ..unitutil import class_mock, initializer_mock, instance_mock
class DescribeJfif(object):
def it_can_construct_from_a_jfif_stream(self, from_stream_fixture):
# fixture ----------------------
(stream_, blob_, filename_, _JfifMarkers_, px_width, px_height,
horz_dpi, vert_dpi) = from_stream_fixture
# exercise ---------------------
jfif = Jfif.from_stream(stream_, blob_, filename_)
# verify -----------------------
_JfifMarkers_.from_stream.assert_called_once_with(stream_)
assert isinstance(jfif, Jfif)
assert jfif.px_width == px_width
assert jfif.px_height == px_height
assert jfif.horz_dpi == horz_dpi
assert jfif.vert_dpi == vert_dpi
# fixtures -------------------------------------------------------
@pytest.fixture
def blob_(self, request):
return instance_mock(request, bytes)
@pytest.fixture
def filename_(self, request):
return instance_mock(request, str)
@pytest.fixture
def from_stream_fixture(
self, stream_, blob_, filename_, _JfifMarkers_, jfif_markers_):
px_width, px_height = 111, 222
horz_dpi, vert_dpi = 333, 444
jfif_markers_.sof.px_width = px_width
jfif_markers_.sof.px_height = px_height
jfif_markers_.app0.horz_dpi = horz_dpi
jfif_markers_.app0.vert_dpi = vert_dpi
return (
stream_, blob_, filename_, _JfifMarkers_, px_width, px_height,
horz_dpi, vert_dpi
)
@pytest.fixture
def _JfifMarkers_(self, request, jfif_markers_):
_JfifMarkers_ = class_mock(request, 'docx.image.jpeg._JfifMarkers')
_JfifMarkers_.from_stream.return_value = jfif_markers_
return _JfifMarkers_
@pytest.fixture
def jfif_markers_(self, request):
return instance_mock(request, _JfifMarkers)
@pytest.fixture
def stream_(self, request):
return instance_mock(request, BytesIO)
class Describe_JfifMarkers(object):
def it_can_construct_from_a_jfif_stream(self, from_stream_fixture):
stream_, _MarkerParser_, _JfifMarkers__init_, marker_lst = (
from_stream_fixture
)
jfif_markers = _JfifMarkers.from_stream(stream_)
_MarkerParser_.from_stream.assert_called_once_with(stream_)
_JfifMarkers__init_.assert_called_once_with(marker_lst)
assert isinstance(jfif_markers, _JfifMarkers)
# fixtures -------------------------------------------------------
@pytest.fixture
def app0_(self, request):
return instance_mock(
request, _App0Marker, marker_code=JPEG_MARKER_CODE.APP0
)
@pytest.fixture
def eoi_(self, request):
return instance_mock(
request, _SofMarker, marker_code=JPEG_MARKER_CODE.EOI
)
@pytest.fixture
def from_stream_fixture(
self, stream_, _MarkerParser_, _JfifMarkers__init_, soi_, app0_,
sof_, sos_):
marker_lst = [soi_, app0_, sof_, sos_]
return stream_, _MarkerParser_, _JfifMarkers__init_, marker_lst
@pytest.fixture
def _JfifMarkers__init_(self, request):
return initializer_mock(request, _JfifMarkers)
@pytest.fixture
def marker_parser_(self, request, markers_all_):
marker_parser_ = instance_mock(request, _MarkerParser)
marker_parser_.iter_markers.return_value = markers_all_
return marker_parser_
@pytest.fixture
def _MarkerParser_(self, request, marker_parser_):
_MarkerParser_ = class_mock(request, 'docx.image.jpeg._MarkerParser')
_MarkerParser_.from_stream.return_value = marker_parser_
return _MarkerParser_
@pytest.fixture
def markers_all_(self, request, soi_, app0_, sof_, sos_, eoi_):
return [soi_, app0_, sof_, sos_, eoi_]
@pytest.fixture
def sof_(self, request):
return instance_mock(
request, _SofMarker, marker_code=JPEG_MARKER_CODE.SOF0
)
@pytest.fixture
def soi_(self, request):
return instance_mock(
request, _Marker, marker_code=JPEG_MARKER_CODE.SOI
)
@pytest.fixture
def sos_(self, request):
return instance_mock(
request, _Marker, marker_code=JPEG_MARKER_CODE.SOS
)
@pytest.fixture
def stream_(self, request):
return instance_mock(request, BytesIO)
class Describe_MarkerFinder(object):
def it_can_construct_from_a_stream(self, from_stream_fixture):
stream_, _MarkerFinder__init_ = from_stream_fixture
marker_finder = _MarkerFinder.from_stream(stream_)
_MarkerFinder__init_.assert_called_once_with(stream_)
assert isinstance(marker_finder, _MarkerFinder)
# fixtures -------------------------------------------------------
@pytest.fixture
def from_stream_fixture(self, stream_, _MarkerFinder__init_):
return stream_, _MarkerFinder__init_
@pytest.fixture
def _MarkerFinder__init_(self, request):
return initializer_mock(request, _MarkerFinder)
@pytest.fixture
def stream_(self, request):
return instance_mock(request, BytesIO)
class Describe_MarkerParser(object):
def it_can_construct_from_a_jfif_stream(self, from_stream_fixture):
stream_, StreamReader_, _MarkerParser__init_, stream_reader_ = (
from_stream_fixture
)
marker_parser = _MarkerParser.from_stream(stream_)
StreamReader_.assert_called_once_with(stream_, BIG_ENDIAN)
_MarkerParser__init_.assert_called_once_with(stream_reader_)
assert isinstance(marker_parser, _MarkerParser)
def it_can_iterate_over_the_jfif_markers_in_its_stream(
self, iter_markers_fixture):
(marker_parser, stream_, _MarkerFinder_, marker_finder_,
_MarkerFactory_, marker_codes, offsets,
marker_lst) = iter_markers_fixture
markers = [marker for marker in marker_parser.iter_markers()]
_MarkerFinder_.from_stream.assert_called_once_with(stream_)
assert marker_finder_.next.call_args_list == [
call(0), call(2), call(20)
]
assert _MarkerFactory_.call_args_list == [
call(marker_codes[0], stream_, offsets[0]),
call(marker_codes[1], stream_, offsets[1]),
call(marker_codes[2], stream_, offsets[2]),
]
assert markers == marker_lst
# fixtures -------------------------------------------------------
@pytest.fixture
def app0_(self, request):
return instance_mock(request, _App0Marker, segment_length=16)
@pytest.fixture
def eoi_(self, request):
return instance_mock(request, _Marker, segment_length=0)
@pytest.fixture
def from_stream_fixture(
self, stream_, StreamReader_, _MarkerParser__init_,
stream_reader_):
return stream_, StreamReader_, _MarkerParser__init_, stream_reader_
@pytest.fixture
def iter_markers_fixture(
self, stream_reader_, _MarkerFinder_, marker_finder_,
_MarkerFactory_, soi_, app0_, eoi_):
marker_parser = _MarkerParser(stream_reader_)
offsets = [2, 4, 22]
marker_lst = [soi_, app0_, eoi_]
marker_finder_.next.side_effect = [
(JPEG_MARKER_CODE.SOI, offsets[0]),
(JPEG_MARKER_CODE.APP0, offsets[1]),
(JPEG_MARKER_CODE.EOI, offsets[2]),
]
marker_codes = [
JPEG_MARKER_CODE.SOI, JPEG_MARKER_CODE.APP0, JPEG_MARKER_CODE.EOI
]
return (
marker_parser, stream_reader_, _MarkerFinder_, marker_finder_,
_MarkerFactory_, marker_codes, offsets, marker_lst
)
@pytest.fixture
def _MarkerFactory_(self, request, soi_, app0_, eoi_):
return class_mock(
request, 'docx.image.jpeg._MarkerFactory',
side_effect=[soi_, app0_, eoi_]
)
@pytest.fixture
def _MarkerFinder_(self, request, marker_finder_):
_MarkerFinder_ = class_mock(request, 'docx.image.jpeg._MarkerFinder')
_MarkerFinder_.from_stream.return_value = marker_finder_
return _MarkerFinder_
@pytest.fixture
def marker_finder_(self, request):
return instance_mock(request, _MarkerFinder)
@pytest.fixture
def _MarkerParser__init_(self, request):
return initializer_mock(request, _MarkerParser)
@pytest.fixture
def soi_(self, request):
return instance_mock(request, _Marker, segment_length=0)
@pytest.fixture
def stream_(self, request):
return instance_mock(request, BytesIO)
@pytest.fixture
def StreamReader_(self, request, stream_reader_):
return class_mock(
request, 'docx.image.jpeg.StreamReader',
return_value=stream_reader_
)
@pytest.fixture
def stream_reader_(self, request):
return instance_mock(request, StreamReader)