Skip to content

Commit 09505c5

Browse files
authored
GH-106747: Improve Path.glob() expectations in pathlib tests (#112365)
Add trailing slashes to expected `Path.glob()` results wherever a pattern has a trailing slash. This matches what `glob.glob()` produces. Due to another bug (GH-65238) pathlib strips all trailing slashes, so this change is academic for now.
1 parent 489aeac commit 09505c5

File tree

1 file changed

+33
-33
lines changed

1 file changed

+33
-33
lines changed

Lib/test/test_pathlib.py

+33-33
Original file line numberDiff line numberDiff line change
@@ -1968,9 +1968,9 @@ def _check(glob, expected):
19681968
_check(p.glob("brokenLink"), ['brokenLink'])
19691969

19701970
if not self.can_symlink:
1971-
_check(p.glob("*/"), ["dirA", "dirB", "dirC", "dirE"])
1971+
_check(p.glob("*/"), ["dirA/", "dirB/", "dirC/", "dirE/"])
19721972
else:
1973-
_check(p.glob("*/"), ["dirA", "dirB", "dirC", "dirE", "linkB"])
1973+
_check(p.glob("*/"), ["dirA/", "dirB/", "dirC/", "dirE/", "linkB/"])
19741974

19751975
def test_glob_empty_pattern(self):
19761976
p = self.cls()
@@ -2003,17 +2003,17 @@ def _check(path, glob, expected):
20032003
_check(p, "*A", ["dirA", "fileA", "linkA"])
20042004
_check(p, "*B/*", ["dirB/fileB", "dirB/linkD", "linkB/fileB", "linkB/linkD"])
20052005
_check(p, "*/fileB", ["dirB/fileB", "linkB/fileB"])
2006-
_check(p, "*/", ["dirA", "dirB", "dirC", "dirE", "linkB"])
2006+
_check(p, "*/", ["dirA/", "dirB/", "dirC/", "dirE/", "linkB/"])
20072007
_check(p, "dir*/*/..", ["dirC/dirD/..", "dirA/linkC/.."])
2008-
_check(p, "dir*/**/", ["dirA", "dirA/linkC", "dirA/linkC/linkD", "dirB", "dirB/linkD",
2009-
"dirC", "dirC/dirD", "dirE"])
2008+
_check(p, "dir*/**/", ["dirA/", "dirA/linkC/", "dirA/linkC/linkD/", "dirB/", "dirB/linkD/",
2009+
"dirC/", "dirC/dirD/", "dirE/"])
20102010
_check(p, "dir*/**/..", ["dirA/..", "dirA/linkC/..", "dirB/..",
20112011
"dirC/..", "dirC/dirD/..", "dirE/.."])
2012-
_check(p, "dir*/*/**/", ["dirA/linkC", "dirA/linkC/linkD", "dirB/linkD", "dirC/dirD"])
2012+
_check(p, "dir*/*/**/", ["dirA/linkC/", "dirA/linkC/linkD/", "dirB/linkD/", "dirC/dirD/"])
20132013
_check(p, "dir*/*/**/..", ["dirA/linkC/..", "dirC/dirD/.."])
20142014
_check(p, "dir*/**/fileC", ["dirC/fileC"])
2015-
_check(p, "dir*/*/../dirD/**/", ["dirC/dirD/../dirD"])
2016-
_check(p, "*/dirD/**/", ["dirC/dirD"])
2015+
_check(p, "dir*/*/../dirD/**/", ["dirC/dirD/../dirD/"])
2016+
_check(p, "*/dirD/**/", ["dirC/dirD/"])
20172017

20182018
def test_glob_no_follow_symlinks_common(self):
20192019
if not self.can_symlink:
@@ -2028,15 +2028,15 @@ def _check(path, glob, expected):
20282028
_check(p, "*A", ["dirA", "fileA", "linkA"])
20292029
_check(p, "*B/*", ["dirB/fileB", "dirB/linkD"])
20302030
_check(p, "*/fileB", ["dirB/fileB"])
2031-
_check(p, "*/", ["dirA", "dirB", "dirC", "dirE"])
2031+
_check(p, "*/", ["dirA/", "dirB/", "dirC/", "dirE/"])
20322032
_check(p, "dir*/*/..", ["dirC/dirD/.."])
2033-
_check(p, "dir*/**/", ["dirA", "dirB", "dirC", "dirC/dirD", "dirE"])
2033+
_check(p, "dir*/**/", ["dirA/", "dirB/", "dirC/", "dirC/dirD/", "dirE/"])
20342034
_check(p, "dir*/**/..", ["dirA/..", "dirB/..", "dirC/..", "dirC/dirD/..", "dirE/.."])
2035-
_check(p, "dir*/*/**/", ["dirC/dirD"])
2035+
_check(p, "dir*/*/**/", ["dirC/dirD/"])
20362036
_check(p, "dir*/*/**/..", ["dirC/dirD/.."])
20372037
_check(p, "dir*/**/fileC", ["dirC/fileC"])
2038-
_check(p, "dir*/*/../dirD/**/", ["dirC/dirD/../dirD"])
2039-
_check(p, "*/dirD/**/", ["dirC/dirD"])
2038+
_check(p, "dir*/*/../dirD/**/", ["dirC/dirD/../dirD/"])
2039+
_check(p, "*/dirD/**/", ["dirC/dirD/"])
20402040

20412041
def test_rglob_common(self):
20422042
def _check(glob, expected):
@@ -2058,25 +2058,25 @@ def _check(glob, expected):
20582058
"dirC/fileC", "dirC/dirD/fileD"])
20592059
if not self.can_symlink:
20602060
_check(p.rglob("*/"), [
2061-
"dirA", "dirB", "dirC", "dirC/dirD", "dirE",
2061+
"dirA/", "dirB/", "dirC/", "dirC/dirD/", "dirE/",
20622062
])
20632063
else:
20642064
_check(p.rglob("*/"), [
2065-
"dirA", "dirA/linkC", "dirB", "dirB/linkD", "dirC",
2066-
"dirC/dirD", "dirE", "linkB",
2065+
"dirA/", "dirA/linkC/", "dirB/", "dirB/linkD/", "dirC/",
2066+
"dirC/dirD/", "dirE/", "linkB/",
20672067
])
2068-
_check(p.rglob(""), ["", "dirA", "dirB", "dirC", "dirE", "dirC/dirD"])
2068+
_check(p.rglob(""), ["./", "dirA/", "dirB/", "dirC/", "dirE/", "dirC/dirD/"])
20692069

