| #! /usr/bin/env python |
| # -*- coding: utf-8 -*- |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| """ |
| Unittests for fake_pathlib. |
| As most of fake_pathlib is a wrapper around fake_filesystem methods, the tests |
| are there mostly to ensure basic functionality. |
| Note that many of the tests are directly taken from examples in the python docs. |
| """ |
| |
| import os |
| import stat |
| import unittest |
| |
| import sys |
| |
| from pyfakefs import fake_filesystem |
| from pyfakefs import fake_pathlib |
| |
| is_windows = sys.platform == 'win32' |
| |
| |
| class FakePathlibInitializationTest(unittest.TestCase): |
| def setUp(self): |
| filesystem = fake_filesystem.FakeFilesystem(path_separator='/') |
| filesystem.is_windows_fs = False |
| self.pathlib = fake_pathlib.FakePathlibModule(filesystem) |
| self.path = self.pathlib.Path |
| |
| def test_initialization_type(self): |
| """Make sure tests for class type will work""" |
| path = self.path('/test') |
| if is_windows: |
| self.assertTrue(isinstance(path, self.pathlib.WindowsPath)) |
| self.assertTrue(isinstance(path, self.pathlib.PureWindowsPath)) |
| self.assertTrue(self.pathlib.PurePosixPath()) |
| self.assertRaises(NotImplementedError, self.pathlib.PosixPath) |
| else: |
| self.assertTrue(isinstance(path, self.pathlib.PosixPath)) |
| self.assertTrue(isinstance(path, self.pathlib.PurePosixPath)) |
| self.assertTrue(self.pathlib.PureWindowsPath()) |
| self.assertRaises(NotImplementedError, self.pathlib.WindowsPath) |
| |
| def test_init_with_segments(self): |
| """Basic initialization tests - taken from pathlib.Path documentation""" |
| self.assertEqual(self.path('/', 'foo', 'bar', 'baz'), |
| self.path('/foo/bar/baz')) |
| self.assertEqual(self.path(), self.path('.')) |
| self.assertEqual(self.path(self.path('foo'), self.path('bar')), |
| self.path('foo/bar')) |
| self.assertEqual(self.path('/etc') / 'init.d' / 'reboot', |
| self.path('/etc/init.d/reboot')) |
| |
| def test_init_collapse(self): |
| """Tests for collapsing path during initialization. |
| Taken from pathlib.PurePath documentation. |
| """ |
| self.assertEqual(self.path('foo//bar'), self.path('foo/bar')) |
| self.assertEqual(self.path('foo/./bar'), self.path('foo/bar')) |
| self.assertNotEqual(self.path('foo/../bar'), self.path('foo/bar')) |
| self.assertEqual(self.path('/etc', '/usr', 'lib64'), self.path('/usr/lib64')) |
| |
| def test_path_parts(self): |
| path = self.path('/foo/bar/setup.py') |
| self.assertEqual(path.parts, ('/', 'foo', 'bar', 'setup.py')) |
| self.assertEqual(path.drive, '') |
| self.assertEqual(path.root, '/') |
| self.assertEqual(path.anchor, '/') |
| self.assertEqual(path.name, 'setup.py') |
| self.assertEqual(path.stem, 'setup') |
| self.assertEqual(path.suffix, '.py') |
| self.assertEqual(path.parent, self.path('/foo/bar')) |
| self.assertEqual(path.parents[0], self.path('/foo/bar')) |
| self.assertEqual(path.parents[1], self.path('/foo')) |
| self.assertEqual(path.parents[2], self.path('/')) |
| |
| def test_is_absolute(self): |
| self.assertTrue(self.path('/a/b').is_absolute()) |
| self.assertFalse(self.path('a/b').is_absolute()) |
| |
| |
| class FakePathlibInitializationWithDriveTest(unittest.TestCase): |
| def setUp(self): |
| filesystem = fake_filesystem.FakeFilesystem(path_separator='/') |
| filesystem.is_windows_fs = True |
| pathlib = fake_pathlib.FakePathlibModule(filesystem) |
| self.path = pathlib.Path |
| |
| def test_init_with_segments(self): |
| """Basic initialization tests - taken from pathlib.Path documentation""" |
| self.assertEqual(self.path('c:/', 'foo', 'bar', 'baz'), self.path('c:/foo/bar/baz')) |
| self.assertEqual(self.path(), self.path('.')) |
| self.assertEqual(self.path(self.path('foo'), self.path('bar')), self.path('foo/bar')) |
| self.assertEqual(self.path('c:/Users') / 'john' / 'data', self.path('c:/Users/john/data')) |
| |
| def test_init_collapse(self): |
| """Tests for collapsing path during initialization. |
| Taken from pathlib.PurePath documentation. |
| """ |
| self.assertEqual(self.path('c:/Windows', 'd:bar'), self.path('d:bar')) |
| self.assertEqual(self.path('c:/Windows', '/Program Files'), self.path('c:/Program Files')) |
| |
| def test_path_parts(self): |
| path = self.path('d:/python scripts/setup.py') |
| self.assertEqual(path.parts, ('d:/', 'python scripts', 'setup.py')) |
| self.assertEqual(path.drive, 'd:') |
| self.assertEqual(path.root, '/') |
| self.assertEqual(path.anchor, 'd:/') |
| self.assertEqual(path.name, 'setup.py') |
| self.assertEqual(path.stem, 'setup') |
| self.assertEqual(path.suffix, '.py') |
| self.assertEqual(path.parent, self.path('d:/python scripts')) |
| self.assertEqual(path.parents[0], self.path('d:/python scripts')) |
| self.assertEqual(path.parents[1], self.path('d:/')) |
| |
| def test_is_absolute(self): |
| self.assertTrue(self.path('c:/a/b').is_absolute()) |
| self.assertFalse(self.path('/a/b').is_absolute()) |
| self.assertFalse(self.path('c:').is_absolute()) |
| self.assertTrue(self.path('//some/share').is_absolute()) |
| |
| |
| class FakePathlibPurePathTest(unittest.TestCase): |
| """Tests functionality present in PurePath class.""" |
| |
| def setUp(self): |
| filesystem = fake_filesystem.FakeFilesystem(path_separator='/') |
| filesystem.is_windows_fs = True |
| pathlib = fake_pathlib.FakePathlibModule(filesystem) |
| self.path = pathlib.Path |
| |
| def test_is_reserved(self): |
| self.assertFalse(self.path('/dev').is_reserved()) |
| self.assertFalse(self.path('/').is_reserved()) |
| if is_windows: |
| self.assertTrue(self.path('COM1').is_reserved()) |
| self.assertTrue(self.path('nul.txt').is_reserved()) |
| else: |
| self.assertFalse(self.path('COM1').is_reserved()) |
| self.assertFalse(self.path('nul.txt').is_reserved()) |
| |
| def test_joinpath(self): |
| self.assertEqual(self.path('/etc').joinpath('passwd'), |
| self.path('/etc/passwd')) |
| self.assertEqual(self.path('/etc').joinpath(self.path('passwd')), |
| self.path('/etc/passwd')) |
| self.assertEqual(self.path('/foo').joinpath('bar', 'baz'), |
| self.path('/foo/bar/baz')) |
| self.assertEqual(self.path('c:').joinpath('/Program Files'), |
| self.path('c:/Program Files')) |
| |
| def test_match(self): |
| self.assertTrue(self.path('a/b.py').match('*.py')) |
| self.assertTrue(self.path('/a/b/c.py').match('b/*.py')) |
| self.assertFalse(self.path('/a/b/c.py').match('a/*.py')) |
| self.assertTrue(self.path('/a.py').match('/*.py')) |
| self.assertFalse(self.path('a/b.py').match('/*.py')) |
| |
| def test_relative_to(self): |
| self.assertEqual(self.path('/etc/passwd').relative_to('/'), self.path('etc/passwd')) |
| self.assertEqual(self.path('/etc/passwd').relative_to('/'), self.path('etc/passwd')) |
| self.assertRaises(ValueError, self.path('passwd').relative_to, '/usr') |
| |
| def test_with_name(self): |
| self.assertEqual(self.path('c:/Downloads/pathlib.tar.gz').with_name('setup.py'), |
| self.path('c:/Downloads/setup.py')) |
| self.assertRaises(ValueError, self.path('c:/').with_name, 'setup.py') |
| |
| def test_with_suffix(self): |
| self.assertEqual(self.path('c:/Downloads/pathlib.tar.gz').with_suffix('.bz2'), |
| self.path('c:/Downloads/pathlib.tar.bz2')) |
| self.assertEqual(self.path('README').with_suffix('.txt'), |
| self.path('README.txt')) |
| |
| |
| class FakePathlibFileObjectPropertyTest(unittest.TestCase): |
| def setUp(self): |
| self.filesystem = fake_filesystem.FakeFilesystem(path_separator='/') |
| self.filesystem.is_windows_fs = False |
| pathlib = fake_pathlib.FakePathlibModule(self.filesystem) |
| self.path = pathlib.Path |
| self.filesystem.CreateFile('/home/jane/test.py', st_size=100, st_mode=stat.S_IFREG | 0o666) |
| self.filesystem.CreateDirectory('/home/john') |
| self.filesystem.CreateLink('/john', '/home/john') |
| self.filesystem.CreateLink('/test.py', '/home/jane/test.py') |
| self.filesystem.CreateLink('/broken_dir_link', '/home/none') |
| self.filesystem.CreateLink('/broken_file_link', '/home/none/test.py') |
| |
| def test_exists(self): |
| self.assertTrue(self.path('/home/jane/test.py').exists()) |
| self.assertTrue(self.path('/home/jane').exists()) |
| self.assertFalse(self.path('/home/jane/test').exists()) |
| self.assertTrue(self.path('/john').exists()) |
| self.assertTrue(self.path('/test.py').exists()) |
| self.assertFalse(self.path('/broken_dir_link').exists()) |
| self.assertFalse(self.path('/broken_file_link').exists()) |
| |
| def test_is_dir(self): |
| self.assertFalse(self.path('/home/jane/test.py').is_dir()) |
| self.assertTrue(self.path('/home/jane').is_dir()) |
| self.assertTrue(self.path('/john').is_dir()) |
| self.assertFalse(self.path('/test.py').is_dir()) |
| self.assertFalse(self.path('/broken_dir_link').is_dir()) |
| self.assertFalse(self.path('/broken_file_link').is_dir()) |
| |
| def test_is_file(self): |
| self.assertTrue(self.path('/home/jane/test.py').is_file()) |
| self.assertFalse(self.path('/home/jane').is_file()) |
| self.assertFalse(self.path('/john').is_file()) |
| self.assertTrue(self.path('/test.py').is_file()) |
| self.assertFalse(self.path('/broken_dir_link').is_file()) |
| self.assertFalse(self.path('/broken_file_link').is_file()) |
| |
| def test_is_symlink(self): |
| self.assertFalse(self.path('/home/jane/test.py').is_symlink()) |
| self.assertFalse(self.path('/home/jane').is_symlink()) |
| self.assertTrue(self.path('/john').is_symlink()) |
| self.assertTrue(self.path('/test.py').is_symlink()) |
| self.assertTrue(self.path('/broken_dir_link').is_symlink()) |
| self.assertTrue(self.path('/broken_file_link').is_symlink()) |
| |
| def test_stat(self): |
| file_object = self.filesystem.ResolveObject('/home/jane/test.py') |
| |
| stat_result = self.path('/test.py').stat() |
| self.assertFalse(stat_result.st_mode & stat.S_IFDIR) |
| self.assertTrue(stat_result.st_mode & stat.S_IFREG) |
| self.assertEqual(stat_result.st_ino, file_object.st_ino) |
| self.assertEqual(stat_result.st_size, 100) |
| self.assertEqual(stat_result.st_mtime, file_object.st_mtime) |
| self.assertEqual(stat_result[stat.ST_MTIME], int(file_object.st_mtime)) |
| |
| def test_lstat(self): |
| link_object = self.filesystem.LResolveObject('/test.py') |
| |
| stat_result = self.path('/test.py').lstat() |
| self.assertTrue(stat_result.st_mode & stat.S_IFREG) |
| self.assertTrue(stat_result.st_mode & stat.S_IFLNK) |
| self.assertEqual(stat_result.st_ino, link_object.st_ino) |
| self.assertEqual(stat_result.st_size, len('/home/jane/test.py')) |
| self.assertEqual(stat_result.st_mtime, link_object.st_mtime) |
| |
| def test_chmod(self): |
| file_object = self.filesystem.ResolveObject('/home/jane/test.py') |
| link_object = self.filesystem.LResolveObject('/test.py') |
| self.path('/test.py').chmod(0o444) |
| self.assertEqual(file_object.st_mode, stat.S_IFREG | 0o444) |
| self.assertEqual(link_object.st_mode, stat.S_IFLNK | 0o777) |
| |
| def test_lchmod(self): |
| file_object = self.filesystem.ResolveObject('/home/jane/test.py') |
| link_object = self.filesystem.LResolveObject('/test.py') |
| if not hasattr(os, "lchmod"): |
| self.assertRaises(NotImplementedError, self.path('/test.py').lchmod, 0o444) |
| else: |
| self.path('/test.py').lchmod(0o444) |
| self.assertEqual(file_object.st_mode, stat.S_IFREG | 0o666) |
| self.assertEqual(link_object.st_mode, stat.S_IFLNK | 0o444) |
| |
| def test_resolve(self): |
| self.filesystem.cwd = '/home/antoine' |
| self.filesystem.CreateDirectory('/home/antoine/docs') |
| self.filesystem.CreateFile('/home/antoine/setup.py') |
| self.assertEqual(self.path().resolve(), |
| self.path('/home/antoine')) |
| self.assertEqual(self.path('docs/../setup.py').resolve(), |
| self.path('/home/antoine/setup.py')) |
| |
| @unittest.skipIf(sys.version_info >= (3, 6), 'Changed behavior in Python 3.6') |
| def test_resolve_nonexisting_file(self): |
| path = self.path('/foo/bar') |
| self.assertRaises(FileNotFoundError, path.resolve) |
| |
| @unittest.skipIf(sys.version_info >= (3, 6), 'Changed behavior in Python 3.6') |
| def test_resolve_file_as_parent_windows(self): |
| self.filesystem.is_windows_fs = True |
| self.filesystem.CreateFile('/a_file') |
| path = self.path('/a_file/this can not exist') |
| self.assertRaises(FileNotFoundError, path.resolve) |
| |
| @unittest.skipIf(sys.version_info >= (3, 6), 'Changed behavior in Python 3.6') |
| def test_resolve_file_as_parent_posix(self): |
| self.filesystem.is_windows_fs = False |
| self.filesystem.CreateFile('/a_file') |
| path = self.path('/a_file/this can not exist') |
| self.assertRaises(NotADirectoryError, path.resolve) |
| |
| @unittest.skipIf(sys.version_info < (3, 6), 'Changed behavior in Python 3.6') |
| def test_resolve_nonexisting_file(self): |
| path = self.path('/path/to/file/this can not exist') |
| self.assertTrue(path, path.resolve()) |
| self.assertRaises(FileNotFoundError, path.resolve, strict=True) |
| |
| def test_cwd(self): |
| self.filesystem.cwd = '/home/jane' |
| self.assertEqual(self.path.cwd(), self.path('/home/jane')) |
| |
| @unittest.skipIf(sys.version_info < (3, 5), 'New in version 3.5') |
| def test_expanduser(self): |
| if is_windows: |
| self.assertEqual(self.path('~').expanduser(), |
| self.path(os.environ['USERPROFILE'].replace('\\', '/'))) |
| else: |
| self.assertEqual(self.path('~').expanduser(), |
| self.path(os.environ['HOME'])) |
| |
| @unittest.skipIf(sys.version_info < (3, 5), 'New in version 3.5') |
| def test_home(self): |
| if is_windows: |
| self.assertEqual(self.path.home(), |
| self.path(os.environ['USERPROFILE'].replace('\\', '/'))) |
| else: |
| self.assertEqual(self.path.home(), |
| self.path(os.environ['HOME'])) |
| |
| |
| class FakePathlibPathFileOperationTest(unittest.TestCase): |
| """Tests methods related to file and directory handling.""" |
| |
| def setUp(self): |
| self.filesystem = fake_filesystem.FakeFilesystem(path_separator='!') |
| # self.filesystem.is_windows_fs = False |
| self.filesystem.is_case_sensitive = True |
| pathlib = fake_pathlib.FakePathlibModule(self.filesystem) |
| self.path = pathlib.Path |
| |
| def test_exists(self): |
| self.filesystem.CreateFile('!home!jane!test.py') |
| self.filesystem.CreateDirectory('!home!john') |
| self.filesystem.CreateLink('!john', '!home!john') |
| self.filesystem.CreateLink('!none', '!home!none') |
| |
| self.assertTrue(self.path('!home!jane!test.py').exists()) |
| self.assertTrue(self.path('!home!jane').exists()) |
| self.assertTrue(self.path('!john').exists()) |
| self.assertFalse(self.path('!none').exists()) |
| self.assertFalse(self.path('!home!jane!test').exists()) |
| |
| def test_open(self): |
| self.filesystem.CreateDirectory('!foo') |
| self.assertRaises(OSError, self.path('!foo!bar.txt').open) |
| self.path('!foo!bar.txt').open('w') |
| self.assertTrue(self.filesystem.Exists('!foo!bar.txt')) |
| |
| @unittest.skipIf(sys.version_info < (3, 5), 'New in version 3.5') |
| def test_read_text(self): |
| self.filesystem.CreateFile('text_file', contents='ерунда', encoding='cyrillic') |
| file_path = self.path('text_file') |
| self.assertEqual(file_path.read_text(encoding='cyrillic'), 'ерунда') |
| |
| @unittest.skipIf(sys.version_info < (3, 5), 'New in version 3.5') |
| def test_write_text(self): |
| file_path = self.path('text_file') |
| file_path.write_text('ανοησίες', encoding='greek') |
| self.assertTrue(self.filesystem.Exists('text_file')) |
| file_object = self.filesystem.ResolveObject('text_file') |
| self.assertEqual(file_object.byte_contents.decode('greek'), 'ανοησίες') |
| |
| @unittest.skipIf(sys.version_info < (3, 5), 'New in version 3.5') |
| def test_read_bytes(self): |
| self.filesystem.CreateFile('binary_file', contents=b'Binary file contents') |
| file_path = self.path('binary_file') |
| self.assertEqual(file_path.read_bytes(), b'Binary file contents') |
| |
| @unittest.skipIf(sys.version_info < (3, 5), 'New in version 3.5') |
| def test_write_bytes(self): |
| file_path = self.path('binary_file') |
| file_path.write_bytes(b'Binary file contents') |
| self.assertTrue(self.filesystem.Exists('binary_file')) |
| file_object = self.filesystem.ResolveObject('binary_file') |
| self.assertEqual(file_object.byte_contents, b'Binary file contents') |
| |
| def test_rename(self): |
| self.filesystem.CreateFile('!foo!bar.txt', contents='test') |
| self.path('!foo!bar.txt').rename('foo!baz.txt') |
| self.assertFalse(self.filesystem.Exists('!foo!bar.txt')) |
| file_obj = self.filesystem.ResolveObject('foo!baz.txt') |
| self.assertTrue(file_obj) |
| self.assertEqual(file_obj.contents, 'test') |
| |
| def test_replace(self): |
| self.filesystem.CreateFile('!foo!bar.txt', contents='test') |
| self.filesystem.CreateFile('!bar!old.txt', contents='replaced') |
| self.path('!bar!old.txt').replace('foo!bar.txt') |
| self.assertFalse(self.filesystem.Exists('!bar!old.txt')) |
| file_obj = self.filesystem.ResolveObject('foo!bar.txt') |
| self.assertTrue(file_obj) |
| self.assertEqual(file_obj.contents, 'replaced') |
| |
| def test_unlink(self): |
| self.filesystem.CreateFile('!foo!bar.txt', contents='test') |
| self.assertTrue(self.filesystem.Exists('!foo!bar.txt')) |
| self.path('!foo!bar.txt').unlink() |
| self.assertFalse(self.filesystem.Exists('!foo!bar.txt')) |
| |
| def test_touch_non_existing(self): |
| self.filesystem.CreateDirectory('!foo') |
| self.path('!foo!bar.txt').touch(mode=0o444) |
| file_obj = self.filesystem.ResolveObject('!foo!bar.txt') |
| self.assertTrue(file_obj) |
| self.assertEqual(file_obj.contents, '') |
| self.assertTrue(file_obj.st_mode, stat.S_IFREG | 0o444) |
| |
| def test_touch_existing(self): |
| self.filesystem.CreateFile('!foo!bar.txt', contents='test') |
| file_path = self.path('!foo!bar.txt') |
| self.assertRaises(FileExistsError, file_path.touch, exist_ok=False) |
| file_path.touch() |
| file_obj = self.filesystem.ResolveObject('!foo!bar.txt') |
| self.assertTrue(file_obj) |
| self.assertEqual(file_obj.contents, 'test') |
| |
| @unittest.skipIf(sys.version_info < (3, 5), 'New in version 3.5') |
| def test_samefile(self): |
| self.filesystem.CreateFile('!foo!bar.txt') |
| self.filesystem.CreateFile('!foo!baz.txt') |
| self.assertRaises(OSError, self.path('!foo!other').samefile, '!foo!other.txt') |
| path = self.path('!foo!bar.txt') |
| self.assertRaises(OSError, path.samefile, '!foo!other.txt') |
| self.assertRaises(OSError, path.samefile, self.path('!foo!other.txt')) |
| self.assertFalse(path.samefile('!foo!baz.txt')) |
| self.assertFalse(path.samefile(self.path('!foo!baz.txt'))) |
| self.assertTrue(path.samefile('!foo!..!foo!bar.txt')) |
| self.assertTrue(path.samefile(self.path('!foo!..!foo!bar.txt'))) |
| |
| def test_symlink_to(self): |
| self.filesystem.CreateFile('!foo!bar.txt') |
| path = self.path('!link_to_bar') |
| path.symlink_to('!foo!bar.txt') |
| self.assertTrue(self.filesystem.Exists('!link_to_bar')) |
| file_obj = self.filesystem.ResolveObject('!foo!bar.txt') |
| linked_file_obj = self.filesystem.ResolveObject('!link_to_bar') |
| self.assertEqual(file_obj, linked_file_obj) |
| link__obj = self.filesystem.LResolveObject('!link_to_bar') |
| self.assertTrue(path.is_symlink()) |
| |
| def test_mkdir(self): |
| self.assertRaises(FileNotFoundError, self.path('!foo!bar').mkdir) |
| self.path('!foo!bar').mkdir(parents=True) |
| self.assertTrue(self.filesystem.Exists('!foo!bar')) |
| self.assertRaises(FileExistsError, self.path('!foo!bar').mkdir) |
| |
| @unittest.skipIf(sys.version_info < (3, 5), 'exist_ok argument new in Python 3.5') |
| def test_mkdir_exist_ok(self): |
| self.filesystem.CreateDirectory('!foo!bar') |
| self.path('foo!bar').mkdir(exist_ok=True) |
| self.filesystem.CreateFile('!foo!bar!baz') |
| self.assertRaises(FileExistsError, self.path('!foo!bar!baz').mkdir, exist_ok=True) |
| |
| def test_rmdir(self): |
| self.filesystem.CreateDirectory('!foo!bar') |
| self.path('!foo!bar').rmdir() |
| self.assertFalse(self.filesystem.Exists('!foo!bar')) |
| self.assertTrue(self.filesystem.Exists('!foo')) |
| self.filesystem.CreateFile('!foo!baz') |
| self.assertRaises(OSError, self.path('!foo').rmdir) |
| self.assertTrue(self.filesystem.Exists('!foo')) |
| |
| def test_iterdir(self): |
| self.filesystem.CreateFile('!foo!bar!file1') |
| self.filesystem.CreateFile('!foo!bar!file2') |
| self.filesystem.CreateFile('!foo!bar!file3') |
| path = self.path('!foo!bar') |
| contents = [entry for entry in path.iterdir()] |
| self.assertEqual(3, len(contents)) |
| self.assertIn(self.path('!foo!bar!file2'), contents) |
| |
| def test_glob(self): |
| self.filesystem.CreateFile('!foo!setup.py') |
| self.filesystem.CreateFile('!foo!all_tests.py') |
| self.filesystem.CreateFile('!foo!README.md') |
| self.filesystem.CreateFile('!foo!setup.pyc') |
| path = self.path('!foo') |
| self.assertEqual(sorted(path.glob('*.py')), |
| [self.path('!foo!all_tests.py'), self.path('!foo!setup.py')]) |
| |
| def test_glob_case_windows(self): |
| self.filesystem.is_windows_fs = True |
| self.filesystem.CreateFile('!foo!setup.py') |
| self.filesystem.CreateFile('!foo!all_tests.PY') |
| self.filesystem.CreateFile('!foo!README.md') |
| self.filesystem.CreateFile('!foo!example.Py') |
| path = self.path('!foo') |
| self.assertEqual(sorted(path.glob('*.py')), |
| [self.path('!foo!all_tests.PY'), self.path('!foo!example.Py'), self.path('!foo!setup.py')]) |
| |
| def test_glob_case_posix(self): |
| self.filesystem.is_windows_fs = False |
| self.filesystem.CreateFile('!foo!setup.py') |
| self.filesystem.CreateFile('!foo!all_tests.PY') |
| self.filesystem.CreateFile('!foo!README.md') |
| self.filesystem.CreateFile('!foo!example.Py') |
| path = self.path('!foo') |
| self.assertEqual(sorted(path.glob('*.py')), [self.path('!foo!setup.py')]) |
| |
| @unittest.skipIf(sys.version_info < (3, 6), 'path-like objects new in Python 3.6') |
| class FakePathlibUsageInOsFunctionsTest(unittest.TestCase): |
| """Test that many os / os.path functions accept a path-like object since Python 3.6. |
| The functionality of these functions is testd elsewhere, we just check that they |
| accept a fake path object as an argument. |
| """ |
| |
| def setUp(self): |
| self.filesystem = fake_filesystem.FakeFilesystem(path_separator='!') |
| self.pathlib = fake_pathlib.FakePathlibModule(self.filesystem) |
| self.path = self.pathlib.Path |
| self.os = fake_filesystem.FakeOsModule(self.filesystem) |
| |
| def test_join(self): |
| dir1 = 'foo' |
| dir2 = 'bar' |
| dir = self.os.path.join(dir1, dir2) |
| self.assertEqual(dir, self.os.path.join(self.path(dir1), dir2)) |
| self.assertEqual(dir, self.os.path.join(dir1, self.path(dir2))) |
| self.assertEqual(dir, self.os.path.join(self.path(dir1), self.path(dir2))) |
| |
| def test_normcase(self): |
| dir1 = '!Foo!Bar!Baz' |
| self.assertEqual(self.os.path.normcase(dir1), self.os.path.normcase(self.path(dir1))) |
| |
| def test_normpath(self): |
| dir1 = '!foo!bar!..!baz' |
| self.assertEqual(self.os.path.normpath(dir1), self.os.path.normpath(self.path(dir1))) |
| |
| def test_realpath(self): |
| dir1 = '!foo!bar!..!baz' |
| self.assertEqual(self.os.path.realpath(dir1), self.os.path.realpath(self.path(dir1))) |
| |
| def test_relpath(self): |
| path_foo = '!path!to!foo' |
| path_bar = '!path!to!bar' |
| rel_path = self.os.path.relpath(path_foo, path_bar) |
| self.assertEqual(rel_path, self.os.path.relpath(self.path(path_foo), path_bar)) |
| self.assertEqual(rel_path, self.os.path.relpath(path_foo, self.path(path_bar))) |
| self.assertEqual(rel_path, self.os.path.relpath(self.path(path_foo), self.path(path_bar))) |
| |
| def test_split(self): |
| dir1 = '!Foo!Bar!Baz' |
| self.assertEqual(self.os.path.split(dir1), self.os.path.split(self.path(dir1))) |
| |
| def test_splitdrive(self): |
| dir1 = 'C:!Foo!Bar!Baz' |
| self.assertEqual(self.os.path.splitdrive(dir1), self.os.path.splitdrive(self.path(dir1))) |
| |
| def test_abspath(self): |
| dir1 = '!foo!bar!..!baz' |
| self.assertEqual(self.os.path.abspath(dir1), self.os.path.abspath(self.path(dir1))) |
| |
| def test_exists(self): |
| dir1 = '!foo!bar!..!baz' |
| self.assertEqual(self.os.path.exists(dir1), self.os.path.exists(self.path(dir1))) |
| |
| def test_lexists(self): |
| dir1 = '!foo!bar!..!baz' |
| self.assertEqual(self.os.path.lexists(dir1), self.os.path.lexists(self.path(dir1))) |
| |
| def test_expanduser(self): |
| dir1 = '~!foo' |
| self.assertEqual(self.os.path.expanduser(dir1), self.os.path.expanduser(self.path(dir1))) |
| |
| def test_getmtime(self): |
| dir1 = 'foo!bar1.txt' |
| path_obj = self.filesystem.CreateFile(dir1) |
| path_obj.SetMTime(24) |
| self.assertEqual(self.os.path.getmtime(dir1), self.os.path.getmtime(self.path(dir1))) |
| |
| def test_getctime(self): |
| dir1 = 'foo!bar1.txt' |
| path_obj = self.filesystem.CreateFile(dir1) |
| path_obj.SetCTime(42) |
| self.assertEqual(self.os.path.getctime(dir1), self.os.path.getctime(self.path(dir1))) |
| |
| def test_getatime(self): |
| dir1 = 'foo!bar1.txt' |
| path_obj = self.filesystem.CreateFile(dir1) |
| path_obj.SetATime(11) |
| self.assertEqual(self.os.path.getatime(dir1), self.os.path.getatime(self.path(dir1))) |
| |
| def test_getsize(self): |
| path = 'foo!bar!baz' |
| self.filesystem.CreateFile(path, contents='1234567') |
| self.assertEqual(self.os.path.getsize(path), self.os.path.getsize(self.path(path))) |
| |
| def test_isabs(self): |
| path = '!foo!bar!..!baz' |
| self.assertEqual(self.os.path.isabs(path), self.os.path.isabs(self.path(path))) |
| |
| def test_isfile(self): |
| path = 'foo!bar!baz' |
| self.filesystem.CreateFile(path) |
| self.assertEqual(self.os.path.isfile(path), self.os.path.isfile(self.path(path))) |
| |
| def test_islink(self): |
| path = 'foo!bar!baz' |
| self.filesystem.CreateFile(path) |
| self.assertEqual(self.os.path.islink(path), self.os.path.islink(self.path(path))) |
| |
| def test_isdir(self): |
| path = 'foo!bar!baz' |
| self.filesystem.CreateFile(path) |
| self.assertEqual(self.os.path.isdir(path), self.os.path.isdir(self.path(path))) |
| |
| def test_ismount(self): |
| path = '!' |
| self.assertEqual(self.os.path.ismount(path), self.os.path.ismount(self.path(path))) |
| |
| def test_access(self): |
| path = 'foo!bar!baz' |
| self.filesystem.CreateFile(path, contents='1234567') |
| self.assertEqual(self.os.access(path, os.R_OK), self.os.access(self.path(path), os.R_OK)) |
| |
| def test_chdir(self): |
| path = '!foo!bar!baz' |
| self.filesystem.CreateDirectory(path) |
| self.os.chdir(self.path(path)) |
| self.assertEqual(path, self.filesystem.cwd) |
| |
| def test_chmod(self): |
| path = '!some_file' |
| self.filesystem.CreateFile(path) |
| self.os.chmod(self.path(path), 0o400) |
| self.assertEqual(stat.S_IMODE(0o400), stat.S_IMODE(self.os.stat(path).st_mode)) |
| |
| def test_link(self): |
| file1_path = 'test_file1' |
| file2_path = 'test_file2' |
| self.filesystem.CreateFile(file1_path) |
| self.os.link(self.path(file1_path), file2_path) |
| self.assertTrue(self.os.path.exists(file2_path)) |
| self.os.unlink(file2_path) |
| self.os.link(self.path(file1_path), self.path(file2_path)) |
| self.assertTrue(self.os.path.exists(file2_path)) |
| self.os.unlink(file2_path) |
| self.os.link(file1_path, self.path(file2_path)) |
| self.assertTrue(self.os.path.exists(file2_path)) |
| |
| def test_listdir(self): |
| path = '!foo!bar' |
| self.filesystem.CreateDirectory(path) |
| self.filesystem.CreateFile(path + 'baz.txt') |
| self.assertEqual(self.os.listdir(path), self.os.listdir(self.path(path))) |
| |
| def test_mkdir(self): |
| path = '!foo' |
| self.os.mkdir(self.path(path)) |
| self.assertTrue(self.filesystem.Exists(path)) |
| |
| def test_makedirs(self): |
| path = '!foo!bar' |
| self.os.makedirs(self.path(path)) |
| self.assertTrue(self.filesystem.Exists(path)) |
| |
| def test_readlink(self): |
| link_path = 'foo!bar!baz' |
| target = 'tarJAY' |
| self.filesystem.CreateLink(link_path, target) |
| self.assertEqual(self.os.readlink(self.path(link_path)), target) |
| |
| def test_remove(self): |
| path = '!test.txt' |
| self.filesystem.CreateFile(path) |
| self.os.remove(self.path(path)) |
| self.assertFalse(self.filesystem.Exists(path)) |
| |
| def test_rename(self): |
| path1 = 'test1.txt' |
| path2 = 'test2.txt' |
| self.filesystem.CreateFile(path1) |
| self.os.rename(self.path(path1), path2) |
| self.assertTrue(self.filesystem.Exists(path2)) |
| self.os.rename(self.path(path2), self.path(path1)) |
| self.assertTrue(self.filesystem.Exists(path1)) |
| |
| def test_replace(self): |
| path1 = 'test1.txt' |
| path2 = 'test2.txt' |
| self.filesystem.CreateFile(path1) |
| self.os.replace(self.path(path1), path2) |
| self.assertTrue(self.filesystem.Exists(path2)) |
| self.os.replace(self.path(path2), self.path(path1)) |
| self.assertTrue(self.filesystem.Exists(path1)) |
| |
| def test_rmdir(self): |
| path = '!foo!bar' |
| self.filesystem.CreateDirectory(path) |
| self.os.rmdir(self.path(path)) |
| self.assertFalse(self.filesystem.Exists(path)) |
| |
| def test_scandir(self): |
| directory = '!xyzzy!plugh' |
| self.filesystem.CreateDirectory(directory) |
| self.filesystem.CreateFile(directory + '!test.txt') |
| dir_entries = [entry for entry in self.os.scandir(self.path(directory))] |
| self.assertEqual(1, len(dir_entries)) |
| |
| def test_symlink(self): |
| file_path = 'test_file1' |
| link_path = 'link' |
| self.filesystem.CreateFile(file_path) |
| self.os.symlink(self.path(file_path), link_path) |
| self.assertTrue(self.os.path.exists(link_path)) |
| self.os.remove(link_path) |
| self.os.symlink(self.path(file_path), self.path(link_path)) |
| self.assertTrue(self.os.path.exists(link_path)) |
| |
| def test_stat(self): |
| path = 'foo!bar!baz' |
| self.filesystem.CreateFile(path, contents='1234567') |
| self.assertEqual(self.os.stat(path), self.os.stat(self.path(path))) |
| |
| def test_utime(self): |
| path = '!some_file' |
| self.filesystem.CreateFile(path, contents='test') |
| self.os.utime(self.path(path), (1, 2)) |
| st = self.os.stat(path) |
| self.assertEqual(1, st.st_atime) |
| self.assertEqual(2, st.st_mtime) |
| |
| |
| if __name__ == '__main__': |
| unittest.main() |