|
14 | 14 | from docx.image.constants import JPEG_MARKER_CODE |
15 | 15 | from docx.image.helpers import BIG_ENDIAN, StreamReader |
16 | 16 | from docx.image.jpeg import ( |
17 | | - _App0Marker, Jfif, _JfifMarkers, _Marker, _MarkerFinder, _MarkerParser, |
18 | | - _SofMarker |
| 17 | + _App0Marker, Jfif, _JfifMarkers, _Marker, _MarkerFactory, _MarkerFinder, |
| 18 | + _MarkerParser, _SofMarker |
19 | 19 | ) |
20 | 20 |
|
21 | 21 | from ..unitutil import class_mock, initializer_mock, instance_mock |
@@ -151,6 +151,57 @@ def stream_(self, request): |
151 | 151 | return instance_mock(request, BytesIO) |
152 | 152 |
|
153 | 153 |
|
| 154 | +class Describe_MarkerFactory(object): |
| 155 | + |
| 156 | + def it_constructs_the_appropriate_marker_object(self, call_fixture): |
| 157 | + marker_code, stream_, offset_, marker_cls_ = call_fixture |
| 158 | + marker = _MarkerFactory(marker_code, stream_, offset_) |
| 159 | + marker_cls_.from_stream.assert_called_once_with( |
| 160 | + stream_, marker_code, offset_ |
| 161 | + ) |
| 162 | + assert marker is marker_cls_.from_stream.return_value |
| 163 | + |
| 164 | + # fixtures ------------------------------------------------------- |
| 165 | + |
| 166 | + @pytest.fixture(params=[ |
| 167 | + JPEG_MARKER_CODE.APP0, |
| 168 | + JPEG_MARKER_CODE.SOF0, |
| 169 | + JPEG_MARKER_CODE.SOF7, |
| 170 | + JPEG_MARKER_CODE.SOS, |
| 171 | + ]) |
| 172 | + def call_fixture( |
| 173 | + self, request, stream_, offset_, _App0Marker_, _SofMarker_, |
| 174 | + _Marker_): |
| 175 | + marker_code = request.param |
| 176 | + if marker_code == JPEG_MARKER_CODE.APP0: |
| 177 | + marker_cls_ = _App0Marker_ |
| 178 | + elif marker_code in JPEG_MARKER_CODE.SOF_MARKER_CODES: |
| 179 | + marker_cls_ = _SofMarker_ |
| 180 | + else: |
| 181 | + marker_cls_ = _Marker_ |
| 182 | + return marker_code, stream_, offset_, marker_cls_ |
| 183 | + |
| 184 | + @pytest.fixture |
| 185 | + def _App0Marker_(self, request): |
| 186 | + return class_mock(request, 'docx.image.jpeg._App0Marker') |
| 187 | + |
| 188 | + @pytest.fixture |
| 189 | + def _Marker_(self, request): |
| 190 | + return class_mock(request, 'docx.image.jpeg._Marker') |
| 191 | + |
| 192 | + @pytest.fixture |
| 193 | + def offset_(self, request): |
| 194 | + return instance_mock(request, int) |
| 195 | + |
| 196 | + @pytest.fixture |
| 197 | + def _SofMarker_(self, request): |
| 198 | + return class_mock(request, 'docx.image.jpeg._SofMarker') |
| 199 | + |
| 200 | + @pytest.fixture |
| 201 | + def stream_(self, request): |
| 202 | + return instance_mock(request, BytesIO) |
| 203 | + |
| 204 | + |
154 | 205 | class Describe_MarkerFinder(object): |
155 | 206 |
|
156 | 207 | def it_can_construct_from_a_stream(self, from_stream_fixture): |
|
0 commit comments