20702070
p = P(BASE, "dirC")
20712071
_check(p.rglob("*"), ["dirC/fileC", "dirC/novel.txt",
20722072
"dirC/dirD", "dirC/dirD/fileD"])
20732073
_check(p.rglob("file*"), ["dirC/fileC", "dirC/dirD/fileD"])
20742074
_check(p.rglob("**/file*"), ["dirC/fileC", "dirC/dirD/fileD"])
2075-
_check(p.rglob("dir*/**/"), ["dirC/dirD"])
2075+
_check(p.rglob("dir*/**/"), ["dirC/dirD/"])
20762076
_check(p.rglob("*/*"), ["dirC/dirD/fileD"])
2077-
_check(p.rglob("*/"), ["dirC/dirD"])
2078-
_check(p.rglob(""), ["dirC", "dirC/dirD"])
2079-
_check(p.rglob("**/"), ["dirC", "dirC/dirD"])
2077+
_check(p.rglob("*/"), ["dirC/dirD/"])
2078+
_check(p.rglob(""), ["dirC/", "dirC/dirD/"])
2079+
_check(p.rglob("**/"), ["dirC/", "dirC/dirD/"])
20802080
# gh-91616, a re module regression
20812081
_check(p.rglob("*.txt"), ["dirC/novel.txt"])
20822082
_check(p.rglob("*.*"), ["dirC/novel.txt"])
@@ -2095,18 +2095,18 @@ def _check(path, glob, expected):
20952095
_check(p, "*/fileB", ["dirB/fileB", "dirA/linkC/fileB", "linkB/fileB"])
20962096
_check(p, "file*", ["fileA", "dirA/linkC/fileB", "dirB/fileB",
20972097
"dirC/fileC", "dirC/dirD/fileD", "linkB/fileB"])
2098-
_check(p, "*/", ["dirA", "dirA/linkC", "dirA/linkC/linkD", "dirB", "dirB/linkD",
2099-
"dirC", "dirC/dirD", "dirE", "linkB", "linkB/linkD"])
2100-
_check(p, "", ["", "dirA", "dirA/linkC", "dirA/linkC/linkD", "dirB", "dirB/linkD",
2101-
"dirC", "dirE", "dirC/dirD", "linkB", "linkB/linkD"])
2098+
_check(p, "*/", ["dirA/", "dirA/linkC/", "dirA/linkC/linkD/", "dirB/", "dirB/linkD/",
2099+
"dirC/", "dirC/dirD/", "dirE/", "linkB/", "linkB/linkD/"])
2100+
_check(p, "", ["./", "dirA/", "dirA/linkC/", "dirA/linkC/linkD/", "dirB/", "dirB/linkD/",
2101+
"dirC/", "dirE/", "dirC/dirD/", "linkB/", "linkB/linkD/"])
21022102

