Skip to content

Commit 771aeb9

Browse files
committed
Windows test fixes
1 parent 2146ce8 commit 771aeb9

File tree

3 files changed

+30
-24
lines changed

3 files changed

+30
-24
lines changed

Lib/glob.py

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -320,11 +320,11 @@ def translate(pat, *, recursive=False, include_hidden=False, seps=None):
320320

321321

322322
@functools.lru_cache(maxsize=512)
323-
def _compile_pattern(pat, sep, case_sensitive, recursive=True):
323+
def _compile_pattern(pat, seps, case_sensitive, recursive=True):
324324
"""Compile given glob pattern to a re.Pattern object (observing case
325325
sensitivity)."""
326326
flags = re.NOFLAG if case_sensitive else re.IGNORECASE
327-
regex = translate(pat, recursive=recursive, include_hidden=True, seps=sep)
327+
regex = translate(pat, recursive=recursive, include_hidden=True, seps=seps)
328328
return re.compile(regex, flags=flags).match
329329

330330

@@ -360,8 +360,9 @@ def concat_path(path, text):
360360

361361
# High-level methods
362362

363-
def compile(self, pat):
364-
return _compile_pattern(pat, self.sep, self.case_sensitive, self.recursive)
363+
def compile(self, pat, altsep=None):
364+
seps = (self.sep, altsep) if altsep else self.sep
365+
return _compile_pattern(pat, seps, self.case_sensitive, self.recursive)
365366

366367
def selector(self, parts):
367368
"""Returns a function that selects from a given path, walking and

Lib/pathlib/types.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,10 @@ def with_name(self, name):
135135
split = self.parser.split
136136
if split(name)[0]:
137137
raise ValueError(f"Invalid name {name!r}")
138-
return self.with_segments(split(str(self))[0], name)
138+
path = str(self)
139+
old_name = split(path)[1]
140+
path = path[:len(path) - len(old_name)] + name
141+
return self.with_segments(path)
139142

140143
def with_stem(self, stem):
141144
"""Return a new path with the stem changed."""
@@ -223,7 +226,7 @@ def full_match(self, pattern, *, case_sensitive=None):
223226
if case_sensitive is None:
224227
case_sensitive = self.parser.normcase('Aa') == 'Aa'
225228
globber = _PathGlobber(pattern.parser.sep, case_sensitive, recursive=True)
226-
match = globber.compile(str(pattern))
229+
match = globber.compile(str(pattern), altsep=self.parser.altsep)
227230
return match(str(self)) is not None
228231

229232

Lib/test/test_pathlib/test_join.py

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -49,30 +49,32 @@ def with_segments(self, *pathsegments):
4949

5050
def test_join(self):
5151
P = self.cls
52-
p = P('a/b')
52+
sep = self.cls.parser.sep
53+
p = P(f'a{sep}b')
5354
pp = p.joinpath('c')
54-
self.assertEqual(pp, P('a/b/c'))
55+
self.assertEqual(pp, P(f'a{sep}b{sep}c'))
5556
self.assertIs(type(pp), type(p))
5657
pp = p.joinpath('c', 'd')
57-
self.assertEqual(pp, P('a/b/c/d'))
58-
pp = p.joinpath('/c')
59-
self.assertEqual(pp, P('/c'))
58+
self.assertEqual(pp, P(f'a{sep}b{sep}c{sep}d'))
59+
pp = p.joinpath(f'{sep}c')
60+
self.assertEqual(pp, P(f'{sep}c'))
6061

6162
def test_div(self):
6263
# Basically the same as joinpath().
6364
P = self.cls
64-
p = P('a/b')
65+
sep = self.cls.parser.sep
66+
p = P(f'a{sep}b')
6567
pp = p / 'c'
66-
self.assertEqual(pp, P('a/b/c'))
68+
self.assertEqual(pp, P(f'a{sep}b{sep}c'))
6769
self.assertIs(type(pp), type(p))
68-
pp = p / 'c/d'
69-
self.assertEqual(pp, P('a/b/c/d'))
70+
pp = p / f'c{sep}d'
71+
self.assertEqual(pp, P(f'a{sep}b{sep}c{sep}d'))
7072
pp = p / 'c' / 'd'
71-
self.assertEqual(pp, P('a/b/c/d'))
73+
self.assertEqual(pp, P(f'a{sep}b{sep}c{sep}d'))
7274
pp = 'c' / p / 'd'
73-
self.assertEqual(pp, P('c/a/b/d'))
74-
pp = p/ '/c'
75-
self.assertEqual(pp, P('/c'))
75+
self.assertEqual(pp, P(f'c{sep}a{sep}b{sep}d'))
76+
pp = p/ f'{sep}c'
77+
self.assertEqual(pp, P(f'{sep}c'))
7678

7779
def test_full_match(self):
7880
P = self.cls
@@ -149,11 +151,11 @@ def test_parts(self):
149151
# `parts` returns a tuple.
150152
sep = self.cls.parser.sep
151153
P = self.cls
152-
p = P('a/b')
154+
p = P(f'a{sep}b')
153155
parts = p.parts
154156
self.assertEqual(parts, ('a', 'b'))
155157
# When the path is absolute, the anchor is a separate part.
156-
p = P('/a/b')
158+
p = P(f'{sep}a{sep}b')
157159
parts = p.parts
158160
self.assertEqual(parts, (sep, 'a', 'b'))
159161

@@ -223,9 +225,9 @@ def test_anchor(self):
223225
P = self.cls
224226
sep = self.cls.parser.sep
225227
self.assertEqual(P('').anchor, '')
226-
self.assertEqual(P('a/b').anchor, '')
227-
self.assertEqual(P('/').anchor, sep)
228-
self.assertEqual(P('/a/b').anchor, sep)
228+
self.assertEqual(P(f'a{sep}b').anchor, '')
229+
self.assertEqual(P(sep).anchor, sep)
230+
self.assertEqual(P(f'{sep}a{sep}b').anchor, sep)
229231

230232
def test_name(self):
231233
P = self.cls

0 commit comments

Comments
 (0)