summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorHai Shi <shihai1992@gmail.com>2019-08-13 19:54:02 (GMT)
committerAntoine Pitrou <antoine@python.org>2019-08-13 19:54:02 (GMT)
commit82642a052dc46b2180679518bc8d87e1a28a88b5 (patch)
tree8a987a065e51338c28d01dc359b404dc72717f0d /Lib/test
parent8a784af750fa82c8355903309e5089eb2b60c16b (diff)
downloadcpython-82642a052dc46b2180679518bc8d87e1a28a88b5.zip
cpython-82642a052dc46b2180679518bc8d87e1a28a88b5.tar.gz
cpython-82642a052dc46b2180679518bc8d87e1a28a88b5.tar.bz2
bpo-37689: add Path.is_relative_to() method (GH-14982)
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/test_pathlib.py87
1 files changed, 87 insertions, 0 deletions
diff --git a/Lib/test/test_pathlib.py b/Lib/test/test_pathlib.py
index f74524d..cfda0a2 100644
--- a/Lib/test/test_pathlib.py
+++ b/Lib/test/test_pathlib.py
@@ -619,6 +619,40 @@ class _BasePurePathTest(object):
self.assertRaises(ValueError, p.relative_to, '')
self.assertRaises(ValueError, p.relative_to, P('a'))
+ def test_is_relative_to_common(self):
+ P = self.cls
+ p = P('a/b')
+ self.assertRaises(TypeError, p.is_relative_to)
+ self.assertRaises(TypeError, p.is_relative_to, b'a')
+ self.assertTrue(p.is_relative_to(P()))
+ self.assertTrue(p.is_relative_to(''))
+ self.assertTrue(p.is_relative_to(P('a')))
+ self.assertTrue(p.is_relative_to('a/'))
+ self.assertTrue(p.is_relative_to(P('a/b')))
+ self.assertTrue(p.is_relative_to('a/b'))
+ # With several args.
+ self.assertTrue(p.is_relative_to('a', 'b'))
+ # Unrelated paths.
+ self.assertFalse(p.is_relative_to(P('c')))
+ self.assertFalse(p.is_relative_to(P('a/b/c')))
+ self.assertFalse(p.is_relative_to(P('a/c')))
+ self.assertFalse(p.is_relative_to(P('/a')))
+ p = P('/a/b')
+ self.assertTrue(p.is_relative_to(P('/')))
+ self.assertTrue(p.is_relative_to('/'))
+ self.assertTrue(p.is_relative_to(P('/a')))
+ self.assertTrue(p.is_relative_to('/a'))
+ self.assertTrue(p.is_relative_to('/a/'))
+ self.assertTrue(p.is_relative_to(P('/a/b')))
+ self.assertTrue(p.is_relative_to('/a/b'))
+ # Unrelated paths.
+ self.assertFalse(p.is_relative_to(P('/c')))
+ self.assertFalse(p.is_relative_to(P('/a/b/c')))
+ self.assertFalse(p.is_relative_to(P('/a/c')))
+ self.assertFalse(p.is_relative_to(P()))
+ self.assertFalse(p.is_relative_to(''))
+ self.assertFalse(p.is_relative_to(P('a')))
+
def test_pickling_common(self):
P = self.cls
p = P('/a/b')
@@ -1062,6 +1096,59 @@ class PureWindowsPathTest(_BasePurePathTest, unittest.TestCase):
self.assertRaises(ValueError, p.relative_to, P('//z/Share/Foo'))
self.assertRaises(ValueError, p.relative_to, P('//Server/z/Foo'))
+ def test_is_relative_to(self):
+ P = self.cls
+ p = P('C:Foo/Bar')
+ self.assertTrue(p.is_relative_to(P('c:')))
+ self.assertTrue(p.is_relative_to('c:'))
+ self.assertTrue(p.is_relative_to(P('c:foO')))
+ self.assertTrue(p.is_relative_to('c:foO'))
+ self.assertTrue(p.is_relative_to('c:foO/'))
+ self.assertTrue(p.is_relative_to(P('c:foO/baR')))
+ self.assertTrue(p.is_relative_to('c:foO/baR'))
+ # Unrelated paths.
+ self.assertFalse(p.is_relative_to(P()))
+ self.assertFalse(p.is_relative_to(''))
+ self.assertFalse(p.is_relative_to(P('d:')))
+ self.assertFalse(p.is_relative_to(P('/')))
+ self.assertFalse(p.is_relative_to(P('Foo')))
+ self.assertFalse(p.is_relative_to(P('/Foo')))
+ self.assertFalse(p.is_relative_to(P('C:/Foo')))
+ self.assertFalse(p.is_relative_to(P('C:Foo/Bar/Baz')))
+ self.assertFalse(p.is_relative_to(P('C:Foo/Baz')))
+ p = P('C:/Foo/Bar')
+ self.assertTrue(p.is_relative_to('c:'))
+ self.assertTrue(p.is_relative_to(P('c:/')))
+ self.assertTrue(p.is_relative_to(P('c:/foO')))
+ self.assertTrue(p.is_relative_to('c:/foO/'))
+ self.assertTrue(p.is_relative_to(P('c:/foO/baR')))
+ self.assertTrue(p.is_relative_to('c:/foO/baR'))
+ # Unrelated paths.
+ self.assertFalse(p.is_relative_to(P('C:/Baz')))
+ self.assertFalse(p.is_relative_to(P('C:/Foo/Bar/Baz')))
+ self.assertFalse(p.is_relative_to(P('C:/Foo/Baz')))
+ self.assertFalse(p.is_relative_to(P('C:Foo')))
+ self.assertFalse(p.is_relative_to(P('d:')))
+ self.assertFalse(p.is_relative_to(P('d:/')))
+ self.assertFalse(p.is_relative_to(P('/')))
+ self.assertFalse(p.is_relative_to(P('/Foo')))
+ self.assertFalse(p.is_relative_to(P('//C/Foo')))
+ # UNC paths.
+ p = P('//Server/Share/Foo/Bar')
+ self.assertTrue(p.is_relative_to(P('//sErver/sHare')))
+ self.assertTrue(p.is_relative_to('//sErver/sHare'))
+ self.assertTrue(p.is_relative_to('//sErver/sHare/'))
+ self.assertTrue(p.is_relative_to(P('//sErver/sHare/Foo')))
+ self.assertTrue(p.is_relative_to('//sErver/sHare/Foo'))
+ self.assertTrue(p.is_relative_to('//sErver/sHare/Foo/'))
+ self.assertTrue(p.is_relative_to(P('//sErver/sHare/Foo/Bar')))
+ self.assertTrue(p.is_relative_to('//sErver/sHare/Foo/Bar'))
+ # Unrelated paths.
+ self.assertFalse(p.is_relative_to(P('/Server/Share/Foo')))
+ self.assertFalse(p.is_relative_to(P('c:/Server/Share/Foo')))
+ self.assertFalse(p.is_relative_to(P('//z/Share/Foo')))
+ self.assertFalse(p.is_relative_to(P('//Server/z/Foo')))
+
def test_is_absolute(self):
P = self.cls
# Under NT, only paths with both a drive and a root are absolute.