21032103
p = P(BASE, "dirC")
21042104
_check(p, "*", ["dirC/fileC", "dirC/novel.txt",
21052105
"dirC/dirD", "dirC/dirD/fileD"])
21062106
_check(p, "file*", ["dirC/fileC", "dirC/dirD/fileD"])
21072107
_check(p, "*/*", ["dirC/dirD/fileD"])
2108-
_check(p, "*/", ["dirC/dirD"])
2109-
_check(p, "", ["dirC", "dirC/dirD"])
2108+
_check(p, "*/", ["dirC/dirD/"])
2109+
_check(p, "", ["dirC/", "dirC/dirD/"])
21102110
# gh-91616, a re module regression
21112111
_check(p, "*.txt", ["dirC/novel.txt"])
21122112
_check(p, "*.*", ["dirC/novel.txt"])
@@ -2123,16 +2123,16 @@ def _check(path, glob, expected):
21232123
_check(p, "*/fileA", [])
21242124
_check(p, "*/fileB", ["dirB/fileB"])
21252125
_check(p, "file*", ["fileA", "dirB/fileB", "dirC/fileC", "dirC/dirD/fileD", ])
2126-
_check(p, "*/", ["dirA", "dirB", "dirC", "dirC/dirD", "dirE"])
2127-
_check(p, "", ["", "dirA", "dirB", "dirC", "dirE", "dirC/dirD"])
2126+
_check(p, "*/", ["dirA/", "dirB/", "dirC/", "dirC/dirD/", "dirE/"])
2127+
_check(p, "", ["./", "dirA/", "dirB/", "dirC/", "dirE/", "dirC/dirD/"])
21282128

21292129
p = P(BASE, "dirC")
21302130
_check(p, "*", ["dirC/fileC", "dirC/novel.txt",
21312131
"dirC/dirD", "dirC/dirD/fileD"])
21322132
_check(p, "file*", ["dirC/fileC", "dirC/dirD/fileD"])
21332133
_check(p, "*/*", ["dirC/dirD/fileD"])
2134-
_check(p, "*/", ["dirC/dirD"])
2135-
_check(p, "", ["dirC", "dirC/dirD"])
2134+
_check(p, "*/", ["dirC/dirD/"])
2135+
_check(p, "", ["dirC/", "dirC/dirD/"])
21362136
# gh-91616, a re module regression
21372137
_check(p, "*.txt", ["dirC/novel.txt"])
21382138
_check(p, "*.*", ["dirC/novel.txt"])
@@ -3642,7 +3642,7 @@ def test_glob(self):
36423642
P = self.cls
36433643
p = P(BASE)
36443644
self.assertEqual(set(p.glob("FILEa")), { P(BASE, "fileA") })
3645-
self.assertEqual(set(p.glob("*a\\")), { P(BASE, "dirA") })
3645+
self.assertEqual(set(p.glob("*a\\")), { P(BASE, "dirA/") })
36463646
self.assertEqual(set(p.glob("F*a")), { P(BASE, "fileA") })
36473647
self.assertEqual(set(map(str, p.glob("FILEa"))), {f"{p}\\fileA"})
36483648
self.assertEqual(set(map(str, p.glob("F*a"))), {f"{p}\\fileA"})
@@ -3651,7 +3651,7 @@ def test_rglob(self):
36513651
P = self.cls
36523652
p = P(BASE, "dirC")
36533653
self.assertEqual(set(p.rglob("FILEd")), { P(BASE, "dirC/dirD/fileD") })
3654-
self.assertEqual(set(p.rglob("*\\")), { P(BASE, "dirC/dirD") })
3654+
self.assertEqual(set(p.rglob("*\\")), { P(BASE, "dirC/dirD/") })
36553655
self.assertEqual(set(map(str, p.rglob("FILEd"))), {f"{p}\\dirD\\fileD"})
36563656

36573657
def test_expanduser(self):

0 commit comments

Comments
 (0)