• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1import unittest
2
3from importlib import resources
4from . import data01
5from .resources import util
6
7
8class CommonBinaryTests(util.CommonTests, unittest.TestCase):
9    def execute(self, package, path):
10        target = resources.files(package).joinpath(path)
11        with target.open('rb'):
12            pass
13
14
15class CommonTextTests(util.CommonTests, unittest.TestCase):
16    def execute(self, package, path):
17        target = resources.files(package).joinpath(path)
18        with target.open():
19            pass
20
21
22class OpenTests:
23    def test_open_binary(self):
24        target = resources.files(self.data) / 'binary.file'
25        with target.open('rb') as fp:
26            result = fp.read()
27            self.assertEqual(result, b'\x00\x01\x02\x03')
28
29    def test_open_text_default_encoding(self):
30        target = resources.files(self.data) / 'utf-8.file'
31        with target.open() as fp:
32            result = fp.read()
33            self.assertEqual(result, 'Hello, UTF-8 world!\n')
34
35    def test_open_text_given_encoding(self):
36        target = resources.files(self.data) / 'utf-16.file'
37        with target.open(encoding='utf-16', errors='strict') as fp:
38            result = fp.read()
39        self.assertEqual(result, 'Hello, UTF-16 world!\n')
40
41    def test_open_text_with_errors(self):
42        # Raises UnicodeError without the 'errors' argument.
43        target = resources.files(self.data) / 'utf-16.file'
44        with target.open(encoding='utf-8', errors='strict') as fp:
45            self.assertRaises(UnicodeError, fp.read)
46        with target.open(encoding='utf-8', errors='ignore') as fp:
47            result = fp.read()
48        self.assertEqual(
49            result,
50            'H\x00e\x00l\x00l\x00o\x00,\x00 '
51            '\x00U\x00T\x00F\x00-\x001\x006\x00 '
52            '\x00w\x00o\x00r\x00l\x00d\x00!\x00\n\x00',
53        )
54
55    def test_open_binary_FileNotFoundError(self):
56        target = resources.files(self.data) / 'does-not-exist'
57        self.assertRaises(FileNotFoundError, target.open, 'rb')
58
59    def test_open_text_FileNotFoundError(self):
60        target = resources.files(self.data) / 'does-not-exist'
61        self.assertRaises(FileNotFoundError, target.open)
62
63
64class OpenDiskTests(OpenTests, unittest.TestCase):
65    def setUp(self):
66        self.data = data01
67
68
69class OpenDiskNamespaceTests(OpenTests, unittest.TestCase):
70    def setUp(self):
71        from . import namespacedata01
72
73        self.data = namespacedata01
74
75
76class OpenZipTests(OpenTests, util.ZipSetup, unittest.TestCase):
77    pass
78
79
80if __name__ == '__main__':
81    unittest.main()
82