codekingpro/portable-devtools
115k
1import os.path2import pathlib3import unittest4from importlib import import_module5 6from importlib_resources.readers import MultiplexedPath, NamespaceReader7 8from . import util9 10 11class MultiplexedPathTest(util.DiskSetup, unittest.TestCase):12 MODULE = 'namespacedata01'13 14 def setUp(self):15 super().setUp()16 self.folder = pathlib.Path(self.data.__path__[0])17 self.data01 = pathlib.Path(self.load_fixture('data01').__file__).parent18 self.data02 = pathlib.Path(self.load_fixture('data02').__file__).parent19 20 def test_init_no_paths(self):21 with self.assertRaises(FileNotFoundError):22 MultiplexedPath()23 24 def test_init_file(self):25 with self.assertRaises(NotADirectoryError):26 MultiplexedPath(self.folder / 'binary.file')27 28 def test_iterdir(self):29 contents = {path.name for path in MultiplexedPath(self.folder).iterdir()}30 try:31 contents.remove('__pycache__')32 except (KeyError, ValueError):33 pass34 assert contents == {'subdirectory', 'binary.file', 'utf-16.file', 'utf-8.file'}35 36 def test_iterdir_duplicate(self):37 contents = {38 path.name for path in MultiplexedPath(self.folder, self.data01).iterdir()39 }40 for remove in ('__pycache__', '__init__.pyc'):41 try:42 contents.remove(remove)43 except (KeyError, ValueError):44 pass45 assert contents == {46 '__init__.py',47 'binary.file',48 'subdirectory',49 'utf-16.file',50 'utf-8.file',51 }52 53 def test_is_dir(self):54 assert MultiplexedPath(self.folder).is_dir()55 56 def test_is_file(self):57 assert not MultiplexedPath(self.folder).is_file()58 59 def test_open_file(self):60 path = MultiplexedPath(self.folder)61 with self.assertRaises(FileNotFoundError):62 path.read_bytes()63 with self.assertRaises(FileNotFoundError):64 path.read_text()65 with self.assertRaises(FileNotFoundError):66 path.open()67 68 def test_join_path(self):69 prefix = str(self.folder.parent)70 path = MultiplexedPath(self.folder, self.data01)71 assert str(path.joinpath('binary.file'))[len(prefix) + 1 :] == os.path.join(72 'namespacedata01', 'binary.file'73 )74 sub = path.joinpath('subdirectory')75 assert isinstance(sub, MultiplexedPath)76 assert 'namespacedata01' in str(sub)77 assert 'data01' in str(sub)78 assert str(path.joinpath('imaginary'))[len(prefix) + 1 :] == os.path.join(79 'namespacedata01', 'imaginary'80 )81 assert path.joinpath() == path82 83 def test_join_path_compound(self):84 path = MultiplexedPath(self.folder)85 assert not path.joinpath('imaginary/foo.py').exists()86 87 def test_join_path_common_subdir(self):88 prefix = str(self.data02.parent)89 path = MultiplexedPath(self.data01, self.data02)90 assert isinstance(path.joinpath('subdirectory'), MultiplexedPath)91 assert str(path.joinpath('subdirectory', 'subsubdir'))[len(prefix) + 1 :] == (92 os.path.join('data02', 'subdirectory', 'subsubdir')93 )94 95 def test_repr(self):96 assert repr(MultiplexedPath(self.folder)) == f"MultiplexedPath('{self.folder}')"97 98 def test_name(self):99 assert MultiplexedPath(self.folder).name == os.path.basename(self.folder)100 101 102class NamespaceReaderTest(util.DiskSetup, unittest.TestCase):103 MODULE = 'namespacedata01'104 105 def test_init_error(self):106 with self.assertRaises(ValueError):107 NamespaceReader(['path1', 'path2'])108 109 def test_resource_path(self):110 namespacedata01 = import_module('namespacedata01')111 reader = NamespaceReader(namespacedata01.__spec__.submodule_search_locations)112 113 root = self.data.__path__[0]114 assert reader.resource_path('binary.file') == os.path.join(root, 'binary.file')115 assert reader.resource_path('imaginary') == os.path.join(root, 'imaginary')116 117 def test_files(self):118 reader = NamespaceReader(self.data.__spec__.submodule_search_locations)119 root = self.data.__path__[0]120 assert isinstance(reader.files(), MultiplexedPath)121 assert repr(reader.files()) == f"MultiplexedPath('{root}')"122 123 124if __name__ == '__main__':125 unittest.main()126 