]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Add a test for complex symlinks.
authorAntoine Pitrou <solipsis@pitrou.net>
Tue, 3 Dec 2013 10:01:08 +0000 (11:01 +0100)
committerAntoine Pitrou <solipsis@pitrou.net>
Tue, 3 Dec 2013 10:01:08 +0000 (11:01 +0100)
Lib/test/test_pathlib.py

index 8f0855e61873c3865174465a164e710d22c8cce3..c4e28e7741eef8911a9fbd962c29ff6eb27980e4 100755 (executable)
@@ -1093,20 +1093,21 @@ class _BasePathTest(object):
         with open(join('dirC', 'dirD', 'fileD'), 'wb') as f:
             f.write(b"this is file D\n")
         if not symlink_skip_reason:
-            if os.name == 'nt':
-                # Workaround for http://bugs.python.org/issue13772
-                def dirlink(src, dest):
-                    os.symlink(src, dest, target_is_directory=True)
-            else:
-                def dirlink(src, dest):
-                    os.symlink(src, dest)
             # Relative symlinks
             os.symlink('fileA', join('linkA'))
             os.symlink('non-existing', join('brokenLink'))
-            dirlink('dirB', join('linkB'))
-            dirlink(os.path.join('..', 'dirB'), join('dirA', 'linkC'))
+            self.dirlink('dirB', join('linkB'))
+            self.dirlink(os.path.join('..', 'dirB'), join('dirA', 'linkC'))
             # This one goes upwards but doesn't create a loop
-            dirlink(os.path.join('..', 'dirB'), join('dirB', 'linkD'))
+            self.dirlink(os.path.join('..', 'dirB'), join('dirB', 'linkD'))
+
+    if os.name == 'nt':
+        # Workaround for http://bugs.python.org/issue13772
+        def dirlink(self, src, dest):
+            os.symlink(src, dest, target_is_directory=True)
+    else:
+        def dirlink(self, src, dest):
+            os.symlink(src, dest)
 
     def assertSame(self, path_a, path_b):
         self.assertTrue(os.path.samefile(str(path_a), str(path_b)),
@@ -1269,6 +1270,16 @@ class _BasePathTest(object):
         p = P(BASE, 'dirA', 'linkX', 'linkY', 'fileB')
         self._check_resolve_absolute(p, P(BASE, 'dirB', 'fileB'))
 
+    @with_symlinks
+    def test_resolve_dot(self):
+        # See https://bitbucket.org/pitrou/pathlib/issue/9/pathresolve-fails-on-complex-symlinks
+        p = self.cls(BASE)
+        self.dirlink('.', join('0'))
+        self.dirlink('0/0', join('1'))
+        self.dirlink('1/1', join('2'))
+        q = p / '2'
+        self.assertEqual(q.resolve(), p)
+
     def test_with(self):
         p = self.cls(BASE)
         it = p.iterdir()