Skip to content

Commit 8b5c850

Browse files
gh-129350: Make tests for glob with trailing slash more strict (GH-129376)
Test that the trailing pathname separator is preserved. Multiple trailing pathname separators are only preserved if the pattern does not contain metacharacters, otherwise only one trailing pathname separator is preserved. This is rather an implementation detail.
1 parent 078ab82 commit 8b5c850

File tree

1 file changed

+36
-29
lines changed

1 file changed

+36
-29
lines changed

Lib/test/test_glob.py

+36-29
Original file line numberDiff line numberDiff line change
@@ -171,46 +171,53 @@ def test_glob_directory_names(self):
171171
self.norm('aab', 'F')])
172172

173173
def test_glob_directory_with_trailing_slash(self):
174-
# Patterns ending with a slash shouldn't match non-dirs
175-
res = glob.glob(self.norm('Z*Z') + os.sep)
176-
self.assertEqual(res, [])
177-
res = glob.glob(self.norm('ZZZ') + os.sep)
178-
self.assertEqual(res, [])
179-
# When there is a wildcard pattern which ends with os.sep, glob()
180-
# doesn't blow up.
181-
res = glob.glob(self.norm('aa*') + os.sep)
182-
self.assertEqual(len(res), 2)
183-
# either of these results is reasonable
184-
self.assertIn(set(res), [
185-
{self.norm('aaa'), self.norm('aab')},
186-
{self.norm('aaa') + os.sep, self.norm('aab') + os.sep},
187-
])
174+
seps = (os.sep, os.altsep) if os.altsep else (os.sep,)
175+
for sep in seps:
176+
# Patterns ending with a slash shouldn't match non-dirs
177+
self.assertEqual(glob.glob(self.norm('Z*Z') + sep), [])
178+
self.assertEqual(glob.glob(self.norm('ZZZ') + sep), [])
179+
self.assertEqual(glob.glob(self.norm('aaa') + sep),
180+
[self.norm('aaa') + sep])
181+
# Preserving the redundant separators is an implementation detail.
182+
self.assertEqual(glob.glob(self.norm('aaa') + sep*2),
183+
[self.norm('aaa') + sep*2])
184+
# When there is a wildcard pattern which ends with a pathname
185+
# separator, glob() doesn't blow.
186+
# The result should end with the pathname separator.
187+
# Normalizing the trailing separator is an implementation detail.
188+
eq = self.assertSequencesEqual_noorder
189+
eq(glob.glob(self.norm('aa*') + sep),
190+
[self.norm('aaa') + os.sep, self.norm('aab') + os.sep])
191+
# Stripping the redundant separators is an implementation detail.
192+
eq(glob.glob(self.norm('aa*') + sep*2),
193+
[self.norm('aaa') + os.sep, self.norm('aab') + os.sep])
188194

189195
def test_glob_bytes_directory_with_trailing_slash(self):
190196
# Same as test_glob_directory_with_trailing_slash, but with a
191197
# bytes argument.
192-
res = glob.glob(os.fsencode(self.norm('Z*Z') + os.sep))
193-
self.assertEqual(res, [])
194-
res = glob.glob(os.fsencode(self.norm('ZZZ') + os.sep))
195-
self.assertEqual(res, [])
196-
res = glob.glob(os.fsencode(self.norm('aa*') + os.sep))
197-
self.assertEqual(len(res), 2)
198-
# either of these results is reasonable
199-
self.assertIn(set(res), [
200-
{os.fsencode(self.norm('aaa')),
201-
os.fsencode(self.norm('aab'))},
202-
{os.fsencode(self.norm('aaa') + os.sep),
203-
os.fsencode(self.norm('aab') + os.sep)},
204-
])
198+
seps = (os.sep, os.altsep) if os.altsep else (os.sep,)
199+
for sep in seps:
200+
self.assertEqual(glob.glob(os.fsencode(self.norm('Z*Z') + sep)), [])
201+
self.assertEqual(glob.glob(os.fsencode(self.norm('ZZZ') + sep)), [])
202+
self.assertEqual(glob.glob(os.fsencode(self.norm('aaa') + sep)),
203+
[os.fsencode(self.norm('aaa') + sep)])
204+
self.assertEqual(glob.glob(os.fsencode(self.norm('aaa') + sep*2)),
205+
[os.fsencode(self.norm('aaa') + sep*2)])
206+
eq = self.assertSequencesEqual_noorder
207+
eq(glob.glob(os.fsencode(self.norm('aa*') + sep)),
208+
[os.fsencode(self.norm('aaa') + os.sep),
209+
os.fsencode(self.norm('aab') + os.sep)])
210+
eq(glob.glob(os.fsencode(self.norm('aa*') + sep*2)),
211+
[os.fsencode(self.norm('aaa') + os.sep),
212+
os.fsencode(self.norm('aab') + os.sep)])
205213

206214
@skip_unless_symlink
207215
def test_glob_symlinks(self):
208216
eq = self.assertSequencesEqual_noorder
209217
eq(self.glob('sym3'), [self.norm('sym3')])
210218
eq(self.glob('sym3', '*'), [self.norm('sym3', 'EF'),
211219
self.norm('sym3', 'efg')])
212-
self.assertIn(self.glob('sym3' + os.sep),
213-
[[self.norm('sym3')], [self.norm('sym3') + os.sep]])
220+
eq(self.glob('sym3' + os.sep), [self.norm('sym3') + os.sep])
214221
eq(self.glob('*', '*F'),
215222
[self.norm('aaa', 'zzzF'),
216223
self.norm('aab', 'F'), self.norm('sym3', 'EF')])

0 commit comments

Comments
 (0)