diff -r 69ecc87571ac Lib/test/test_posixpath.py --- a/Lib/test/test_posixpath.py Sun Mar 20 18:34:24 2011 +0100 +++ b/Lib/test/test_posixpath.py Sun Mar 20 12:52:06 2011 -0700 @@ -309,6 +309,30 @@ safe_rmdir(ABSTFN + "/k") safe_rmdir(ABSTFN) + def test_realpath_bug11397(self): + # Bug #11397: realpath() fails to return the correct real path of + # some tree of symlinks. + try: + old_path = abspath('.') + os.mkdir(ABSTFN) + os.chdir(ABSTFN) + os.mkdir(ABSTFN + '/a') + os.symlink('../a', 'a/blink') + os.makedirs(ABSTFN + '/a/c/d') + os.symlink('a/c/d/..', 'xlink') # xlink -> /a/c + os.symlink('xlink/../blink', 'zlink') # zlink -> /a/blink -> /a + + self.assertEqual(realpath('zlink'), ABSTFN + '/a') + finally: + os.chdir(old_path) + test_support.unlink(ABSTFN + '/zlink') + test_support.unlink(ABSTFN + '/xlink') + test_support.unlink(ABSTFN + '/a/blink') + safe_rmdir(ABSTFN + '/a/c/d') + safe_rmdir(ABSTFN + '/a/c') + safe_rmdir(ABSTFN + '/a') + safe_rmdir(ABSTFN) + def test_relpath(self): (real_getcwd, os.getcwd) = (os.getcwd, lambda: r"/home/user/bar") try: