Add tests for reading resource files from streams instead of path

This commit is contained in:
dgelessus 2020-01-21 15:20:46 +01:00
parent 5b2700bf17
commit 5391d66a78

View File

@ -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)