mirror of
https://github.com/dgelessus/python-rsrcfork.git
synced 2024-11-22 14:32:11 +00:00
Add tests for reading resource files from streams instead of path
This commit is contained in:
parent
5b2700bf17
commit
5391d66a78
@ -1,5 +1,7 @@
|
|||||||
import collections
|
import collections
|
||||||
|
import io
|
||||||
import pathlib
|
import pathlib
|
||||||
|
import typing
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
import rsrcfork
|
import rsrcfork
|
||||||
@ -79,6 +81,18 @@ TESTFILE_RESOURCES = collections.OrderedDict([
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
class UnseekableStreamWrapper(io.BufferedIOBase):
|
||||||
|
_wrapped: typing.BinaryIO
|
||||||
|
|
||||||
|
def __init__(self, wrapped: typing.BinaryIO) -> None:
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self._wrapped = wrapped
|
||||||
|
|
||||||
|
def read(self, size: typing.Optional[int] = -1) -> bytes:
|
||||||
|
return self._wrapped.read(size)
|
||||||
|
|
||||||
|
|
||||||
class ResourceFileReadTests(unittest.TestCase):
|
class ResourceFileReadTests(unittest.TestCase):
|
||||||
def test_empty(self) -> None:
|
def test_empty(self) -> None:
|
||||||
with rsrcfork.open(EMPTY_RSRC_FILE, fork="data") as rf:
|
with rsrcfork.open(EMPTY_RSRC_FILE, fork="data") as rf:
|
||||||
@ -87,8 +101,7 @@ class ResourceFileReadTests(unittest.TestCase):
|
|||||||
self.assertEqual(rf.file_attributes, rsrcfork.ResourceFileAttrs(0))
|
self.assertEqual(rf.file_attributes, rsrcfork.ResourceFileAttrs(0))
|
||||||
self.assertEqual(list(rf), [])
|
self.assertEqual(list(rf), [])
|
||||||
|
|
||||||
def test_textclipping(self) -> None:
|
def internal_test_textclipping(self, rf: rsrcfork.ResourceFile) -> None:
|
||||||
with rsrcfork.open(TEXTCLIPPING_RSRC_FILE, fork="data") as rf:
|
|
||||||
self.assertEqual(rf.header_system_data, bytes(112))
|
self.assertEqual(rf.header_system_data, bytes(112))
|
||||||
self.assertEqual(rf.header_application_data, bytes(128))
|
self.assertEqual(rf.header_application_data, bytes(128))
|
||||||
self.assertEqual(rf.file_attributes, rsrcfork.ResourceFileAttrs(0))
|
self.assertEqual(rf.file_attributes, rsrcfork.ResourceFileAttrs(0))
|
||||||
@ -109,6 +122,21 @@ class ResourceFileReadTests(unittest.TestCase):
|
|||||||
self.assertEqual(actual_res.data, expected_data)
|
self.assertEqual(actual_res.data, expected_data)
|
||||||
self.assertEqual(actual_res.compressed_info, None)
|
self.assertEqual(actual_res.compressed_info, None)
|
||||||
|
|
||||||
|
def test_textclipping_seekable_stream(self) -> None:
|
||||||
|
with TEXTCLIPPING_RSRC_FILE.open("rb") as f:
|
||||||
|
with rsrcfork.ResourceFile(f) as rf:
|
||||||
|
self.internal_test_textclipping(rf)
|
||||||
|
|
||||||
|
def test_textclipping_unseekable_stream(self) -> None:
|
||||||
|
with TEXTCLIPPING_RSRC_FILE.open("rb") as f:
|
||||||
|
with UnseekableStreamWrapper(f) as usf:
|
||||||
|
with rsrcfork.ResourceFile(usf) as rf:
|
||||||
|
self.internal_test_textclipping(rf)
|
||||||
|
|
||||||
|
def test_textclipping_path_data_fork(self) -> None:
|
||||||
|
with rsrcfork.open(TEXTCLIPPING_RSRC_FILE, fork="data") as rf:
|
||||||
|
self.internal_test_textclipping(rf)
|
||||||
|
|
||||||
def test_testfile(self) -> None:
|
def test_testfile(self) -> None:
|
||||||
with rsrcfork.open(TESTFILE_RSRC_FILE, fork="data") as rf:
|
with rsrcfork.open(TESTFILE_RSRC_FILE, fork="data") as rf:
|
||||||
self.assertEqual(rf.header_system_data, TESTFILE_HEADER_SYSTEM_DATA)
|
self.assertEqual(rf.header_system_data, TESTFILE_HEADER_SYSTEM_DATA)
|
||||||
|
Loading…
Reference in New Issue
Block a user