@@ -304,25 +304,51 @@ def test_expanduser_pwd(self):
304304 for path in ('~' , '~/.local' , '~vstinner/' ):
305305 self .assertEqual (posixpath .expanduser (path ), path )
306306
307+ NORMPATH_CASES = [
308+ ("" , "." ),
309+ ("/" , "/" ),
310+ ("/." , "/" ),
311+ ("/./" , "/" ),
312+ ("/.//." , "/" ),
313+ ("/foo" , "/foo" ),
314+ ("/foo/bar" , "/foo/bar" ),
315+ ("//" , "//" ),
316+ ("///" , "/" ),
317+ ("///foo/.//bar//" , "/foo/bar" ),
318+ ("///foo/.//bar//.//..//.//baz///" , "/foo/baz" ),
319+ ("///..//./foo/.//bar" , "/foo/bar" ),
320+ ("." , "." ),
321+ (".//." , "." ),
322+ (".." , ".." ),
323+ ("../" , ".." ),
324+ ("../foo" , "../foo" ),
325+ ("../../foo" , "../../foo" ),
326+ ("../foo/../bar" , "../bar" ),
327+ ("../../foo/../bar/./baz/boom/.." , "../../bar/baz" ),
328+ ("/.." , "/" ),
329+ ("/.." , "/" ),
330+ ("/../" , "/" ),
331+ ("/..//" , "/" ),
332+ ("//.." , "//" ),
333+ ("/../foo" , "/foo" ),
334+ ("/../../foo" , "/foo" ),
335+ ("/../foo/../" , "/" ),
336+ ("/../foo/../bar" , "/bar" ),
337+ ("/../../foo/../bar/./baz/boom/.." , "/bar/baz" ),
338+ ("/../../foo/../bar/./baz/boom/." , "/bar/baz/boom" ),
339+ ]
340+
307341 def test_normpath (self ):
308- self .assertEqual (posixpath .normpath ("" ), "." )
309- self .assertEqual (posixpath .normpath ("/" ), "/" )
310- self .assertEqual (posixpath .normpath ("//" ), "//" )
311- self .assertEqual (posixpath .normpath ("///" ), "/" )
312- self .assertEqual (posixpath .normpath ("///foo/.//bar//" ), "/foo/bar" )
313- self .assertEqual (posixpath .normpath ("///foo/.//bar//.//..//.//baz" ),
314- "/foo/baz" )
315- self .assertEqual (posixpath .normpath ("///..//./foo/.//bar" ), "/foo/bar" )
316-
317- self .assertEqual (posixpath .normpath (b"" ), b"." )
318- self .assertEqual (posixpath .normpath (b"/" ), b"/" )
319- self .assertEqual (posixpath .normpath (b"//" ), b"//" )
320- self .assertEqual (posixpath .normpath (b"///" ), b"/" )
321- self .assertEqual (posixpath .normpath (b"///foo/.//bar//" ), b"/foo/bar" )
322- self .assertEqual (posixpath .normpath (b"///foo/.//bar//.//..//.//baz" ),
323- b"/foo/baz" )
324- self .assertEqual (posixpath .normpath (b"///..//./foo/.//bar" ),
325- b"/foo/bar" )
342+ for path , expected in self .NORMPATH_CASES :
343+ with self .subTest (path ):
344+ result = posixpath .normpath (path )
345+ self .assertEqual (result , expected )
346+
347+ path = path .encode ('utf-8' )
348+ expected = expected .encode ('utf-8' )
349+ with self .subTest (path , type = bytes ):
350+ result = posixpath .normpath (path )
351+ self .assertEqual (result , expected )
326352
327353 @skip_if_ABSTFN_contains_backslash
328354 def test_realpath_curdir (self ):
0 commit comments