|
9 | 9 | import pytest |
10 | 10 |
|
11 | 11 | from docx.compat import BytesIO |
12 | | -from docx.image.tiff import Tiff, _TiffParser |
| 12 | +from docx.image.helpers import StreamReader |
| 13 | +from docx.image.tiff import _IfdEntries, Tiff, _TiffParser |
13 | 14 |
|
14 | | -from ..unitutil import class_mock, initializer_mock, instance_mock |
| 15 | +from ..unitutil import ( |
| 16 | + initializer_mock, class_mock, instance_mock, method_mock |
| 17 | +) |
15 | 18 |
|
16 | 19 |
|
17 | 20 | class DescribeTiff(object): |
@@ -68,3 +71,64 @@ def tiff_parser_(self, request): |
68 | 71 | @pytest.fixture |
69 | 72 | def stream_(self, request): |
70 | 73 | return instance_mock(request, BytesIO) |
| 74 | + |
| 75 | + |
| 76 | +class Describe_TiffParser(object): |
| 77 | + |
| 78 | + def it_can_parse_the_properties_from_a_tiff_stream( |
| 79 | + self, from_stream_fixture): |
| 80 | + (stream_, _make_stream_reader_, _IfdEntries_, ifd0_offset_, |
| 81 | + stream_rdr_, _TiffParser__init_, ifd_entries_) = from_stream_fixture |
| 82 | + tiff_parser = _TiffParser.parse(stream_) |
| 83 | + _make_stream_reader_.assert_called_once_with(stream_) |
| 84 | + _IfdEntries_.from_stream.assert_called_once_with( |
| 85 | + stream_rdr_, ifd0_offset_ |
| 86 | + ) |
| 87 | + _TiffParser__init_.assert_called_once_with(ifd_entries_) |
| 88 | + assert isinstance(tiff_parser, _TiffParser) |
| 89 | + |
| 90 | + # fixtures ------------------------------------------------------- |
| 91 | + |
| 92 | + @pytest.fixture |
| 93 | + def from_stream_fixture( |
| 94 | + self, stream_, _make_stream_reader_, _IfdEntries_, ifd0_offset_, |
| 95 | + stream_rdr_, _TiffParser__init_, ifd_entries_): |
| 96 | + return ( |
| 97 | + stream_, _make_stream_reader_, _IfdEntries_, ifd0_offset_, |
| 98 | + stream_rdr_, _TiffParser__init_, ifd_entries_ |
| 99 | + ) |
| 100 | + |
| 101 | + @pytest.fixture |
| 102 | + def _IfdEntries_(self, request, ifd_entries_): |
| 103 | + _IfdEntries_ = class_mock(request, 'docx.image.tiff._IfdEntries') |
| 104 | + _IfdEntries_.from_stream.return_value = ifd_entries_ |
| 105 | + return _IfdEntries_ |
| 106 | + |
| 107 | + @pytest.fixture |
| 108 | + def ifd_entries_(self, request): |
| 109 | + return instance_mock(request, _IfdEntries) |
| 110 | + |
| 111 | + @pytest.fixture |
| 112 | + def ifd0_offset_(self, request): |
| 113 | + return instance_mock(request, int) |
| 114 | + |
| 115 | + @pytest.fixture |
| 116 | + def _make_stream_reader_(self, request, stream_rdr_): |
| 117 | + return method_mock( |
| 118 | + request, _TiffParser, '_make_stream_reader', |
| 119 | + return_value=stream_rdr_ |
| 120 | + ) |
| 121 | + |
| 122 | + @pytest.fixture |
| 123 | + def stream_(self, request): |
| 124 | + return instance_mock(request, BytesIO) |
| 125 | + |
| 126 | + @pytest.fixture |
| 127 | + def stream_rdr_(self, request, ifd0_offset_): |
| 128 | + stream_rdr_ = instance_mock(request, StreamReader) |
| 129 | + stream_rdr_.read_long.return_value = ifd0_offset_ |
| 130 | + return stream_rdr_ |
| 131 | + |
| 132 | + @pytest.fixture |
| 133 | + def _TiffParser__init_(self, request): |
| 134 | + return initializer_mock(request, _TiffParser) |
0 commit comments