summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_posixpath.py
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2013-02-10 10:24:06 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2013-02-10 10:24:06 (GMT)
commitf2619236ebc6ea2d0d0dc64f3b672896072e9dfc (patch)
tree7b31e89a6fb06cf196c436f245a14087f4341c42 /Lib/test/test_posixpath.py
parente35042d13a888aa1b5d94d109763f021b62d786b (diff)
parentd83c82440b85faa6aefdf56fce25f285d8164bb7 (diff)
downloadcpython-f2619236ebc6ea2d0d0dc64f3b672896072e9dfc.zip
cpython-f2619236ebc6ea2d0d0dc64f3b672896072e9dfc.tar.gz
cpython-f2619236ebc6ea2d0d0dc64f3b672896072e9dfc.tar.bz2
Issue #6975: os.path.realpath() now correctly resolves multiple nested symlinks on POSIX platforms.
Diffstat (limited to 'Lib/test/test_posixpath.py')
-rw-r--r--Lib/test/test_posixpath.py55
1 files changed, 55 insertions, 0 deletions
diff --git a/Lib/test/test_posixpath.py b/Lib/test/test_posixpath.py
index 43442e5..0d85727 100644
--- a/Lib/test/test_posixpath.py
+++ b/Lib/test/test_posixpath.py
@@ -320,6 +320,22 @@ class PosixPathTest(unittest.TestCase):
self.assertEqual(realpath(ABSTFN+"1"), ABSTFN+"1")
self.assertEqual(realpath(ABSTFN+"2"), ABSTFN+"2")
+ self.assertEqual(realpath(ABSTFN+"1/x"), ABSTFN+"1/x")
+ self.assertEqual(realpath(ABSTFN+"1/.."), dirname(ABSTFN))
+ self.assertEqual(realpath(ABSTFN+"1/../x"), dirname(ABSTFN) + "/x")
+ os.symlink(ABSTFN+"x", ABSTFN+"y")
+ self.assertEqual(realpath(ABSTFN+"1/../" + basename(ABSTFN) + "y"),
+ ABSTFN + "y")
+ self.assertEqual(realpath(ABSTFN+"1/../" + basename(ABSTFN) + "1"),
+ ABSTFN + "1")
+
+ os.symlink(basename(ABSTFN) + "a/b", ABSTFN+"a")
+ self.assertEqual(realpath(ABSTFN+"a"), ABSTFN+"a/b")
+
+ os.symlink("../" + basename(dirname(ABSTFN)) + "/" +
+ basename(ABSTFN) + "c", ABSTFN+"c")
+ self.assertEqual(realpath(ABSTFN+"c"), ABSTFN+"c")
+
# Test using relative path as well.
os.chdir(dirname(ABSTFN))
self.assertEqual(realpath(basename(ABSTFN)), ABSTFN)
@@ -328,6 +344,45 @@ class PosixPathTest(unittest.TestCase):
support.unlink(ABSTFN)
support.unlink(ABSTFN+"1")
support.unlink(ABSTFN+"2")
+ support.unlink(ABSTFN+"y")
+ support.unlink(ABSTFN+"c")
+
+ @unittest.skipUnless(hasattr(os, "symlink"),
+ "Missing symlink implementation")
+ @skip_if_ABSTFN_contains_backslash
+ def test_realpath_repeated_indirect_symlinks(self):
+ # Issue #6975.
+ try:
+ os.mkdir(ABSTFN)
+ os.symlink('../' + basename(ABSTFN), ABSTFN + '/self')
+ os.symlink('self/self/self', ABSTFN + '/link')
+ self.assertEqual(realpath(ABSTFN + '/link'), ABSTFN)
+ finally:
+ support.unlink(ABSTFN + '/self')
+ support.unlink(ABSTFN + '/link')
+ safe_rmdir(ABSTFN)
+
+ @unittest.skipUnless(hasattr(os, "symlink"),
+ "Missing symlink implementation")
+ @skip_if_ABSTFN_contains_backslash
+ def test_realpath_deep_recursion(self):
+ depth = 10
+ old_path = abspath('.')
+ try:
+ os.mkdir(ABSTFN)
+ for i in range(depth):
+ os.symlink('/'.join(['%d' % i] * 10), ABSTFN + '/%d' % (i + 1))
+ os.symlink('.', ABSTFN + '/0')
+ self.assertEqual(realpath(ABSTFN + '/%d' % depth), ABSTFN)
+
+ # Test using relative path as well.
+ os.chdir(ABSTFN)
+ self.assertEqual(realpath('%d' % depth), ABSTFN)
+ finally:
+ os.chdir(old_path)
+ for i in range(depth + 1):
+ support.unlink(ABSTFN + '/%d' % i)
+ safe_rmdir(ABSTFN)
@unittest.skipUnless(hasattr(os, "symlink"),
"Missing symlink implementation")