Mercurial > cpython-lru_cache-weakref
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 |
| 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() |
