summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_shutil.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_shutil.py')
-rw-r--r--Lib/test/test_shutil.py49
1 files changed, 32 insertions, 17 deletions
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index 18421fc..6fa0739 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -51,6 +51,9 @@ try:
except ImportError:
_winapi = None
+no_chdir = unittest.mock.patch('os.chdir',
+ side_effect=AssertionError("shouldn't call os.chdir()"))
+
def _fake_rename(*args, **kwargs):
# Pretend the destination path is on a different filesystem.
raise OSError(getattr(errno, 'EXDEV', 18), "Invalid cross-device link")
@@ -1342,7 +1345,7 @@ class TestArchives(BaseTest, unittest.TestCase):
work_dir = os.path.dirname(tmpdir2)
rel_base_name = os.path.join(os.path.basename(tmpdir2), 'archive')
- with os_helper.change_cwd(work_dir):
+ with os_helper.change_cwd(work_dir), no_chdir:
base_name = os.path.abspath(rel_base_name)
tarball = make_archive(rel_base_name, 'gztar', root_dir, '.')
@@ -1356,7 +1359,7 @@ class TestArchives(BaseTest, unittest.TestCase):
'./file1', './file2', './sub/file3'])
# trying an uncompressed one
- with os_helper.change_cwd(work_dir):
+ with os_helper.change_cwd(work_dir), no_chdir:
tarball = make_archive(rel_base_name, 'tar', root_dir, '.')
self.assertEqual(tarball, base_name + '.tar')
self.assertTrue(os.path.isfile(tarball))
@@ -1392,7 +1395,8 @@ class TestArchives(BaseTest, unittest.TestCase):
def test_tarfile_vs_tar(self):
root_dir, base_dir = self._create_files()
base_name = os.path.join(self.mkdtemp(), 'archive')
- tarball = make_archive(base_name, 'gztar', root_dir, base_dir)
+ with no_chdir:
+ tarball = make_archive(base_name, 'gztar', root_dir, base_dir)
# check if the compressed tarball was created
self.assertEqual(tarball, base_name + '.tar.gz')
@@ -1409,13 +1413,15 @@ class TestArchives(BaseTest, unittest.TestCase):
self.assertEqual(self._tarinfo(tarball), self._tarinfo(tarball2))
# trying an uncompressed one
- tarball = make_archive(base_name, 'tar', root_dir, base_dir)
+ with no_chdir:
+ tarball = make_archive(base_name, 'tar', root_dir, base_dir)
self.assertEqual(tarball, base_name + '.tar')
self.assertTrue(os.path.isfile(tarball))
# now for a dry_run
- tarball = make_archive(base_name, 'tar', root_dir, base_dir,
- dry_run=True)
+ with no_chdir:
+ tarball = make_archive(base_name, 'tar', root_dir, base_dir,
+ dry_run=True)
self.assertEqual(tarball, base_name + '.tar')
self.assertTrue(os.path.isfile(tarball))
@@ -1431,7 +1437,7 @@ class TestArchives(BaseTest, unittest.TestCase):
work_dir = os.path.dirname(tmpdir2)
rel_base_name = os.path.join(os.path.basename(tmpdir2), 'archive')
- with os_helper.change_cwd(work_dir):
+ with os_helper.change_cwd(work_dir), no_chdir:
base_name = os.path.abspath(rel_base_name)
res = make_archive(rel_base_name, 'zip', root_dir)
@@ -1444,7 +1450,7 @@ class TestArchives(BaseTest, unittest.TestCase):
'dist/file1', 'dist/file2', 'dist/sub/file3',
'outer'])
- with os_helper.change_cwd(work_dir):
+ with os_helper.change_cwd(work_dir), no_chdir:
base_name = os.path.abspath(rel_base_name)
res = make_archive(rel_base_name, 'zip', root_dir, base_dir)
@@ -1462,7 +1468,8 @@ class TestArchives(BaseTest, unittest.TestCase):
def test_zipfile_vs_zip(self):
root_dir, base_dir = self._create_files()
base_name = os.path.join(self.mkdtemp(), 'archive')
- archive = make_archive(base_name, 'zip', root_dir, base_dir)
+ with no_chdir:
+ archive = make_archive(base_name, 'zip', root_dir, base_dir)
# check if ZIP file was created
self.assertEqual(archive, base_name + '.zip')
@@ -1488,7 +1495,8 @@ class TestArchives(BaseTest, unittest.TestCase):
def test_unzip_zipfile(self):
root_dir, base_dir = self._create_files()
base_name = os.path.join(self.mkdtemp(), 'archive')
- archive = make_archive(base_name, 'zip', root_dir, base_dir)
+ with no_chdir:
+ archive = make_archive(base_name, 'zip', root_dir, base_dir)
# check if ZIP file was created
self.assertEqual(archive, base_name + '.zip')
@@ -1546,7 +1554,7 @@ class TestArchives(BaseTest, unittest.TestCase):
base_name = os.path.join(self.mkdtemp(), 'archive')
group = grp.getgrgid(0)[0]
owner = pwd.getpwuid(0)[0]
- with os_helper.change_cwd(root_dir):
+ with os_helper.change_cwd(root_dir), no_chdir:
archive_name = make_archive(base_name, 'gztar', root_dir, 'dist',
owner=owner, group=group)
@@ -1564,23 +1572,30 @@ class TestArchives(BaseTest, unittest.TestCase):
def test_make_archive_cwd(self):
current_dir = os.getcwd()
+ root_dir = self.mkdtemp()
def _breaks(*args, **kw):
raise RuntimeError()
+ dirs = []
+ def _chdir(path):
+ dirs.append(path)
+ orig_chdir(path)
register_archive_format('xxx', _breaks, [], 'xxx file')
try:
- try:
- make_archive('xxx', 'xxx', root_dir=self.mkdtemp())
- except Exception:
- pass
+ with support.swap_attr(os, 'chdir', _chdir) as orig_chdir:
+ try:
+ make_archive('xxx', 'xxx', root_dir=root_dir)
+ except Exception:
+ pass
self.assertEqual(os.getcwd(), current_dir)
+ self.assertEqual(dirs, [root_dir, current_dir])
finally:
unregister_archive_format('xxx')
def test_make_tarfile_in_curdir(self):
# Issue #21280
root_dir = self.mkdtemp()
- with os_helper.change_cwd(root_dir):
+ with os_helper.change_cwd(root_dir), no_chdir:
self.assertEqual(make_archive('test', 'tar'), 'test.tar')
self.assertTrue(os.path.isfile('test.tar'))
@@ -1588,7 +1603,7 @@ class TestArchives(BaseTest, unittest.TestCase):
def test_make_zipfile_in_curdir(self):
# Issue #21280
root_dir = self.mkdtemp()
- with os_helper.change_cwd(root_dir):
+ with os_helper.change_cwd(root_dir), no_chdir:
self.assertEqual(make_archive('test', 'zip'), 'test.zip')
self.assertTrue(os.path.isfile('test.zip'))