test_read.py 2.4 KB

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