1import unittest 2 3from importlib import import_module, resources 4from . import data01 5from .resources import util 6 7 8class CommonBinaryTests(util.CommonTests, unittest.TestCase): 9 def execute(self, package, path): 10 resources.files(package).joinpath(path).read_bytes() 11 12 13class CommonTextTests(util.CommonTests, unittest.TestCase): 14 def execute(self, package, path): 15 resources.files(package).joinpath(path).read_text() 16 17 18class ReadTests: 19 def test_read_bytes(self): 20 result = resources.files(self.data).joinpath('binary.file').read_bytes() 21 self.assertEqual(result, b'\0\1\2\3') 22 23 def test_read_text_default_encoding(self): 24 result = resources.files(self.data).joinpath('utf-8.file').read_text() 25 self.assertEqual(result, 'Hello, UTF-8 world!\n') 26 27 def test_read_text_given_encoding(self): 28 result = ( 29 resources.files(self.data) 30 .joinpath('utf-16.file') 31 .read_text(encoding='utf-16') 32 ) 33 self.assertEqual(result, 'Hello, UTF-16 world!\n') 34 35 def test_read_text_with_errors(self): 36 # Raises UnicodeError without the 'errors' argument. 37 target = resources.files(self.data) / 'utf-16.file' 38 self.assertRaises(UnicodeError, target.read_text, encoding='utf-8') 39 result = target.read_text(encoding='utf-8', errors='ignore') 40 self.assertEqual( 41 result, 42 'H\x00e\x00l\x00l\x00o\x00,\x00 ' 43 '\x00U\x00T\x00F\x00-\x001\x006\x00 ' 44 '\x00w\x00o\x00r\x00l\x00d\x00!\x00\n\x00', 45 ) 46 47 48class ReadDiskTests(ReadTests, unittest.TestCase): 49 data = data01 50 51 52class ReadZipTests(ReadTests, util.ZipSetup, unittest.TestCase): 53 def test_read_submodule_resource(self): 54 submodule = import_module('ziptestdata.subdirectory') 55 result = resources.files(submodule).joinpath('binary.file').read_bytes() 56 self.assertEqual(result, b'\0\1\2\3') 57 58 def test_read_submodule_resource_by_name(self): 59 result = ( 60 resources.files('ziptestdata.subdirectory') 61 .joinpath('binary.file') 62 .read_bytes() 63 ) 64 self.assertEqual(result, b'\0\1\2\3') 65 66 67class ReadNamespaceTests(ReadTests, unittest.TestCase): 68 def setUp(self): 69 from . import namespacedata01 70 71 self.data = namespacedata01 72 73 74if __name__ == '__main__': 75 unittest.main() 76