summaryrefslogtreecommitdiff
path: root/Lib/test
diff options
context:
space:
mode:
authorBerker Peksag <berker.peksag@gmail.com>2015-07-25 14:53:48 +0300
committerBerker Peksag <berker.peksag@gmail.com>2015-07-25 14:53:48 +0300
commit34d7a7e12dcd54473d50e9bc6c7da5018d89f2f2 (patch)
tree7e6e7a7af7b26a4f9b9792b2fd6626c61471552b /Lib/test
parentd52dd3adf1ec5f5e62c4eb8315f3b2e99b2a79f2 (diff)
downloadcpython-34d7a7e12dcd54473d50e9bc6c7da5018d89f2f2.tar.gz
Issue #21697: shutil.copytree() now correctly handles symbolic links that point to directories.
Patch by Eduardo Seabra and Thomas Kluyver.
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_shutil.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
index 9325bc7dc1..ca2bfc4bfe 100644
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -895,6 +895,26 @@ class TestShutil(unittest.TestCase):
shutil.copytree(src_dir, dst_dir, symlinks=True)
self.assertIn('test.txt', os.listdir(dst_dir))
+ @support.skip_unless_symlink
+ def test_copytree_symlink_dir(self):
+ src_dir = self.mkdtemp()
+ dst_dir = os.path.join(self.mkdtemp(), 'destination')
+ os.mkdir(os.path.join(src_dir, 'real_dir'))
+ with open(os.path.join(src_dir, 'real_dir', 'test.txt'), 'w'):
+ pass
+ os.symlink(os.path.join(src_dir, 'real_dir'),
+ os.path.join(src_dir, 'link_to_dir'),
+ target_is_directory=True)
+
+ shutil.copytree(src_dir, dst_dir, symlinks=False)
+ self.assertFalse(os.path.islink(os.path.join(dst_dir, 'link_to_dir')))
+ self.assertIn('test.txt', os.listdir(os.path.join(dst_dir, 'link_to_dir')))
+
+ dst_dir = os.path.join(self.mkdtemp(), 'destination2')
+ shutil.copytree(src_dir, dst_dir, symlinks=True)
+ self.assertTrue(os.path.islink(os.path.join(dst_dir, 'link_to_dir')))
+ self.assertIn('test.txt', os.listdir(os.path.join(dst_dir, 'link_to_dir')))
+
def _copy_file(self, method):
fname = 'test.txt'
tmpdir = self.mkdtemp()