@@ -1429,10 +1429,10 @@ def __repr__(self):
1429
1429
return "{}({!r})" .format (self .__class__ .__name__ , self .as_posix ())
1430
1430
1431
1431
def stat (self , * , follow_symlinks = True ):
1432
- if follow_symlinks :
1433
- path = str (self .resolve ())
1432
+ if follow_symlinks or self . name in ( '' , '.' , '..' ) :
1433
+ path = str (self .resolve (strict = True ))
1434
1434
else :
1435
- path = str (self .parent .resolve () / self .name )
1435
+ path = str (self .parent .resolve (strict = True ) / self .name )
1436
1436
if path in self ._files :
1437
1437
st_mode = stat .S_IFREG
1438
1438
elif path in self ._directories :
@@ -1741,8 +1741,9 @@ def _check(glob, expected):
1741
1741
def test_glob_posix (self ):
1742
1742
P = self .cls
1743
1743
p = P (self .base )
1744
+ q = p / "FILEa"
1744
1745
given = set (p .glob ("FILEa" ))
1745
- expect = set ()
1746
+ expect = { q } if q . exists () else set ()
1746
1747
self .assertEqual (given , expect )
1747
1748
self .assertEqual (set (p .glob ("FILEa*" )), set ())
1748
1749
@@ -1753,8 +1754,6 @@ def test_glob_windows(self):
1753
1754
self .assertEqual (set (p .glob ("FILEa" )), { P (self .base , "fileA" ) })
1754
1755
self .assertEqual (set (p .glob ("*a\\ " )), { P (self .base , "dirA/" ) })
1755
1756
self .assertEqual (set (p .glob ("F*a" )), { P (self .base , "fileA" ) })
1756
- self .assertEqual (set (map (str , p .glob ("FILEa" ))), {f"{ p } \\ fileA" })
1757
- self .assertEqual (set (map (str , p .glob ("F*a" ))), {f"{ p } \\ fileA" })
1758
1757
1759
1758
def test_glob_empty_pattern (self ):
1760
1759
P = self .cls
@@ -1857,8 +1856,9 @@ def _check(path, glob, expected):
1857
1856
def test_rglob_posix (self ):
1858
1857
P = self .cls
1859
1858
p = P (self .base , "dirC" )
1859
+ q = p / "dirD" / "FILEd"
1860
1860
given = set (p .rglob ("FILEd" ))
1861
- expect = set ()
1861
+ expect = { q } if q . exists () else set ()
1862
1862
self .assertEqual (given , expect )
1863
1863
self .assertEqual (set (p .rglob ("FILEd*" )), set ())
1864
1864
@@ -1868,7 +1868,6 @@ def test_rglob_windows(self):
1868
1868
p = P (self .base , "dirC" )
1869
1869
self .assertEqual (set (p .rglob ("FILEd" )), { P (self .base , "dirC/dirD/fileD" ) })
1870
1870
self .assertEqual (set (p .rglob ("*\\ " )), { P (self .base , "dirC/dirD/" ) })
1871
- self .assertEqual (set (map (str , p .rglob ("FILEd" ))), {f"{ p } \\ dirD\\ fileD" })
1872
1871
1873
1872
@needs_symlinks
1874
1873
def test_rglob_recurse_symlinks_common (self ):
@@ -1931,7 +1930,11 @@ def test_glob_dotdot(self):
1931
1930
self .assertEqual (set (p .glob ("dirA/../file*" )), { P (self .base , "dirA/../fileA" ) })
1932
1931
self .assertEqual (set (p .glob ("dirA/../file*/.." )), set ())
1933
1932
self .assertEqual (set (p .glob ("../xyzzy" )), set ())
1934
- self .assertEqual (set (p .glob ("xyzzy/.." )), set ())
1933
+ if self .cls .parser is posixpath :
1934
+ self .assertEqual (set (p .glob ("xyzzy/.." )), set ())
1935
+ else :
1936
+ # ".." segments are normalized first on Windows, so this path is stat()able.
1937
+ self .assertEqual (set (p .glob ("xyzzy/.." )), { P (self .base , "xyzzy" , ".." ) })
1935
1938
self .assertEqual (set (p .glob ("/" .join ([".." ] * 50 ))), { P (self .base , * [".." ] * 50 )})
1936
1939
1937
1940
@needs_symlinks
0 commit comments