annotate Lib/test/test_pathlib.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents b58b58948c27
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
87348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1 import collections
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
2 import io
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
3 import os
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
4 import errno
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
5 import pathlib
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
6 import pickle
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
7 import shutil
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
8 import socket
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
9 import stat
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
10 import sys
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
11 import tempfile
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
12 import unittest
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
13 from contextlib import contextmanager
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
14
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
15 from test import support
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
16 TESTFN = support.TESTFN
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
17
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
18 try:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
19 import grp, pwd
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
20 except ImportError:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
21 grp = pwd = None
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
22
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
23
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
24 class _BaseFlavourTest(object):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
25
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
26 def _check_parse_parts(self, arg, expected):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
27 f = self.flavour.parse_parts
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
28 sep = self.flavour.sep
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
29 altsep = self.flavour.altsep
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
30 actual = f([x.replace('/', sep) for x in arg])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
31 self.assertEqual(actual, expected)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
32 if altsep:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
33 actual = f([x.replace('/', altsep) for x in arg])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
34 self.assertEqual(actual, expected)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
35
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
36 def test_parse_parts_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
37 check = self._check_parse_parts
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
38 sep = self.flavour.sep
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
39 # Unanchored parts
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
40 check([], ('', '', []))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
41 check(['a'], ('', '', ['a']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
42 check(['a/'], ('', '', ['a']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
43 check(['a', 'b'], ('', '', ['a', 'b']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
44 # Expansion
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
45 check(['a/b'], ('', '', ['a', 'b']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
46 check(['a/b/'], ('', '', ['a', 'b']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
47 check(['a', 'b/c', 'd'], ('', '', ['a', 'b', 'c', 'd']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
48 # Collapsing and stripping excess slashes
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
49 check(['a', 'b//c', 'd'], ('', '', ['a', 'b', 'c', 'd']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
50 check(['a', 'b/c/', 'd'], ('', '', ['a', 'b', 'c', 'd']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
51 # Eliminating standalone dots
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
52 check(['.'], ('', '', []))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
53 check(['.', '.', 'b'], ('', '', ['b']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
54 check(['a', '.', 'b'], ('', '', ['a', 'b']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
55 check(['a', '.', '.'], ('', '', ['a']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
56 # The first part is anchored
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
57 check(['/a/b'], ('', sep, [sep, 'a', 'b']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
58 check(['/a', 'b'], ('', sep, [sep, 'a', 'b']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
59 check(['/a/', 'b'], ('', sep, [sep, 'a', 'b']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
60 # Ignoring parts before an anchored part
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
61 check(['a', '/b', 'c'], ('', sep, [sep, 'b', 'c']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
62 check(['a', '/b', '/c'], ('', sep, [sep, 'c']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
63
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
64
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
65 class PosixFlavourTest(_BaseFlavourTest, unittest.TestCase):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
66 flavour = pathlib._posix_flavour
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
67
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
68 def test_parse_parts(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
69 check = self._check_parse_parts
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
70 # Collapsing of excess leading slashes, except for the double-slash
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
71 # special case.
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
72 check(['//a', 'b'], ('', '//', ['//', 'a', 'b']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
73 check(['///a', 'b'], ('', '/', ['/', 'a', 'b']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
74 check(['////a', 'b'], ('', '/', ['/', 'a', 'b']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
75 # Paths which look like NT paths aren't treated specially
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
76 check(['c:a'], ('', '', ['c:a']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
77 check(['c:\\a'], ('', '', ['c:\\a']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
78 check(['\\a'], ('', '', ['\\a']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
79
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
80 def test_splitroot(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
81 f = self.flavour.splitroot
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
82 self.assertEqual(f(''), ('', '', ''))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
83 self.assertEqual(f('a'), ('', '', 'a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
84 self.assertEqual(f('a/b'), ('', '', 'a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
85 self.assertEqual(f('a/b/'), ('', '', 'a/b/'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
86 self.assertEqual(f('/a'), ('', '/', 'a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
87 self.assertEqual(f('/a/b'), ('', '/', 'a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
88 self.assertEqual(f('/a/b/'), ('', '/', 'a/b/'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
89 # The root is collapsed when there are redundant slashes
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
90 # except when there are exactly two leading slashes, which
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
91 # is a special case in POSIX.
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
92 self.assertEqual(f('//a'), ('', '//', 'a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
93 self.assertEqual(f('///a'), ('', '/', 'a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
94 self.assertEqual(f('///a/b'), ('', '/', 'a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
95 # Paths which look like NT paths aren't treated specially
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
96 self.assertEqual(f('c:/a/b'), ('', '', 'c:/a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
97 self.assertEqual(f('\\/a/b'), ('', '', '\\/a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
98 self.assertEqual(f('\\a\\b'), ('', '', '\\a\\b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
99
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
100
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
101 class NTFlavourTest(_BaseFlavourTest, unittest.TestCase):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
102 flavour = pathlib._windows_flavour
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
103
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
104 def test_parse_parts(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
105 check = self._check_parse_parts
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
106 # First part is anchored
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
107 check(['c:'], ('c:', '', ['c:']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
108 check(['c:\\'], ('c:', '\\', ['c:\\']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
109 check(['\\'], ('', '\\', ['\\']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
110 check(['c:a'], ('c:', '', ['c:', 'a']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
111 check(['c:\\a'], ('c:', '\\', ['c:\\', 'a']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
112 check(['\\a'], ('', '\\', ['\\', 'a']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
113 # UNC paths
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
114 check(['\\\\a\\b'], ('\\\\a\\b', '\\', ['\\\\a\\b\\']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
115 check(['\\\\a\\b\\'], ('\\\\a\\b', '\\', ['\\\\a\\b\\']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
116 check(['\\\\a\\b\\c'], ('\\\\a\\b', '\\', ['\\\\a\\b\\', 'c']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
117 # Second part is anchored, so that the first part is ignored
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
118 check(['a', 'Z:b', 'c'], ('Z:', '', ['Z:', 'b', 'c']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
119 check(['a', 'Z:\\b', 'c'], ('Z:', '\\', ['Z:\\', 'b', 'c']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
120 check(['a', '\\b', 'c'], ('', '\\', ['\\', 'b', 'c']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
121 # UNC paths
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
122 check(['a', '\\\\b\\c', 'd'], ('\\\\b\\c', '\\', ['\\\\b\\c\\', 'd']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
123 # Collapsing and stripping excess slashes
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
124 check(['a', 'Z:\\\\b\\\\c\\', 'd\\'], ('Z:', '\\', ['Z:\\', 'b', 'c', 'd']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
125 # UNC paths
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
126 check(['a', '\\\\b\\c\\\\', 'd'], ('\\\\b\\c', '\\', ['\\\\b\\c\\', 'd']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
127 # Extended paths
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
128 check(['\\\\?\\c:\\'], ('\\\\?\\c:', '\\', ['\\\\?\\c:\\']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
129 check(['\\\\?\\c:\\a'], ('\\\\?\\c:', '\\', ['\\\\?\\c:\\', 'a']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
130 # Extended UNC paths (format is "\\?\UNC\server\share")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
131 check(['\\\\?\\UNC\\b\\c'], ('\\\\?\\UNC\\b\\c', '\\', ['\\\\?\\UNC\\b\\c\\']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
132 check(['\\\\?\\UNC\\b\\c\\d'], ('\\\\?\\UNC\\b\\c', '\\', ['\\\\?\\UNC\\b\\c\\', 'd']))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
133
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
134 def test_splitroot(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
135 f = self.flavour.splitroot
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
136 self.assertEqual(f(''), ('', '', ''))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
137 self.assertEqual(f('a'), ('', '', 'a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
138 self.assertEqual(f('a\\b'), ('', '', 'a\\b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
139 self.assertEqual(f('\\a'), ('', '\\', 'a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
140 self.assertEqual(f('\\a\\b'), ('', '\\', 'a\\b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
141 self.assertEqual(f('c:a\\b'), ('c:', '', 'a\\b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
142 self.assertEqual(f('c:\\a\\b'), ('c:', '\\', 'a\\b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
143 # Redundant slashes in the root are collapsed
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
144 self.assertEqual(f('\\\\a'), ('', '\\', 'a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
145 self.assertEqual(f('\\\\\\a/b'), ('', '\\', 'a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
146 self.assertEqual(f('c:\\\\a'), ('c:', '\\', 'a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
147 self.assertEqual(f('c:\\\\\\a/b'), ('c:', '\\', 'a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
148 # Valid UNC paths
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
149 self.assertEqual(f('\\\\a\\b'), ('\\\\a\\b', '\\', ''))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
150 self.assertEqual(f('\\\\a\\b\\'), ('\\\\a\\b', '\\', ''))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
151 self.assertEqual(f('\\\\a\\b\\c\\d'), ('\\\\a\\b', '\\', 'c\\d'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
152 # These are non-UNC paths (according to ntpath.py and test_ntpath)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
153 # However, command.com says such paths are invalid, so it's
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
154 # difficult to know what the right semantics are
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
155 self.assertEqual(f('\\\\\\a\\b'), ('', '\\', 'a\\b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
156 self.assertEqual(f('\\\\a'), ('', '\\', 'a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
157
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
158
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
159 #
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
160 # Tests for the pure classes
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
161 #
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
162
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
163 class _BasePurePathTest(object):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
164
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
165 # keys are canonical paths, values are list of tuples of arguments
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
166 # supposed to produce equal paths
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
167 equivalences = {
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
168 'a/b': [
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
169 ('a', 'b'), ('a/', 'b'), ('a', 'b/'), ('a/', 'b/'),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
170 ('a/b/',), ('a//b',), ('a//b//',),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
171 # empty components get removed
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
172 ('', 'a', 'b'), ('a', '', 'b'), ('a', 'b', ''),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
173 ],
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
174 '/b/c/d': [
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
175 ('a', '/b/c', 'd'), ('a', '///b//c', 'd/'),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
176 ('/a', '/b/c', 'd'),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
177 # empty components get removed
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
178 ('/', 'b', '', 'c/d'), ('/', '', 'b/c/d'), ('', '/b/c/d'),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
179 ],
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
180 }
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
181
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
182 def setUp(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
183 p = self.cls('a')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
184 self.flavour = p._flavour
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
185 self.sep = self.flavour.sep
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
186 self.altsep = self.flavour.altsep
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
187
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
188 def test_constructor_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
189 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
190 p = P('a')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
191 self.assertIsInstance(p, P)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
192 P('a', 'b', 'c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
193 P('/a', 'b', 'c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
194 P('a/b/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
195 P('/a/b/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
196 self.assertEqual(P(P('a')), P('a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
197 self.assertEqual(P(P('a'), 'b'), P('a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
198 self.assertEqual(P(P('a'), P('b')), P('a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
199
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
200 def test_join_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
201 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
202 p = P('a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
203 pp = p.joinpath('c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
204 self.assertEqual(pp, P('a/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
205 self.assertIs(type(pp), type(p))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
206 pp = p.joinpath('c', 'd')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
207 self.assertEqual(pp, P('a/b/c/d'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
208 pp = p.joinpath(P('c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
209 self.assertEqual(pp, P('a/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
210 pp = p.joinpath('/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
211 self.assertEqual(pp, P('/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
212
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
213 def test_div_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
214 # Basically the same as joinpath()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
215 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
216 p = P('a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
217 pp = p / 'c'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
218 self.assertEqual(pp, P('a/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
219 self.assertIs(type(pp), type(p))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
220 pp = p / 'c/d'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
221 self.assertEqual(pp, P('a/b/c/d'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
222 pp = p / 'c' / 'd'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
223 self.assertEqual(pp, P('a/b/c/d'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
224 pp = 'c' / p / 'd'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
225 self.assertEqual(pp, P('c/a/b/d'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
226 pp = p / P('c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
227 self.assertEqual(pp, P('a/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
228 pp = p/ '/c'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
229 self.assertEqual(pp, P('/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
230
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
231 def _check_str(self, expected, args):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
232 p = self.cls(*args)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
233 self.assertEqual(str(p), expected.replace('/', self.sep))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
234
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
235 def test_str_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
236 # Canonicalized paths roundtrip
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
237 for pathstr in ('a', 'a/b', 'a/b/c', '/', '/a/b', '/a/b/c'):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
238 self._check_str(pathstr, (pathstr,))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
239 # Special case for the empty path
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
240 self._check_str('.', ('',))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
241 # Other tests for str() are in test_equivalences()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
242
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
243 def test_as_posix_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
244 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
245 for pathstr in ('a', 'a/b', 'a/b/c', '/', '/a/b', '/a/b/c'):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
246 self.assertEqual(P(pathstr).as_posix(), pathstr)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
247 # Other tests for as_posix() are in test_equivalences()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
248
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
249 def test_as_bytes_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
250 sep = os.fsencode(self.sep)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
251 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
252 self.assertEqual(bytes(P('a/b')), b'a' + sep + b'b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
253
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
254 def test_as_uri_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
255 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
256 with self.assertRaises(ValueError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
257 P('a').as_uri()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
258 with self.assertRaises(ValueError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
259 P().as_uri()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
260
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
261 def test_repr_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
262 for pathstr in ('a', 'a/b', 'a/b/c', '/', '/a/b', '/a/b/c'):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
263 p = self.cls(pathstr)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
264 clsname = p.__class__.__name__
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
265 r = repr(p)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
266 # The repr() is in the form ClassName("forward-slashes path")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
267 self.assertTrue(r.startswith(clsname + '('), r)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
268 self.assertTrue(r.endswith(')'), r)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
269 inner = r[len(clsname) + 1 : -1]
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
270 self.assertEqual(eval(inner), p.as_posix())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
271 # The repr() roundtrips
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
272 q = eval(r, pathlib.__dict__)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
273 self.assertIs(q.__class__, p.__class__)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
274 self.assertEqual(q, p)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
275 self.assertEqual(repr(q), r)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
276
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
277 def test_eq_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
278 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
279 self.assertEqual(P('a/b'), P('a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
280 self.assertEqual(P('a/b'), P('a', 'b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
281 self.assertNotEqual(P('a/b'), P('a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
282 self.assertNotEqual(P('a/b'), P('/a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
283 self.assertNotEqual(P('a/b'), P())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
284 self.assertNotEqual(P('/a/b'), P('/'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
285 self.assertNotEqual(P(), P('/'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
286 self.assertNotEqual(P(), "")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
287 self.assertNotEqual(P(), {})
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
288 self.assertNotEqual(P(), int)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
289
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
290 def test_match_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
291 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
292 self.assertRaises(ValueError, P('a').match, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
293 self.assertRaises(ValueError, P('a').match, '.')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
294 # Simple relative pattern
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
295 self.assertTrue(P('b.py').match('b.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
296 self.assertTrue(P('a/b.py').match('b.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
297 self.assertTrue(P('/a/b.py').match('b.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
298 self.assertFalse(P('a.py').match('b.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
299 self.assertFalse(P('b/py').match('b.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
300 self.assertFalse(P('/a.py').match('b.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
301 self.assertFalse(P('b.py/c').match('b.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
302 # Wilcard relative pattern
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
303 self.assertTrue(P('b.py').match('*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
304 self.assertTrue(P('a/b.py').match('*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
305 self.assertTrue(P('/a/b.py').match('*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
306 self.assertFalse(P('b.pyc').match('*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
307 self.assertFalse(P('b./py').match('*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
308 self.assertFalse(P('b.py/c').match('*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
309 # Multi-part relative pattern
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
310 self.assertTrue(P('ab/c.py').match('a*/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
311 self.assertTrue(P('/d/ab/c.py').match('a*/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
312 self.assertFalse(P('a.py').match('a*/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
313 self.assertFalse(P('/dab/c.py').match('a*/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
314 self.assertFalse(P('ab/c.py/d').match('a*/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
315 # Absolute pattern
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
316 self.assertTrue(P('/b.py').match('/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
317 self.assertFalse(P('b.py').match('/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
318 self.assertFalse(P('a/b.py').match('/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
319 self.assertFalse(P('/a/b.py').match('/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
320 # Multi-part absolute pattern
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
321 self.assertTrue(P('/a/b.py').match('/a/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
322 self.assertFalse(P('/ab.py').match('/a/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
323 self.assertFalse(P('/a/b/c.py').match('/a/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
324
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
325 def test_ordering_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
326 # Ordering is tuple-alike
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
327 def assertLess(a, b):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
328 self.assertLess(a, b)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
329 self.assertGreater(b, a)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
330 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
331 a = P('a')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
332 b = P('a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
333 c = P('abc')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
334 d = P('b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
335 assertLess(a, b)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
336 assertLess(a, c)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
337 assertLess(a, d)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
338 assertLess(b, c)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
339 assertLess(c, d)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
340 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
341 a = P('/a')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
342 b = P('/a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
343 c = P('/abc')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
344 d = P('/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
345 assertLess(a, b)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
346 assertLess(a, c)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
347 assertLess(a, d)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
348 assertLess(b, c)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
349 assertLess(c, d)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
350 with self.assertRaises(TypeError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
351 P() < {}
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
352
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
353 def test_parts_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
354 # `parts` returns a tuple
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
355 sep = self.sep
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
356 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
357 p = P('a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
358 parts = p.parts
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
359 self.assertEqual(parts, ('a', 'b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
360 # The object gets reused
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
361 self.assertIs(parts, p.parts)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
362 # When the path is absolute, the anchor is a separate part
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
363 p = P('/a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
364 parts = p.parts
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
365 self.assertEqual(parts, (sep, 'a', 'b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
366
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
367 def test_equivalences(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
368 for k, tuples in self.equivalences.items():
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
369 canon = k.replace('/', self.sep)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
370 posix = k.replace(self.sep, '/')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
371 if canon != posix:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
372 tuples = tuples + [
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
373 tuple(part.replace('/', self.sep) for part in t)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
374 for t in tuples
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
375 ]
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
376 tuples.append((posix, ))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
377 pcanon = self.cls(canon)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
378 for t in tuples:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
379 p = self.cls(*t)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
380 self.assertEqual(p, pcanon, "failed with args {}".format(t))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
381 self.assertEqual(hash(p), hash(pcanon))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
382 self.assertEqual(str(p), canon)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
383 self.assertEqual(p.as_posix(), posix)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
384
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
385 def test_parent_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
386 # Relative
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
387 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
388 p = P('a/b/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
389 self.assertEqual(p.parent, P('a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
390 self.assertEqual(p.parent.parent, P('a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
391 self.assertEqual(p.parent.parent.parent, P())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
392 self.assertEqual(p.parent.parent.parent.parent, P())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
393 # Anchored
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
394 p = P('/a/b/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
395 self.assertEqual(p.parent, P('/a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
396 self.assertEqual(p.parent.parent, P('/a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
397 self.assertEqual(p.parent.parent.parent, P('/'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
398 self.assertEqual(p.parent.parent.parent.parent, P('/'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
399
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
400 def test_parents_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
401 # Relative
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
402 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
403 p = P('a/b/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
404 par = p.parents
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
405 self.assertEqual(len(par), 3)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
406 self.assertEqual(par[0], P('a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
407 self.assertEqual(par[1], P('a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
408 self.assertEqual(par[2], P('.'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
409 self.assertEqual(list(par), [P('a/b'), P('a'), P('.')])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
410 with self.assertRaises(IndexError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
411 par[-1]
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
412 with self.assertRaises(IndexError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
413 par[3]
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
414 with self.assertRaises(TypeError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
415 par[0] = p
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
416 # Anchored
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
417 p = P('/a/b/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
418 par = p.parents
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
419 self.assertEqual(len(par), 3)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
420 self.assertEqual(par[0], P('/a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
421 self.assertEqual(par[1], P('/a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
422 self.assertEqual(par[2], P('/'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
423 self.assertEqual(list(par), [P('/a/b'), P('/a'), P('/')])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
424 with self.assertRaises(IndexError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
425 par[3]
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
426
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
427 def test_drive_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
428 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
429 self.assertEqual(P('a/b').drive, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
430 self.assertEqual(P('/a/b').drive, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
431 self.assertEqual(P('').drive, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
432
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
433 def test_root_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
434 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
435 sep = self.sep
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
436 self.assertEqual(P('').root, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
437 self.assertEqual(P('a/b').root, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
438 self.assertEqual(P('/').root, sep)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
439 self.assertEqual(P('/a/b').root, sep)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
440
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
441 def test_anchor_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
442 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
443 sep = self.sep
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
444 self.assertEqual(P('').anchor, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
445 self.assertEqual(P('a/b').anchor, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
446 self.assertEqual(P('/').anchor, sep)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
447 self.assertEqual(P('/a/b').anchor, sep)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
448
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
449 def test_name_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
450 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
451 self.assertEqual(P('').name, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
452 self.assertEqual(P('.').name, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
453 self.assertEqual(P('/').name, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
454 self.assertEqual(P('a/b').name, 'b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
455 self.assertEqual(P('/a/b').name, 'b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
456 self.assertEqual(P('/a/b/.').name, 'b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
457 self.assertEqual(P('a/b.py').name, 'b.py')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
458 self.assertEqual(P('/a/b.py').name, 'b.py')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
459
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
460 def test_suffix_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
461 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
462 self.assertEqual(P('').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
463 self.assertEqual(P('.').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
464 self.assertEqual(P('..').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
465 self.assertEqual(P('/').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
466 self.assertEqual(P('a/b').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
467 self.assertEqual(P('/a/b').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
468 self.assertEqual(P('/a/b/.').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
469 self.assertEqual(P('a/b.py').suffix, '.py')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
470 self.assertEqual(P('/a/b.py').suffix, '.py')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
471 self.assertEqual(P('a/.hgrc').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
472 self.assertEqual(P('/a/.hgrc').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
473 self.assertEqual(P('a/.hg.rc').suffix, '.rc')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
474 self.assertEqual(P('/a/.hg.rc').suffix, '.rc')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
475 self.assertEqual(P('a/b.tar.gz').suffix, '.gz')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
476 self.assertEqual(P('/a/b.tar.gz').suffix, '.gz')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
477 self.assertEqual(P('a/Some name. Ending with a dot.').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
478 self.assertEqual(P('/a/Some name. Ending with a dot.').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
479
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
480 def test_suffixes_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
481 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
482 self.assertEqual(P('').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
483 self.assertEqual(P('.').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
484 self.assertEqual(P('/').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
485 self.assertEqual(P('a/b').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
486 self.assertEqual(P('/a/b').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
487 self.assertEqual(P('/a/b/.').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
488 self.assertEqual(P('a/b.py').suffixes, ['.py'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
489 self.assertEqual(P('/a/b.py').suffixes, ['.py'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
490 self.assertEqual(P('a/.hgrc').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
491 self.assertEqual(P('/a/.hgrc').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
492 self.assertEqual(P('a/.hg.rc').suffixes, ['.rc'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
493 self.assertEqual(P('/a/.hg.rc').suffixes, ['.rc'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
494 self.assertEqual(P('a/b.tar.gz').suffixes, ['.tar', '.gz'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
495 self.assertEqual(P('/a/b.tar.gz').suffixes, ['.tar', '.gz'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
496 self.assertEqual(P('a/Some name. Ending with a dot.').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
497 self.assertEqual(P('/a/Some name. Ending with a dot.').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
498
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
499 def test_stem_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
500 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
501 self.assertEqual(P('').stem, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
502 self.assertEqual(P('.').stem, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
503 self.assertEqual(P('..').stem, '..')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
504 self.assertEqual(P('/').stem, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
505 self.assertEqual(P('a/b').stem, 'b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
506 self.assertEqual(P('a/b.py').stem, 'b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
507 self.assertEqual(P('a/.hgrc').stem, '.hgrc')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
508 self.assertEqual(P('a/.hg.rc').stem, '.hg')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
509 self.assertEqual(P('a/b.tar.gz').stem, 'b.tar')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
510 self.assertEqual(P('a/Some name. Ending with a dot.').stem,
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
511 'Some name. Ending with a dot.')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
512
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
513 def test_with_name_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
514 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
515 self.assertEqual(P('a/b').with_name('d.xml'), P('a/d.xml'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
516 self.assertEqual(P('/a/b').with_name('d.xml'), P('/a/d.xml'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
517 self.assertEqual(P('a/b.py').with_name('d.xml'), P('a/d.xml'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
518 self.assertEqual(P('/a/b.py').with_name('d.xml'), P('/a/d.xml'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
519 self.assertEqual(P('a/Dot ending.').with_name('d.xml'), P('a/d.xml'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
520 self.assertEqual(P('/a/Dot ending.').with_name('d.xml'), P('/a/d.xml'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
521 self.assertRaises(ValueError, P('').with_name, 'd.xml')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
522 self.assertRaises(ValueError, P('.').with_name, 'd.xml')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
523 self.assertRaises(ValueError, P('/').with_name, 'd.xml')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
524
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
525 def test_with_suffix_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
526 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
527 self.assertEqual(P('a/b').with_suffix('.gz'), P('a/b.gz'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
528 self.assertEqual(P('/a/b').with_suffix('.gz'), P('/a/b.gz'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
529 self.assertEqual(P('a/b.py').with_suffix('.gz'), P('a/b.gz'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
530 self.assertEqual(P('/a/b.py').with_suffix('.gz'), P('/a/b.gz'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
531 self.assertRaises(ValueError, P('').with_suffix, '.gz')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
532 self.assertRaises(ValueError, P('.').with_suffix, '.gz')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
533 self.assertRaises(ValueError, P('/').with_suffix, '.gz')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
534
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
535 def test_relative_to_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
536 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
537 p = P('a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
538 self.assertRaises(TypeError, p.relative_to)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
539 self.assertEqual(p.relative_to(P()), P('a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
540 self.assertEqual(p.relative_to(P('a')), P('b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
541 self.assertEqual(p.relative_to(P('a/b')), P())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
542 # With several args
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
543 self.assertEqual(p.relative_to('a', 'b'), P())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
544 # Unrelated paths
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
545 self.assertRaises(ValueError, p.relative_to, P('c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
546 self.assertRaises(ValueError, p.relative_to, P('a/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
547 self.assertRaises(ValueError, p.relative_to, P('a/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
548 self.assertRaises(ValueError, p.relative_to, P('/a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
549 p = P('/a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
550 self.assertEqual(p.relative_to(P('/')), P('a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
551 self.assertEqual(p.relative_to(P('/a')), P('b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
552 self.assertEqual(p.relative_to(P('/a/b')), P())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
553 # Unrelated paths
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
554 self.assertRaises(ValueError, p.relative_to, P('/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
555 self.assertRaises(ValueError, p.relative_to, P('/a/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
556 self.assertRaises(ValueError, p.relative_to, P('/a/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
557 self.assertRaises(ValueError, p.relative_to, P())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
558 self.assertRaises(ValueError, p.relative_to, P('a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
559
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
560 def test_pickling_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
561 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
562 p = P('/a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
563 for proto in range(0, pickle.HIGHEST_PROTOCOL + 1):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
564 dumped = pickle.dumps(p, proto)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
565 pp = pickle.loads(dumped)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
566 self.assertIs(pp.__class__, p.__class__)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
567 self.assertEqual(pp, p)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
568 self.assertEqual(hash(pp), hash(p))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
569 self.assertEqual(str(pp), str(p))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
570
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
571
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
572 class PurePosixPathTest(_BasePurePathTest, unittest.TestCase):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
573 cls = pathlib.PurePosixPath
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
574
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
575 def test_root(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
576 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
577 self.assertEqual(P('/a/b').root, '/')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
578 self.assertEqual(P('///a/b').root, '/')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
579 # POSIX special case for two leading slashes
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
580 self.assertEqual(P('//a/b').root, '//')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
581
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
582 def test_eq(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
583 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
584 self.assertNotEqual(P('a/b'), P('A/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
585 self.assertEqual(P('/a'), P('///a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
586 self.assertNotEqual(P('/a'), P('//a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
587
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
588 def test_as_uri(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
589 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
590 self.assertEqual(P('/').as_uri(), 'file:///')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
591 self.assertEqual(P('/a/b.c').as_uri(), 'file:///a/b.c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
592 self.assertEqual(P('/a/b%#c').as_uri(), 'file:///a/b%25%23c')
87350
88b634b67e4d Fix test failure under systems with an incompatible locale
Antoine Pitrou <solipsis@pitrou.net>
parents: 87348
diff changeset
593
88b634b67e4d Fix test failure under systems with an incompatible locale
Antoine Pitrou <solipsis@pitrou.net>
parents: 87348
diff changeset
594 def test_as_uri_non_ascii(self):
88b634b67e4d Fix test failure under systems with an incompatible locale
Antoine Pitrou <solipsis@pitrou.net>
parents: 87348
diff changeset
595 from urllib.parse import quote_from_bytes
88b634b67e4d Fix test failure under systems with an incompatible locale
Antoine Pitrou <solipsis@pitrou.net>
parents: 87348
diff changeset
596 P = self.cls
88b634b67e4d Fix test failure under systems with an incompatible locale
Antoine Pitrou <solipsis@pitrou.net>
parents: 87348
diff changeset
597 try:
88b634b67e4d Fix test failure under systems with an incompatible locale
Antoine Pitrou <solipsis@pitrou.net>
parents: 87348
diff changeset
598 os.fsencode('\xe9')
88b634b67e4d Fix test failure under systems with an incompatible locale
Antoine Pitrou <solipsis@pitrou.net>
parents: 87348
diff changeset
599 except UnicodeEncodeError:
88b634b67e4d Fix test failure under systems with an incompatible locale
Antoine Pitrou <solipsis@pitrou.net>
parents: 87348
diff changeset
600 self.skipTest("\\xe9 cannot be encoded to the filesystem encoding")
87348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
601 self.assertEqual(P('/a/b\xe9').as_uri(),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
602 'file:///a/b' + quote_from_bytes(os.fsencode('\xe9')))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
603
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
604 def test_match(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
605 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
606 self.assertFalse(P('A.py').match('a.PY'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
607
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
608 def test_is_absolute(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
609 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
610 self.assertFalse(P().is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
611 self.assertFalse(P('a').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
612 self.assertFalse(P('a/b/').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
613 self.assertTrue(P('/').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
614 self.assertTrue(P('/a').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
615 self.assertTrue(P('/a/b/').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
616 self.assertTrue(P('//a').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
617 self.assertTrue(P('//a/b').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
618
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
619 def test_is_reserved(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
620 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
621 self.assertIs(False, P('').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
622 self.assertIs(False, P('/').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
623 self.assertIs(False, P('/foo/bar').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
624 self.assertIs(False, P('/dev/con/PRN/NUL').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
625
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
626 def test_join(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
627 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
628 p = P('//a')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
629 pp = p.joinpath('b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
630 self.assertEqual(pp, P('//a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
631 pp = P('/a').joinpath('//c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
632 self.assertEqual(pp, P('//c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
633 pp = P('//a').joinpath('/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
634 self.assertEqual(pp, P('/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
635
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
636 def test_div(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
637 # Basically the same as joinpath()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
638 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
639 p = P('//a')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
640 pp = p / 'b'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
641 self.assertEqual(pp, P('//a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
642 pp = P('/a') / '//c'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
643 self.assertEqual(pp, P('//c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
644 pp = P('//a') / '/c'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
645 self.assertEqual(pp, P('/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
646
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
647
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
648 class PureWindowsPathTest(_BasePurePathTest, unittest.TestCase):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
649 cls = pathlib.PureWindowsPath
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
650
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
651 equivalences = _BasePurePathTest.equivalences.copy()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
652 equivalences.update({
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
653 'c:a': [ ('c:', 'a'), ('c:', 'a/'), ('/', 'c:', 'a') ],
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
654 'c:/a': [
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
655 ('c:/', 'a'), ('c:', '/', 'a'), ('c:', '/a'),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
656 ('/z', 'c:/', 'a'), ('//x/y', 'c:/', 'a'),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
657 ],
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
658 '//a/b/': [ ('//a/b',) ],
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
659 '//a/b/c': [
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
660 ('//a/b', 'c'), ('//a/b/', 'c'),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
661 ],
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
662 })
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
663
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
664 def test_str(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
665 p = self.cls('a/b/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
666 self.assertEqual(str(p), 'a\\b\\c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
667 p = self.cls('c:/a/b/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
668 self.assertEqual(str(p), 'c:\\a\\b\\c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
669 p = self.cls('//a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
670 self.assertEqual(str(p), '\\\\a\\b\\')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
671 p = self.cls('//a/b/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
672 self.assertEqual(str(p), '\\\\a\\b\\c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
673 p = self.cls('//a/b/c/d')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
674 self.assertEqual(str(p), '\\\\a\\b\\c\\d')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
675
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
676 def test_eq(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
677 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
678 self.assertEqual(P('c:a/b'), P('c:a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
679 self.assertEqual(P('c:a/b'), P('c:', 'a', 'b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
680 self.assertNotEqual(P('c:a/b'), P('d:a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
681 self.assertNotEqual(P('c:a/b'), P('c:/a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
682 self.assertNotEqual(P('/a/b'), P('c:/a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
683 # Case-insensitivity
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
684 self.assertEqual(P('a/B'), P('A/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
685 self.assertEqual(P('C:a/B'), P('c:A/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
686 self.assertEqual(P('//Some/SHARE/a/B'), P('//somE/share/A/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
687
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
688 def test_as_uri(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
689 from urllib.parse import quote_from_bytes
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
690 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
691 with self.assertRaises(ValueError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
692 P('/a/b').as_uri()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
693 with self.assertRaises(ValueError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
694 P('c:a/b').as_uri()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
695 self.assertEqual(P('c:/').as_uri(), 'file:///c:/')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
696 self.assertEqual(P('c:/a/b.c').as_uri(), 'file:///c:/a/b.c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
697 self.assertEqual(P('c:/a/b%#c').as_uri(), 'file:///c:/a/b%25%23c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
698 self.assertEqual(P('c:/a/b\xe9').as_uri(), 'file:///c:/a/b%C3%A9')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
699 self.assertEqual(P('//some/share/').as_uri(), 'file://some/share/')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
700 self.assertEqual(P('//some/share/a/b.c').as_uri(),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
701 'file://some/share/a/b.c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
702 self.assertEqual(P('//some/share/a/b%#c\xe9').as_uri(),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
703 'file://some/share/a/b%25%23c%C3%A9')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
704
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
705 def test_match_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
706 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
707 # Absolute patterns
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
708 self.assertTrue(P('c:/b.py').match('/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
709 self.assertTrue(P('c:/b.py').match('c:*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
710 self.assertTrue(P('c:/b.py').match('c:/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
711 self.assertFalse(P('d:/b.py').match('c:/*.py')) # wrong drive
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
712 self.assertFalse(P('b.py').match('/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
713 self.assertFalse(P('b.py').match('c:*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
714 self.assertFalse(P('b.py').match('c:/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
715 self.assertFalse(P('c:b.py').match('/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
716 self.assertFalse(P('c:b.py').match('c:/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
717 self.assertFalse(P('/b.py').match('c:*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
718 self.assertFalse(P('/b.py').match('c:/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
719 # UNC patterns
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
720 self.assertTrue(P('//some/share/a.py').match('/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
721 self.assertTrue(P('//some/share/a.py').match('//some/share/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
722 self.assertFalse(P('//other/share/a.py').match('//some/share/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
723 self.assertFalse(P('//some/share/a/b.py').match('//some/share/*.py'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
724 # Case-insensitivity
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
725 self.assertTrue(P('B.py').match('b.PY'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
726 self.assertTrue(P('c:/a/B.Py').match('C:/A/*.pY'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
727 self.assertTrue(P('//Some/Share/B.Py').match('//somE/sharE/*.pY'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
728
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
729 def test_ordering_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
730 # Case-insensitivity
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
731 def assertOrderedEqual(a, b):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
732 self.assertLessEqual(a, b)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
733 self.assertGreaterEqual(b, a)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
734 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
735 p = P('c:A/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
736 q = P('C:a/B')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
737 assertOrderedEqual(p, q)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
738 self.assertFalse(p < q)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
739 self.assertFalse(p > q)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
740 p = P('//some/Share/A/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
741 q = P('//Some/SHARE/a/B')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
742 assertOrderedEqual(p, q)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
743 self.assertFalse(p < q)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
744 self.assertFalse(p > q)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
745
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
746 def test_parts(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
747 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
748 p = P('c:a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
749 parts = p.parts
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
750 self.assertEqual(parts, ('c:', 'a', 'b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
751 p = P('c:/a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
752 parts = p.parts
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
753 self.assertEqual(parts, ('c:\\', 'a', 'b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
754 p = P('//a/b/c/d')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
755 parts = p.parts
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
756 self.assertEqual(parts, ('\\\\a\\b\\', 'c', 'd'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
757
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
758 def test_parent(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
759 # Anchored
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
760 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
761 p = P('z:a/b/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
762 self.assertEqual(p.parent, P('z:a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
763 self.assertEqual(p.parent.parent, P('z:a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
764 self.assertEqual(p.parent.parent.parent, P('z:'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
765 self.assertEqual(p.parent.parent.parent.parent, P('z:'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
766 p = P('z:/a/b/c')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
767 self.assertEqual(p.parent, P('z:/a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
768 self.assertEqual(p.parent.parent, P('z:/a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
769 self.assertEqual(p.parent.parent.parent, P('z:/'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
770 self.assertEqual(p.parent.parent.parent.parent, P('z:/'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
771 p = P('//a/b/c/d')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
772 self.assertEqual(p.parent, P('//a/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
773 self.assertEqual(p.parent.parent, P('//a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
774 self.assertEqual(p.parent.parent.parent, P('//a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
775
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
776 def test_parents(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
777 # Anchored
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
778 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
779 p = P('z:a/b/')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
780 par = p.parents
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
781 self.assertEqual(len(par), 2)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
782 self.assertEqual(par[0], P('z:a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
783 self.assertEqual(par[1], P('z:'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
784 self.assertEqual(list(par), [P('z:a'), P('z:')])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
785 with self.assertRaises(IndexError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
786 par[2]
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
787 p = P('z:/a/b/')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
788 par = p.parents
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
789 self.assertEqual(len(par), 2)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
790 self.assertEqual(par[0], P('z:/a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
791 self.assertEqual(par[1], P('z:/'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
792 self.assertEqual(list(par), [P('z:/a'), P('z:/')])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
793 with self.assertRaises(IndexError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
794 par[2]
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
795 p = P('//a/b/c/d')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
796 par = p.parents
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
797 self.assertEqual(len(par), 2)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
798 self.assertEqual(par[0], P('//a/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
799 self.assertEqual(par[1], P('//a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
800 self.assertEqual(list(par), [P('//a/b/c'), P('//a/b')])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
801 with self.assertRaises(IndexError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
802 par[2]
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
803
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
804 def test_drive(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
805 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
806 self.assertEqual(P('c:').drive, 'c:')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
807 self.assertEqual(P('c:a/b').drive, 'c:')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
808 self.assertEqual(P('c:/').drive, 'c:')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
809 self.assertEqual(P('c:/a/b/').drive, 'c:')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
810 self.assertEqual(P('//a/b').drive, '\\\\a\\b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
811 self.assertEqual(P('//a/b/').drive, '\\\\a\\b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
812 self.assertEqual(P('//a/b/c/d').drive, '\\\\a\\b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
813
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
814 def test_root(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
815 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
816 self.assertEqual(P('c:').root, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
817 self.assertEqual(P('c:a/b').root, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
818 self.assertEqual(P('c:/').root, '\\')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
819 self.assertEqual(P('c:/a/b/').root, '\\')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
820 self.assertEqual(P('//a/b').root, '\\')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
821 self.assertEqual(P('//a/b/').root, '\\')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
822 self.assertEqual(P('//a/b/c/d').root, '\\')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
823
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
824 def test_anchor(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
825 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
826 self.assertEqual(P('c:').anchor, 'c:')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
827 self.assertEqual(P('c:a/b').anchor, 'c:')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
828 self.assertEqual(P('c:/').anchor, 'c:\\')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
829 self.assertEqual(P('c:/a/b/').anchor, 'c:\\')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
830 self.assertEqual(P('//a/b').anchor, '\\\\a\\b\\')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
831 self.assertEqual(P('//a/b/').anchor, '\\\\a\\b\\')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
832 self.assertEqual(P('//a/b/c/d').anchor, '\\\\a\\b\\')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
833
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
834 def test_name(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
835 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
836 self.assertEqual(P('c:').name, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
837 self.assertEqual(P('c:/').name, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
838 self.assertEqual(P('c:a/b').name, 'b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
839 self.assertEqual(P('c:/a/b').name, 'b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
840 self.assertEqual(P('c:a/b.py').name, 'b.py')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
841 self.assertEqual(P('c:/a/b.py').name, 'b.py')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
842 self.assertEqual(P('//My.py/Share.php').name, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
843 self.assertEqual(P('//My.py/Share.php/a/b').name, 'b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
844
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
845 def test_suffix(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
846 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
847 self.assertEqual(P('c:').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
848 self.assertEqual(P('c:/').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
849 self.assertEqual(P('c:a/b').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
850 self.assertEqual(P('c:/a/b').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
851 self.assertEqual(P('c:a/b.py').suffix, '.py')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
852 self.assertEqual(P('c:/a/b.py').suffix, '.py')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
853 self.assertEqual(P('c:a/.hgrc').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
854 self.assertEqual(P('c:/a/.hgrc').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
855 self.assertEqual(P('c:a/.hg.rc').suffix, '.rc')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
856 self.assertEqual(P('c:/a/.hg.rc').suffix, '.rc')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
857 self.assertEqual(P('c:a/b.tar.gz').suffix, '.gz')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
858 self.assertEqual(P('c:/a/b.tar.gz').suffix, '.gz')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
859 self.assertEqual(P('c:a/Some name. Ending with a dot.').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
860 self.assertEqual(P('c:/a/Some name. Ending with a dot.').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
861 self.assertEqual(P('//My.py/Share.php').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
862 self.assertEqual(P('//My.py/Share.php/a/b').suffix, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
863
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
864 def test_suffixes(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
865 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
866 self.assertEqual(P('c:').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
867 self.assertEqual(P('c:/').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
868 self.assertEqual(P('c:a/b').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
869 self.assertEqual(P('c:/a/b').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
870 self.assertEqual(P('c:a/b.py').suffixes, ['.py'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
871 self.assertEqual(P('c:/a/b.py').suffixes, ['.py'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
872 self.assertEqual(P('c:a/.hgrc').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
873 self.assertEqual(P('c:/a/.hgrc').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
874 self.assertEqual(P('c:a/.hg.rc').suffixes, ['.rc'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
875 self.assertEqual(P('c:/a/.hg.rc').suffixes, ['.rc'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
876 self.assertEqual(P('c:a/b.tar.gz').suffixes, ['.tar', '.gz'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
877 self.assertEqual(P('c:/a/b.tar.gz').suffixes, ['.tar', '.gz'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
878 self.assertEqual(P('//My.py/Share.php').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
879 self.assertEqual(P('//My.py/Share.php/a/b').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
880 self.assertEqual(P('c:a/Some name. Ending with a dot.').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
881 self.assertEqual(P('c:/a/Some name. Ending with a dot.').suffixes, [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
882
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
883 def test_stem(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
884 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
885 self.assertEqual(P('c:').stem, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
886 self.assertEqual(P('c:.').stem, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
887 self.assertEqual(P('c:..').stem, '..')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
888 self.assertEqual(P('c:/').stem, '')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
889 self.assertEqual(P('c:a/b').stem, 'b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
890 self.assertEqual(P('c:a/b.py').stem, 'b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
891 self.assertEqual(P('c:a/.hgrc').stem, '.hgrc')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
892 self.assertEqual(P('c:a/.hg.rc').stem, '.hg')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
893 self.assertEqual(P('c:a/b.tar.gz').stem, 'b.tar')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
894 self.assertEqual(P('c:a/Some name. Ending with a dot.').stem,
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
895 'Some name. Ending with a dot.')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
896
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
897 def test_with_name(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
898 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
899 self.assertEqual(P('c:a/b').with_name('d.xml'), P('c:a/d.xml'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
900 self.assertEqual(P('c:/a/b').with_name('d.xml'), P('c:/a/d.xml'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
901 self.assertEqual(P('c:a/Dot ending.').with_name('d.xml'), P('c:a/d.xml'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
902 self.assertEqual(P('c:/a/Dot ending.').with_name('d.xml'), P('c:/a/d.xml'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
903 self.assertRaises(ValueError, P('c:').with_name, 'd.xml')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
904 self.assertRaises(ValueError, P('c:/').with_name, 'd.xml')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
905 self.assertRaises(ValueError, P('//My/Share').with_name, 'd.xml')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
906
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
907 def test_with_suffix(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
908 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
909 self.assertEqual(P('c:a/b').with_suffix('.gz'), P('c:a/b.gz'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
910 self.assertEqual(P('c:/a/b').with_suffix('.gz'), P('c:/a/b.gz'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
911 self.assertEqual(P('c:a/b.py').with_suffix('.gz'), P('c:a/b.gz'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
912 self.assertEqual(P('c:/a/b.py').with_suffix('.gz'), P('c:/a/b.gz'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
913 self.assertRaises(ValueError, P('').with_suffix, '.gz')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
914 self.assertRaises(ValueError, P('.').with_suffix, '.gz')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
915 self.assertRaises(ValueError, P('/').with_suffix, '.gz')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
916 self.assertRaises(ValueError, P('//My/Share').with_suffix, '.gz')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
917
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
918 def test_relative_to(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
919 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
920 p = P('c:a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
921 self.assertEqual(p.relative_to(P('c:')), P('a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
922 self.assertEqual(p.relative_to(P('c:a')), P('b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
923 self.assertEqual(p.relative_to(P('c:a/b')), P())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
924 # Unrelated paths
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
925 self.assertRaises(ValueError, p.relative_to, P())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
926 self.assertRaises(ValueError, p.relative_to, P('d:'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
927 self.assertRaises(ValueError, p.relative_to, P('a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
928 self.assertRaises(ValueError, p.relative_to, P('/a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
929 self.assertRaises(ValueError, p.relative_to, P('c:a/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
930 self.assertRaises(ValueError, p.relative_to, P('c:a/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
931 self.assertRaises(ValueError, p.relative_to, P('c:/a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
932 p = P('c:/a/b')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
933 self.assertEqual(p.relative_to(P('c:')), P('/a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
934 self.assertEqual(p.relative_to(P('c:/')), P('a/b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
935 self.assertEqual(p.relative_to(P('c:/a')), P('b'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
936 self.assertEqual(p.relative_to(P('c:/a/b')), P())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
937 # Unrelated paths
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
938 self.assertRaises(ValueError, p.relative_to, P('c:/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
939 self.assertRaises(ValueError, p.relative_to, P('c:/a/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
940 self.assertRaises(ValueError, p.relative_to, P('c:/a/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
941 self.assertRaises(ValueError, p.relative_to, P('c:a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
942 self.assertRaises(ValueError, p.relative_to, P('d:'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
943 self.assertRaises(ValueError, p.relative_to, P('d:/'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
944 self.assertRaises(ValueError, p.relative_to, P('/a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
945 self.assertRaises(ValueError, p.relative_to, P('//c/a'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
946 # UNC paths
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
947 p = P('//a/b/c/d')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
948 self.assertEqual(p.relative_to(P('//a/b')), P('c/d'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
949 self.assertEqual(p.relative_to(P('//a/b/c')), P('d'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
950 self.assertEqual(p.relative_to(P('//a/b/c/d')), P())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
951 # Unrelated paths
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
952 self.assertRaises(ValueError, p.relative_to, P('/a/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
953 self.assertRaises(ValueError, p.relative_to, P('c:/a/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
954 self.assertRaises(ValueError, p.relative_to, P('//z/b/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
955 self.assertRaises(ValueError, p.relative_to, P('//a/z/c'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
956
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
957 def test_is_absolute(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
958 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
959 # Under NT, only paths with both a drive and a root are absolute
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
960 self.assertFalse(P().is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
961 self.assertFalse(P('a').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
962 self.assertFalse(P('a/b/').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
963 self.assertFalse(P('/').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
964 self.assertFalse(P('/a').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
965 self.assertFalse(P('/a/b/').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
966 self.assertFalse(P('c:').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
967 self.assertFalse(P('c:a').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
968 self.assertFalse(P('c:a/b/').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
969 self.assertTrue(P('c:/').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
970 self.assertTrue(P('c:/a').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
971 self.assertTrue(P('c:/a/b/').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
972 # UNC paths are absolute by definition
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
973 self.assertTrue(P('//a/b').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
974 self.assertTrue(P('//a/b/').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
975 self.assertTrue(P('//a/b/c').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
976 self.assertTrue(P('//a/b/c/d').is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
977
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
978 def test_is_reserved(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
979 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
980 self.assertIs(False, P('').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
981 self.assertIs(False, P('/').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
982 self.assertIs(False, P('/foo/bar').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
983 self.assertIs(True, P('con').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
984 self.assertIs(True, P('NUL').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
985 self.assertIs(True, P('NUL.txt').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
986 self.assertIs(True, P('com1').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
987 self.assertIs(True, P('com9.bar').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
988 self.assertIs(False, P('bar.com9').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
989 self.assertIs(True, P('lpt1').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
990 self.assertIs(True, P('lpt9.bar').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
991 self.assertIs(False, P('bar.lpt9').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
992 # Only the last component matters
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
993 self.assertIs(False, P('c:/NUL/con/baz').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
994 # UNC paths are never reserved
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
995 self.assertIs(False, P('//my/share/nul/con/aux').is_reserved())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
996
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
997
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
998 class PurePathTest(_BasePurePathTest, unittest.TestCase):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
999 cls = pathlib.PurePath
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1000
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1001 def test_concrete_class(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1002 p = self.cls('a')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1003 self.assertIs(type(p),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1004 pathlib.PureWindowsPath if os.name == 'nt' else pathlib.PurePosixPath)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1005
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1006 def test_different_flavours_unequal(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1007 p = pathlib.PurePosixPath('a')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1008 q = pathlib.PureWindowsPath('a')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1009 self.assertNotEqual(p, q)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1010
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1011 def test_different_flavours_unordered(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1012 p = pathlib.PurePosixPath('a')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1013 q = pathlib.PureWindowsPath('a')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1014 with self.assertRaises(TypeError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1015 p < q
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1016 with self.assertRaises(TypeError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1017 p <= q
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1018 with self.assertRaises(TypeError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1019 p > q
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1020 with self.assertRaises(TypeError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1021 p >= q
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1022
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1023
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1024 #
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1025 # Tests for the concrete classes
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1026 #
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1027
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1028 # Make sure any symbolic links in the base test path are resolved
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1029 BASE = os.path.realpath(TESTFN)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1030 join = lambda *x: os.path.join(BASE, *x)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1031 rel_join = lambda *x: os.path.join(TESTFN, *x)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1032
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1033 def symlink_skip_reason():
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1034 if not pathlib.supports_symlinks:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1035 return "no system support for symlinks"
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1036 try:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1037 os.symlink(__file__, BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1038 except OSError as e:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1039 return str(e)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1040 else:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1041 support.unlink(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1042 return None
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1043
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1044 symlink_skip_reason = symlink_skip_reason()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1045
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1046 only_nt = unittest.skipIf(os.name != 'nt',
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1047 'test requires a Windows-compatible system')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1048 only_posix = unittest.skipIf(os.name == 'nt',
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1049 'test requires a POSIX-compatible system')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1050 with_symlinks = unittest.skipIf(symlink_skip_reason, symlink_skip_reason)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1051
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1052
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1053 @only_posix
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1054 class PosixPathAsPureTest(PurePosixPathTest):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1055 cls = pathlib.PosixPath
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1056
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1057 @only_nt
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1058 class WindowsPathAsPureTest(PureWindowsPathTest):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1059 cls = pathlib.WindowsPath
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1060
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1061
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1062 class _BasePathTest(object):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1063 """Tests for the FS-accessing functionalities of the Path classes."""
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1064
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1065 # (BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1066 # |
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1067 # |-- dirA/
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1068 # |-- linkC -> "../dirB"
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1069 # |-- dirB/
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1070 # | |-- fileB
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1071 # |-- linkD -> "../dirB"
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1072 # |-- dirC/
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1073 # | |-- fileC
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1074 # | |-- fileD
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1075 # |-- fileA
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1076 # |-- linkA -> "fileA"
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1077 # |-- linkB -> "dirB"
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1078 #
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1079
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1080 def setUp(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1081 os.mkdir(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1082 self.addCleanup(shutil.rmtree, BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1083 os.mkdir(join('dirA'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1084 os.mkdir(join('dirB'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1085 os.mkdir(join('dirC'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1086 os.mkdir(join('dirC', 'dirD'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1087 with open(join('fileA'), 'wb') as f:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1088 f.write(b"this is file A\n")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1089 with open(join('dirB', 'fileB'), 'wb') as f:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1090 f.write(b"this is file B\n")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1091 with open(join('dirC', 'fileC'), 'wb') as f:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1092 f.write(b"this is file C\n")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1093 with open(join('dirC', 'dirD', 'fileD'), 'wb') as f:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1094 f.write(b"this is file D\n")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1095 if not symlink_skip_reason:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1096 if os.name == 'nt':
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1097 # Workaround for http://bugs.python.org/issue13772
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1098 def dirlink(src, dest):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1099 os.symlink(src, dest, target_is_directory=True)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1100 else:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1101 def dirlink(src, dest):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1102 os.symlink(src, dest)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1103 # Relative symlinks
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1104 os.symlink('fileA', join('linkA'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1105 os.symlink('non-existing', join('brokenLink'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1106 dirlink('dirB', join('linkB'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1107 dirlink(os.path.join('..', 'dirB'), join('dirA', 'linkC'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1108 # This one goes upwards but doesn't create a loop
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1109 dirlink(os.path.join('..', 'dirB'), join('dirB', 'linkD'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1110
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1111 def assertSame(self, path_a, path_b):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1112 self.assertTrue(os.path.samefile(str(path_a), str(path_b)),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1113 "%r and %r don't point to the same file" %
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1114 (path_a, path_b))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1115
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1116 def assertFileNotFound(self, func, *args, **kwargs):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1117 with self.assertRaises(FileNotFoundError) as cm:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1118 func(*args, **kwargs)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1119 self.assertEqual(cm.exception.errno, errno.ENOENT)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1120
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1121 def _test_cwd(self, p):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1122 q = self.cls(os.getcwd())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1123 self.assertEqual(p, q)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1124 self.assertEqual(str(p), str(q))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1125 self.assertIs(type(p), type(q))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1126 self.assertTrue(p.is_absolute())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1127
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1128 def test_cwd(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1129 p = self.cls.cwd()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1130 self._test_cwd(p)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1131
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1132 def test_empty_path(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1133 # The empty path points to '.'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1134 p = self.cls('')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1135 self.assertEqual(p.stat(), os.stat('.'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1136
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1137 def test_exists(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1138 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1139 p = P(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1140 self.assertIs(True, p.exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1141 self.assertIs(True, (p / 'dirA').exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1142 self.assertIs(True, (p / 'fileA').exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1143 if not symlink_skip_reason:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1144 self.assertIs(True, (p / 'linkA').exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1145 self.assertIs(True, (p / 'linkB').exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1146 self.assertIs(False, (p / 'foo').exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1147 self.assertIs(False, P('/xyzzy').exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1148
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1149 def test_open_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1150 p = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1151 with (p / 'fileA').open('r') as f:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1152 self.assertIsInstance(f, io.TextIOBase)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1153 self.assertEqual(f.read(), "this is file A\n")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1154 with (p / 'fileA').open('rb') as f:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1155 self.assertIsInstance(f, io.BufferedIOBase)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1156 self.assertEqual(f.read().strip(), b"this is file A")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1157 with (p / 'fileA').open('rb', buffering=0) as f:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1158 self.assertIsInstance(f, io.RawIOBase)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1159 self.assertEqual(f.read().strip(), b"this is file A")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1160
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1161 def test_iterdir(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1162 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1163 p = P(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1164 it = p.iterdir()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1165 paths = set(it)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1166 expected = ['dirA', 'dirB', 'dirC', 'fileA']
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1167 if not symlink_skip_reason:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1168 expected += ['linkA', 'linkB', 'brokenLink']
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1169 self.assertEqual(paths, { P(BASE, q) for q in expected })
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1170
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1171 @with_symlinks
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1172 def test_iterdir_symlink(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1173 # __iter__ on a symlink to a directory
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1174 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1175 p = P(BASE, 'linkB')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1176 paths = set(p.iterdir())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1177 expected = { P(BASE, 'linkB', q) for q in ['fileB', 'linkD'] }
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1178 self.assertEqual(paths, expected)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1179
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1180 def test_iterdir_nodir(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1181 # __iter__ on something that is not a directory
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1182 p = self.cls(BASE, 'fileA')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1183 with self.assertRaises(OSError) as cm:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1184 next(p.iterdir())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1185 # ENOENT or EINVAL under Windows, ENOTDIR otherwise
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1186 # (see issue #12802)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1187 self.assertIn(cm.exception.errno, (errno.ENOTDIR,
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1188 errno.ENOENT, errno.EINVAL))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1189
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1190 def test_glob_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1191 def _check(glob, expected):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1192 self.assertEqual(set(glob), { P(BASE, q) for q in expected })
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1193 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1194 p = P(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1195 it = p.glob("fileA")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1196 self.assertIsInstance(it, collections.Iterator)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1197 _check(it, ["fileA"])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1198 _check(p.glob("fileB"), [])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1199 _check(p.glob("dir*/file*"), ["dirB/fileB", "dirC/fileC"])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1200 if symlink_skip_reason:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1201 _check(p.glob("*A"), ['dirA', 'fileA'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1202 else:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1203 _check(p.glob("*A"), ['dirA', 'fileA', 'linkA'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1204 if symlink_skip_reason:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1205 _check(p.glob("*B/*"), ['dirB/fileB'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1206 else:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1207 _check(p.glob("*B/*"), ['dirB/fileB', 'dirB/linkD',
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1208 'linkB/fileB', 'linkB/linkD'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1209 if symlink_skip_reason:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1210 _check(p.glob("*/fileB"), ['dirB/fileB'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1211 else:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1212 _check(p.glob("*/fileB"), ['dirB/fileB', 'linkB/fileB'])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1213
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1214 def test_rglob_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1215 def _check(glob, expected):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1216 self.assertEqual(set(glob), { P(BASE, q) for q in expected })
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1217 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1218 p = P(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1219 it = p.rglob("fileA")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1220 self.assertIsInstance(it, collections.Iterator)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1221 # XXX cannot test because of symlink loops in the test setup
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1222 #_check(it, ["fileA"])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1223 #_check(p.rglob("fileB"), ["dirB/fileB"])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1224 #_check(p.rglob("*/fileA"), [""])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1225 #_check(p.rglob("*/fileB"), ["dirB/fileB"])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1226 #_check(p.rglob("file*"), ["fileA", "dirB/fileB"])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1227 # No symlink loops here
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1228 p = P(BASE, "dirC")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1229 _check(p.rglob("file*"), ["dirC/fileC", "dirC/dirD/fileD"])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1230 _check(p.rglob("*/*"), ["dirC/dirD/fileD"])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1231
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1232 def test_glob_dotdot(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1233 # ".." is not special in globs
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1234 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1235 p = P(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1236 self.assertEqual(set(p.glob("..")), { P(BASE, "..") })
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1237 self.assertEqual(set(p.glob("dirA/../file*")), { P(BASE, "dirA/../fileA") })
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1238 self.assertEqual(set(p.glob("../xyzzy")), set())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1239
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1240 def _check_resolve_relative(self, p, expected):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1241 q = p.resolve()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1242 self.assertEqual(q, expected)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1243
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1244 def _check_resolve_absolute(self, p, expected):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1245 q = p.resolve()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1246 self.assertEqual(q, expected)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1247
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1248 @with_symlinks
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1249 def test_resolve_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1250 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1251 p = P(BASE, 'foo')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1252 with self.assertRaises(OSError) as cm:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1253 p.resolve()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1254 self.assertEqual(cm.exception.errno, errno.ENOENT)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1255 # These are all relative symlinks
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1256 p = P(BASE, 'dirB', 'fileB')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1257 self._check_resolve_relative(p, p)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1258 p = P(BASE, 'linkA')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1259 self._check_resolve_relative(p, P(BASE, 'fileA'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1260 p = P(BASE, 'dirA', 'linkC', 'fileB')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1261 self._check_resolve_relative(p, P(BASE, 'dirB', 'fileB'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1262 p = P(BASE, 'dirB', 'linkD', 'fileB')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1263 self._check_resolve_relative(p, P(BASE, 'dirB', 'fileB'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1264 # Now create absolute symlinks
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1265 d = tempfile.mkdtemp(suffix='-dirD')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1266 self.addCleanup(shutil.rmtree, d)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1267 os.symlink(os.path.join(d), join('dirA', 'linkX'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1268 os.symlink(join('dirB'), os.path.join(d, 'linkY'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1269 p = P(BASE, 'dirA', 'linkX', 'linkY', 'fileB')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1270 self._check_resolve_absolute(p, P(BASE, 'dirB', 'fileB'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1271
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1272 def test_with(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1273 p = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1274 it = p.iterdir()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1275 it2 = p.iterdir()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1276 next(it2)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1277 with p:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1278 pass
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1279 # I/O operation on closed path
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1280 self.assertRaises(ValueError, next, it)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1281 self.assertRaises(ValueError, next, it2)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1282 self.assertRaises(ValueError, p.open)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1283 self.assertRaises(ValueError, p.resolve)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1284 self.assertRaises(ValueError, p.absolute)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1285 self.assertRaises(ValueError, p.__enter__)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1286
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1287 def test_chmod(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1288 p = self.cls(BASE) / 'fileA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1289 mode = p.stat().st_mode
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1290 # Clear writable bit
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1291 new_mode = mode & ~0o222
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1292 p.chmod(new_mode)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1293 self.assertEqual(p.stat().st_mode, new_mode)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1294 # Set writable bit
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1295 new_mode = mode | 0o222
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1296 p.chmod(new_mode)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1297 self.assertEqual(p.stat().st_mode, new_mode)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1298
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1299 # XXX also need a test for lchmod
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1300
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1301 def test_stat(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1302 p = self.cls(BASE) / 'fileA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1303 st = p.stat()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1304 self.assertEqual(p.stat(), st)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1305 # Change file mode by flipping write bit
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1306 p.chmod(st.st_mode ^ 0o222)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1307 self.addCleanup(p.chmod, st.st_mode)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1308 self.assertNotEqual(p.stat(), st)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1309
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1310 @with_symlinks
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1311 def test_lstat(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1312 p = self.cls(BASE)/ 'linkA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1313 st = p.stat()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1314 self.assertNotEqual(st, p.lstat())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1315
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1316 def test_lstat_nosymlink(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1317 p = self.cls(BASE) / 'fileA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1318 st = p.stat()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1319 self.assertEqual(st, p.lstat())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1320
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1321 @unittest.skipUnless(pwd, "the pwd module is needed for this test")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1322 def test_owner(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1323 p = self.cls(BASE) / 'fileA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1324 uid = p.stat().st_uid
87559
b58b58948c27 Issue #19742: fix a test_pathlib failure when a file owner or group isn't in the system database
Antoine Pitrou <solipsis@pitrou.net>
parents: 87420
diff changeset
1325 try:
b58b58948c27 Issue #19742: fix a test_pathlib failure when a file owner or group isn't in the system database
Antoine Pitrou <solipsis@pitrou.net>
parents: 87420
diff changeset
1326 name = pwd.getpwuid(uid).pw_name
b58b58948c27 Issue #19742: fix a test_pathlib failure when a file owner or group isn't in the system database
Antoine Pitrou <solipsis@pitrou.net>
parents: 87420
diff changeset
1327 except KeyError:
b58b58948c27 Issue #19742: fix a test_pathlib failure when a file owner or group isn't in the system database
Antoine Pitrou <solipsis@pitrou.net>
parents: 87420
diff changeset
1328 self.skipTest(
b58b58948c27 Issue #19742: fix a test_pathlib failure when a file owner or group isn't in the system database
Antoine Pitrou <solipsis@pitrou.net>
parents: 87420
diff changeset
1329 "user %d doesn't have an entry in the system database" % uid)
87348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1330 self.assertEqual(name, p.owner())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1331
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1332 @unittest.skipUnless(grp, "the grp module is needed for this test")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1333 def test_group(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1334 p = self.cls(BASE) / 'fileA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1335 gid = p.stat().st_gid
87559
b58b58948c27 Issue #19742: fix a test_pathlib failure when a file owner or group isn't in the system database
Antoine Pitrou <solipsis@pitrou.net>
parents: 87420
diff changeset
1336 try:
b58b58948c27 Issue #19742: fix a test_pathlib failure when a file owner or group isn't in the system database
Antoine Pitrou <solipsis@pitrou.net>
parents: 87420
diff changeset
1337 name = grp.getgrgid(gid).gr_name
b58b58948c27 Issue #19742: fix a test_pathlib failure when a file owner or group isn't in the system database
Antoine Pitrou <solipsis@pitrou.net>
parents: 87420
diff changeset
1338 except KeyError:
b58b58948c27 Issue #19742: fix a test_pathlib failure when a file owner or group isn't in the system database
Antoine Pitrou <solipsis@pitrou.net>
parents: 87420
diff changeset
1339 self.skipTest(
b58b58948c27 Issue #19742: fix a test_pathlib failure when a file owner or group isn't in the system database
Antoine Pitrou <solipsis@pitrou.net>
parents: 87420
diff changeset
1340 "group %d doesn't have an entry in the system database" % gid)
87348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1341 self.assertEqual(name, p.group())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1342
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1343 def test_unlink(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1344 p = self.cls(BASE) / 'fileA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1345 p.unlink()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1346 self.assertFileNotFound(p.stat)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1347 self.assertFileNotFound(p.unlink)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1349 def test_rmdir(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1350 p = self.cls(BASE) / 'dirA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1351 for q in p.iterdir():
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1352 q.unlink()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1353 p.rmdir()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1354 self.assertFileNotFound(p.stat)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1355 self.assertFileNotFound(p.unlink)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1356
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1357 def test_rename(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1358 P = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1359 p = P / 'fileA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1360 size = p.stat().st_size
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1361 # Renaming to another path
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1362 q = P / 'dirA' / 'fileAA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1363 p.rename(q)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1364 self.assertEqual(q.stat().st_size, size)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1365 self.assertFileNotFound(p.stat)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1366 # Renaming to a str of a relative path
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1367 r = rel_join('fileAAA')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1368 q.rename(r)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1369 self.assertEqual(os.stat(r).st_size, size)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1370 self.assertFileNotFound(q.stat)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1371
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1372 def test_replace(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1373 P = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1374 p = P / 'fileA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1375 size = p.stat().st_size
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1376 # Replacing a non-existing path
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1377 q = P / 'dirA' / 'fileAA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1378 p.replace(q)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1379 self.assertEqual(q.stat().st_size, size)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1380 self.assertFileNotFound(p.stat)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1381 # Replacing another (existing) path
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1382 r = rel_join('dirB', 'fileB')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1383 q.replace(r)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1384 self.assertEqual(os.stat(r).st_size, size)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1385 self.assertFileNotFound(q.stat)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1386
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1387 def test_touch_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1388 P = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1389 p = P / 'newfileA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1390 self.assertFalse(p.exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1391 p.touch()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1392 self.assertTrue(p.exists())
87378
4101bfaa76fe Try to debug issue #19715
Antoine Pitrou <solipsis@pitrou.net>
parents: 87377
diff changeset
1393 st = p.stat()
4101bfaa76fe Try to debug issue #19715
Antoine Pitrou <solipsis@pitrou.net>
parents: 87377
diff changeset
1394 old_mtime = st.st_mtime
4101bfaa76fe Try to debug issue #19715
Antoine Pitrou <solipsis@pitrou.net>
parents: 87377
diff changeset
1395 old_mtime_ns = st.st_mtime_ns
87348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1396 # Rewind the mtime sufficiently far in the past to work around
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1397 # filesystem-specific timestamp granularity.
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1398 os.utime(str(p), (old_mtime - 10, old_mtime - 10))
87384
602062d2a008 Try to fix issue #19715 (timestamp rounding inconsistencies under Windows?)
Antoine Pitrou <solipsis@pitrou.net>
parents: 87378
diff changeset
1399 # The file mtime should be refreshed by calling touch() again
87348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1400 p.touch()
87378
4101bfaa76fe Try to debug issue #19715
Antoine Pitrou <solipsis@pitrou.net>
parents: 87377
diff changeset
1401 st = p.stat()
87420
b5e9d61f6987 Issue #19715: try the utime(..., None) approach again, now that it should be more precise under Windows
Antoine Pitrou <solipsis@pitrou.net>
parents: 87416
diff changeset
1402 self.assertGreaterEqual(st.st_mtime_ns, old_mtime_ns)
b5e9d61f6987 Issue #19715: try the utime(..., None) approach again, now that it should be more precise under Windows
Antoine Pitrou <solipsis@pitrou.net>
parents: 87416
diff changeset
1403 self.assertGreaterEqual(st.st_mtime, old_mtime)
87384
602062d2a008 Try to fix issue #19715 (timestamp rounding inconsistencies under Windows?)
Antoine Pitrou <solipsis@pitrou.net>
parents: 87378
diff changeset
1404 # Now with exist_ok=False
87348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1405 p = P / 'newfileB'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1406 self.assertFalse(p.exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1407 p.touch(mode=0o700, exist_ok=False)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1408 self.assertTrue(p.exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1409 self.assertRaises(OSError, p.touch, exist_ok=False)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1410
87416
11a200202d7a Issue #19716: add a test that Path.touch() doesn't change a file's contents.
Antoine Pitrou <solipsis@pitrou.net>
parents: 87387
diff changeset
1411 def test_touch_nochange(self):
11a200202d7a Issue #19716: add a test that Path.touch() doesn't change a file's contents.
Antoine Pitrou <solipsis@pitrou.net>
parents: 87387
diff changeset
1412 P = self.cls(BASE)
11a200202d7a Issue #19716: add a test that Path.touch() doesn't change a file's contents.
Antoine Pitrou <solipsis@pitrou.net>
parents: 87387
diff changeset
1413 p = P / 'fileA'
11a200202d7a Issue #19716: add a test that Path.touch() doesn't change a file's contents.
Antoine Pitrou <solipsis@pitrou.net>
parents: 87387
diff changeset
1414 p.touch()
11a200202d7a Issue #19716: add a test that Path.touch() doesn't change a file's contents.
Antoine Pitrou <solipsis@pitrou.net>
parents: 87387
diff changeset
1415 with p.open('rb') as f:
11a200202d7a Issue #19716: add a test that Path.touch() doesn't change a file's contents.
Antoine Pitrou <solipsis@pitrou.net>
parents: 87387
diff changeset
1416 self.assertEqual(f.read().strip(), b"this is file A")
11a200202d7a Issue #19716: add a test that Path.touch() doesn't change a file's contents.
Antoine Pitrou <solipsis@pitrou.net>
parents: 87387
diff changeset
1417
87348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1418 def test_mkdir(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1419 P = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1420 p = P / 'newdirA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1421 self.assertFalse(p.exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1422 p.mkdir()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1423 self.assertTrue(p.exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1424 self.assertTrue(p.is_dir())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1425 with self.assertRaises(OSError) as cm:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1426 p.mkdir()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1427 self.assertEqual(cm.exception.errno, errno.EEXIST)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1428 # XXX test `mode` arg
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1429
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1430 def test_mkdir_parents(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1431 # Creating a chain of directories
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1432 p = self.cls(BASE, 'newdirB', 'newdirC')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1433 self.assertFalse(p.exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1434 with self.assertRaises(OSError) as cm:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1435 p.mkdir()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1436 self.assertEqual(cm.exception.errno, errno.ENOENT)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1437 p.mkdir(parents=True)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1438 self.assertTrue(p.exists())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1439 self.assertTrue(p.is_dir())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1440 with self.assertRaises(OSError) as cm:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1441 p.mkdir(parents=True)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1442 self.assertEqual(cm.exception.errno, errno.EEXIST)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1443 # XXX test `mode` arg
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1444
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1445 @with_symlinks
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1446 def test_symlink_to(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1447 P = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1448 target = P / 'fileA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1449 # Symlinking a path target
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1450 link = P / 'dirA' / 'linkAA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1451 link.symlink_to(target)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1452 self.assertEqual(link.stat(), target.stat())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1453 self.assertNotEqual(link.lstat(), target.stat())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1454 # Symlinking a str target
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1455 link = P / 'dirA' / 'linkAAA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1456 link.symlink_to(str(target))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1457 self.assertEqual(link.stat(), target.stat())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1458 self.assertNotEqual(link.lstat(), target.stat())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1459 self.assertFalse(link.is_dir())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1460 # Symlinking to a directory
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1461 target = P / 'dirB'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1462 link = P / 'dirA' / 'linkAAAA'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1463 link.symlink_to(target, target_is_directory=True)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1464 self.assertEqual(link.stat(), target.stat())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1465 self.assertNotEqual(link.lstat(), target.stat())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1466 self.assertTrue(link.is_dir())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1467 self.assertTrue(list(link.iterdir()))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1468
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1469 def test_is_dir(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1470 P = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1471 self.assertTrue((P / 'dirA').is_dir())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1472 self.assertFalse((P / 'fileA').is_dir())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1473 self.assertFalse((P / 'non-existing').is_dir())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1474 if not symlink_skip_reason:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1475 self.assertFalse((P / 'linkA').is_dir())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1476 self.assertTrue((P / 'linkB').is_dir())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1477 self.assertFalse((P/ 'brokenLink').is_dir())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1478
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1479 def test_is_file(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1480 P = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1481 self.assertTrue((P / 'fileA').is_file())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1482 self.assertFalse((P / 'dirA').is_file())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1483 self.assertFalse((P / 'non-existing').is_file())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1484 if not symlink_skip_reason:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1485 self.assertTrue((P / 'linkA').is_file())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1486 self.assertFalse((P / 'linkB').is_file())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1487 self.assertFalse((P/ 'brokenLink').is_file())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1488
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1489 def test_is_symlink(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1490 P = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1491 self.assertFalse((P / 'fileA').is_symlink())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1492 self.assertFalse((P / 'dirA').is_symlink())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1493 self.assertFalse((P / 'non-existing').is_symlink())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1494 if not symlink_skip_reason:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1495 self.assertTrue((P / 'linkA').is_symlink())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1496 self.assertTrue((P / 'linkB').is_symlink())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1497 self.assertTrue((P/ 'brokenLink').is_symlink())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1498
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1499 def test_is_fifo_false(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1500 P = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1501 self.assertFalse((P / 'fileA').is_fifo())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1502 self.assertFalse((P / 'dirA').is_fifo())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1503 self.assertFalse((P / 'non-existing').is_fifo())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1504
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1505 @unittest.skipUnless(hasattr(os, "mkfifo"), "os.mkfifo() required")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1506 def test_is_fifo_true(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1507 P = self.cls(BASE, 'myfifo')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1508 os.mkfifo(str(P))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1509 self.assertTrue(P.is_fifo())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1510 self.assertFalse(P.is_socket())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1511 self.assertFalse(P.is_file())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1512
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1513 def test_is_socket_false(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1514 P = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1515 self.assertFalse((P / 'fileA').is_socket())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1516 self.assertFalse((P / 'dirA').is_socket())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1517 self.assertFalse((P / 'non-existing').is_socket())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1518
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1519 @unittest.skipUnless(hasattr(socket, "AF_UNIX"), "Unix sockets required")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1520 def test_is_socket_true(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1521 P = self.cls(BASE, 'mysock')
87352
b97310457be0 Hopefully fix test_is_socket_true
Antoine Pitrou <solipsis@pitrou.net>
parents: 87350
diff changeset
1522 sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
87348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1523 self.addCleanup(sock.close)
87352
b97310457be0 Hopefully fix test_is_socket_true
Antoine Pitrou <solipsis@pitrou.net>
parents: 87350
diff changeset
1524 try:
b97310457be0 Hopefully fix test_is_socket_true
Antoine Pitrou <solipsis@pitrou.net>
parents: 87350
diff changeset
1525 sock.bind(str(P))
b97310457be0 Hopefully fix test_is_socket_true
Antoine Pitrou <solipsis@pitrou.net>
parents: 87350
diff changeset
1526 except OSError as e:
b97310457be0 Hopefully fix test_is_socket_true
Antoine Pitrou <solipsis@pitrou.net>
parents: 87350
diff changeset
1527 if "AF_UNIX path too long" in str(e):
b97310457be0 Hopefully fix test_is_socket_true
Antoine Pitrou <solipsis@pitrou.net>
parents: 87350
diff changeset
1528 self.skipTest("cannot bind Unix socket: " + str(e))
87348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1529 self.assertTrue(P.is_socket())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1530 self.assertFalse(P.is_fifo())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1531 self.assertFalse(P.is_file())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1532
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1533 def test_is_block_device_false(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1534 P = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1535 self.assertFalse((P / 'fileA').is_block_device())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1536 self.assertFalse((P / 'dirA').is_block_device())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1537 self.assertFalse((P / 'non-existing').is_block_device())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1538
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1539 def test_is_char_device_false(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1540 P = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1541 self.assertFalse((P / 'fileA').is_char_device())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1542 self.assertFalse((P / 'dirA').is_char_device())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1543 self.assertFalse((P / 'non-existing').is_char_device())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1544
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1545 def test_is_char_device_true(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1546 # Under Unix, /dev/null should generally be a char device
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1547 P = self.cls('/dev/null')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1548 if not P.exists():
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1549 self.skipTest("/dev/null required")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1550 self.assertTrue(P.is_char_device())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1551 self.assertFalse(P.is_block_device())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1552 self.assertFalse(P.is_file())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1553
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1554 def test_pickling_common(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1555 p = self.cls(BASE, 'fileA')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1556 for proto in range(0, pickle.HIGHEST_PROTOCOL + 1):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1557 dumped = pickle.dumps(p, proto)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1558 pp = pickle.loads(dumped)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1559 self.assertEqual(pp.stat(), p.stat())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1560
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1561 def test_parts_interning(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1562 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1563 p = P('/usr/bin/foo')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1564 q = P('/usr/local/bin')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1565 # 'usr'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1566 self.assertIs(p.parts[1], q.parts[1])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1567 # 'bin'
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1568 self.assertIs(p.parts[2], q.parts[3])
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1569
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1570
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1571 class PathTest(_BasePathTest, unittest.TestCase):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1572 cls = pathlib.Path
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1573
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1574 def test_concrete_class(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1575 p = self.cls('a')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1576 self.assertIs(type(p),
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1577 pathlib.WindowsPath if os.name == 'nt' else pathlib.PosixPath)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1578
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1579 def test_unsupported_flavour(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1580 if os.name == 'nt':
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1581 self.assertRaises(NotImplementedError, pathlib.PosixPath)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1582 else:
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1583 self.assertRaises(NotImplementedError, pathlib.WindowsPath)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1584
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1585
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1586 @only_posix
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1587 class PosixPathTest(_BasePathTest, unittest.TestCase):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1588 cls = pathlib.PosixPath
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1589
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1590 def _check_symlink_loop(self, *args):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1591 path = self.cls(*args)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1592 with self.assertRaises(RuntimeError):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1593 print(path.resolve())
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1594
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1595 def test_open_mode(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1596 old_mask = os.umask(0)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1597 self.addCleanup(os.umask, old_mask)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1598 p = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1599 with (p / 'new_file').open('wb'):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1600 pass
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1601 st = os.stat(join('new_file'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1602 self.assertEqual(stat.S_IMODE(st.st_mode), 0o666)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1603 os.umask(0o022)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1604 with (p / 'other_new_file').open('wb'):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1605 pass
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1606 st = os.stat(join('other_new_file'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1607 self.assertEqual(stat.S_IMODE(st.st_mode), 0o644)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1608
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1609 def test_touch_mode(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1610 old_mask = os.umask(0)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1611 self.addCleanup(os.umask, old_mask)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1612 p = self.cls(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1613 (p / 'new_file').touch()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1614 st = os.stat(join('new_file'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1615 self.assertEqual(stat.S_IMODE(st.st_mode), 0o666)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1616 os.umask(0o022)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1617 (p / 'other_new_file').touch()
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1618 st = os.stat(join('other_new_file'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1619 self.assertEqual(stat.S_IMODE(st.st_mode), 0o644)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1620 (p / 'masked_new_file').touch(mode=0o750)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1621 st = os.stat(join('masked_new_file'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1622 self.assertEqual(stat.S_IMODE(st.st_mode), 0o750)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1623
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1624 @with_symlinks
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1625 def test_resolve_loop(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1626 # Loop detection for broken symlinks under POSIX
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1627 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1628 # Loops with relative symlinks
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1629 os.symlink('linkX/inside', join('linkX'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1630 self._check_symlink_loop(BASE, 'linkX')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1631 os.symlink('linkY', join('linkY'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1632 self._check_symlink_loop(BASE, 'linkY')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1633 os.symlink('linkZ/../linkZ', join('linkZ'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1634 self._check_symlink_loop(BASE, 'linkZ')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1635 # Loops with absolute symlinks
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1636 os.symlink(join('linkU/inside'), join('linkU'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1637 self._check_symlink_loop(BASE, 'linkU')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1638 os.symlink(join('linkV'), join('linkV'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1639 self._check_symlink_loop(BASE, 'linkV')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1640 os.symlink(join('linkW/../linkW'), join('linkW'))
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1641 self._check_symlink_loop(BASE, 'linkW')
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1642
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1643 def test_glob(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1644 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1645 p = P(BASE)
87374
cd09766bb18f Issue #19718: Add a case-insensitive FS check to test.support to use
Brett Cannon <brett@python.org>
parents: 87352
diff changeset
1646 given = set(p.glob("FILEa"))
cd09766bb18f Issue #19718: Add a case-insensitive FS check to test.support to use
Brett Cannon <brett@python.org>
parents: 87352
diff changeset
1647 expect = set() if not support.fs_is_case_insensitive(BASE) else given
cd09766bb18f Issue #19718: Add a case-insensitive FS check to test.support to use
Brett Cannon <brett@python.org>
parents: 87352
diff changeset
1648 self.assertEqual(given, expect)
87377
4734f6e2fd2f Issue #19718: add one more globbing test under POSIX
Antoine Pitrou <solipsis@pitrou.net>
parents: 87374
diff changeset
1649 self.assertEqual(set(p.glob("FILEa*")), set())
87348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1650
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1651 def test_rglob(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1652 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1653 p = P(BASE, "dirC")
87374
cd09766bb18f Issue #19718: Add a case-insensitive FS check to test.support to use
Brett Cannon <brett@python.org>
parents: 87352
diff changeset
1654 given = set(p.rglob("FILEd"))
cd09766bb18f Issue #19718: Add a case-insensitive FS check to test.support to use
Brett Cannon <brett@python.org>
parents: 87352
diff changeset
1655 expect = set() if not support.fs_is_case_insensitive(BASE) else given
cd09766bb18f Issue #19718: Add a case-insensitive FS check to test.support to use
Brett Cannon <brett@python.org>
parents: 87352
diff changeset
1656 self.assertEqual(given, expect)
87377
4734f6e2fd2f Issue #19718: add one more globbing test under POSIX
Antoine Pitrou <solipsis@pitrou.net>
parents: 87374
diff changeset
1657 self.assertEqual(set(p.rglob("FILEd*")), set())
87348
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1658
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1659
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1660 @only_nt
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1661 class WindowsPathTest(_BasePathTest, unittest.TestCase):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1662 cls = pathlib.WindowsPath
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1663
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1664 def test_glob(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1665 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1666 p = P(BASE)
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1667 self.assertEqual(set(p.glob("FILEa")), { P(BASE, "fileA") })
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1668
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1669 def test_rglob(self):
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1670 P = self.cls
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1671 p = P(BASE, "dirC")
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1672 self.assertEqual(set(p.rglob("FILEd")), { P(BASE, "dirC/dirD/fileD") })
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1673
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1674
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1675 if __name__ == "__main__":
43377dcfb801 Issue #19673: Add pathlib to the stdlib as a provisional module (PEP 428).
Antoine Pitrou <solipsis@pitrou.net>
parents:
diff changeset
1676 unittest.main()