Skip to content

Commit b5ff1e6

Browse files
committed
Add tests for UNC paths.
1 parent 06b0c74 commit b5ff1e6

File tree

1 file changed

+55
-27
lines changed

1 file changed

+55
-27
lines changed

Lib/test/test_pathlib.py

Lines changed: 55 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1456,38 +1456,27 @@ def test_cwd(self):
14561456
p = self.cls.cwd()
14571457
self._test_cwd(p)
14581458

1459-
def _test_absolute(self):
1459+
def test_absolute_common(self):
14601460
P = self.cls
14611461

1462-
# Simple absolute paths
1463-
self.assertEqualNormCase(str(P('/').absolute()), '/')
1464-
self.assertEqualNormCase(str(P('/a').absolute()), '/a')
1465-
self.assertEqualNormCase(str(P('/a/b').absolute()), '/a/b')
1466-
self.assertEqualNormCase(str(P('//a/b').absolute()), '//a/b')
1462+
with mock.patch("pathlib._normal_accessor.getcwd") as getcwd:
1463+
getcwd.return_value = BASE
14671464

1468-
# Simple relative paths
1469-
self.assertEqualNormCase(str(P().absolute()), BASE)
1470-
self.assertEqualNormCase(str(P('.').absolute()), BASE)
1471-
self.assertEqualNormCase(str(P('a').absolute()), os.path.join(BASE, 'a'))
1472-
self.assertEqualNormCase(str(P('a', 'b', 'c').absolute()), os.path.join(BASE, 'a', 'b', 'c'))
1465+
# Simple relative paths
1466+
self.assertEqualNormCase(str(P().absolute()), BASE)
1467+
self.assertEqualNormCase(str(P('.').absolute()), BASE)
1468+
self.assertEqualNormCase(str(P('a').absolute()), os.path.join(BASE, 'a'))
1469+
self.assertEqualNormCase(str(P('a', 'b', 'c').absolute()), os.path.join(BASE, 'a', 'b', 'c'))
14731470

1474-
# Symlinks should not be resolved
1475-
self.assertEqualNormCase(str(P('linkB', 'fileB').absolute()), os.path.join(BASE, 'linkB', 'fileB'))
1476-
self.assertEqualNormCase(str(P('brokenLink').absolute()), os.path.join(BASE, 'brokenLink'))
1477-
self.assertEqualNormCase(str(P('brokenLinkLoop').absolute()), os.path.join(BASE, 'brokenLinkLoop'))
1471+
# Symlinks should not be resolved
1472+
self.assertEqualNormCase(str(P('linkB', 'fileB').absolute()), os.path.join(BASE, 'linkB', 'fileB'))
1473+
self.assertEqualNormCase(str(P('brokenLink').absolute()), os.path.join(BASE, 'brokenLink'))
1474+
self.assertEqualNormCase(str(P('brokenLinkLoop').absolute()), os.path.join(BASE, 'brokenLinkLoop'))
14781475

1479-
# '..' entries should be preserved and not normalised
1480-
self.assertEqualNormCase(str(P('..').absolute()), os.path.join(BASE, '..'))
1481-
self.assertEqualNormCase(str(P('a', '..').absolute()), os.path.join(BASE, 'a', '..'))
1482-
self.assertEqualNormCase(str(P('..', 'b').absolute()), os.path.join(BASE, '..', 'b'))
1483-
1484-
def test_absolute(self):
1485-
old_path = os.getcwd()
1486-
os.chdir(BASE)
1487-
try:
1488-
self._test_absolute()
1489-
finally:
1490-
os.chdir(old_path)
1476+
# '..' entries should be preserved and not normalised
1477+
self.assertEqualNormCase(str(P('..').absolute()), os.path.join(BASE, '..'))
1478+
self.assertEqualNormCase(str(P('a', '..').absolute()), os.path.join(BASE, 'a', '..'))
1479+
self.assertEqualNormCase(str(P('..', 'b').absolute()), os.path.join(BASE, '..', 'b'))
14911480

14921481
def _test_home(self, p):
14931482
q = self.cls(os.path.expanduser('~'))
@@ -2490,6 +2479,17 @@ def test_glob_empty_pattern(self):
24902479
class PosixPathTest(_BasePathTest, unittest.TestCase):
24912480
cls = pathlib.PosixPath
24922481

2482+
def test_absolute(self):
2483+
P = self.cls
2484+
self.assertEqualNormCase(str(P('/').absolute()), '/')
2485+
self.assertEqualNormCase(str(P('/a').absolute()), '/a')
2486+
self.assertEqualNormCase(str(P('/a/b').absolute()), '/a/b')
2487+
2488+
# '//'-prefixed absolute path (supported by POSIX)
2489+
self.assertEqualNormCase(str(P('//').absolute()), '//')
2490+
self.assertEqualNormCase(str(P('//a').absolute()), '//a')
2491+
self.assertEqualNormCase(str(P('//a/b').absolute()), '//a/b')
2492+
24932493
def _check_symlink_loop(self, *args, strict=True):
24942494
path = self.cls(*args)
24952495
with self.assertRaises(RuntimeError):
@@ -2655,6 +2655,34 @@ def test_handling_bad_descriptor(self):
26552655
class WindowsPathTest(_BasePathTest, unittest.TestCase):
26562656
cls = pathlib.WindowsPath
26572657

2658+
def test_absolute(self):
2659+
P = self.cls
2660+
2661+
# Simple absolute paths
2662+
self.assertEqualNormCase(str(P('c:\\').absolute()), 'c:\\')
2663+
self.assertEqualNormCase(str(P('c:\\a').absolute()), 'c:\\a')
2664+
self.assertEqualNormCase(str(P('c:\\a\\b').absolute()), 'c:\\a\\b')
2665+
2666+
# UNC absolute paths
2667+
share = '\\\\server\\share'
2668+
self.assertEqualNormCase(str(P(share).absolute()), share)
2669+
self.assertEqualNormCase(str(P(share + '\\a').absolute()),
2670+
share + '\\a')
2671+
self.assertEqualNormCase(str(P(share + '\\a\\b').absolute()),
2672+
share + '\\a\\b')
2673+
2674+
# UNC relative paths
2675+
with mock.patch("pathlib._normal_accessor.getcwd") as getcwd:
2676+
getcwd.return_value = share
2677+
2678+
self.assertEqualNormCase(str(P().absolute()), BASE)
2679+
self.assertEqualNormCase(str(P('.').absolute()), BASE)
2680+
self.assertEqualNormCase(str(P('a').absolute()),
2681+
os.path.join(BASE, 'a'))
2682+
self.assertEqualNormCase(str(P('a', 'b', 'c').absolute()),
2683+
os.path.join(BASE, 'a', 'b', 'c'))
2684+
2685+
26582686
def test_glob(self):
26592687
P = self.cls
26602688
p = P(BASE)

0 commit comments

Comments
 (0)