@@ -1425,6 +1425,21 @@ def test_quoting(self):
14251425 "url2pathname() failed; %s != %s" %
14261426 (expect , result ))
14271427
1428+ def test_pathname2url (self ):
1429+ # Test cases common to Windows and POSIX.
1430+ fn = urllib .request .pathname2url
1431+ sep = os .path .sep
1432+ self .assertEqual (fn ('' ), '' )
1433+ self .assertEqual (fn (f'{ sep } ' ), '///' )
1434+ self .assertEqual (fn (f'{ sep } { sep } ' ), '////' )
1435+ self .assertEqual (fn ('a' ), 'a' )
1436+ self .assertEqual (fn (f'a{ sep } b.c' ), 'a/b.c' )
1437+ self .assertEqual (fn (f'{ sep } a{ sep } b.c' ), '///a/b.c' )
1438+ self .assertEqual (fn (f'{ sep } { sep } a{ sep } b.c' ), '////a/b.c' )
1439+ self .assertEqual (fn (f'{ sep } { sep } { sep } a{ sep } b.c' ), '/////a/b.c' )
1440+ self .assertEqual (fn (f'{ sep } { sep } { sep } { sep } a{ sep } b.c' ), '//////a/b.c' )
1441+ self .assertEqual (fn (f'{ sep } a{ sep } b%#c' ), '///a/b%25%23c' )
1442+
14281443 @unittest .skipUnless (sys .platform == 'win32' ,
14291444 'test specific to Windows pathnames.' )
14301445 def test_pathname2url_win (self ):
@@ -1463,29 +1478,32 @@ def test_pathname2url_win(self):
14631478 for url in urls :
14641479 self .assertEqual (fn (urllib .request .url2pathname (url )), url )
14651480
1466- @unittest .skipIf (sys .platform == 'win32' ,
1467- 'test specific to POSIX pathnames' )
1468- def test_pathname2url_posix (self ):
1469- fn = urllib .request .pathname2url
1470- self .assertEqual (fn ('/' ), '///' )
1471- self .assertEqual (fn ('/a/b.c' ), '///a/b.c' )
1472- self .assertEqual (fn ('//a/b.c' ), '////a/b.c' )
1473- self .assertEqual (fn ('///a/b.c' ), '/////a/b.c' )
1474- self .assertEqual (fn ('////a/b.c' ), '//////a/b.c' )
1475- self .assertEqual (fn ('/a/b%#c' ), '///a/b%25%23c' )
1476-
14771481 @unittest .skipUnless (os_helper .FS_NONASCII , 'need os_helper.FS_NONASCII' )
14781482 def test_pathname2url_nonascii (self ):
14791483 encoding = sys .getfilesystemencoding ()
14801484 errors = sys .getfilesystemencodeerrors ()
14811485 url = urllib .parse .quote (os_helper .FS_NONASCII , encoding = encoding , errors = errors )
14821486 self .assertEqual (urllib .request .pathname2url (os_helper .FS_NONASCII ), url )
14831487
1488+ def test_url2pathname (self ):
1489+ # Test cases common to Windows and POSIX.
1490+ fn = urllib .request .url2pathname
1491+ sep = os .path .sep
1492+ self .assertEqual (fn ('' ), '' )
1493+ self .assertEqual (fn ('/' ), f'{ sep } ' )
1494+ self .assertEqual (fn ('///' ), f'{ sep } ' )
1495+ self .assertEqual (fn ('////' ), f'{ sep } { sep } ' )
1496+ self .assertEqual (fn ('foo' ), 'foo' )
1497+ self .assertEqual (fn ('foo/bar' ), f'foo{ sep } bar' )
1498+ self .assertEqual (fn ('/foo/bar' ), f'{ sep } foo{ sep } bar' )
1499+ self .assertEqual (fn ('//localhost/foo/bar' ), f'{ sep } foo{ sep } bar' )
1500+ self .assertEqual (fn ('///foo/bar' ), f'{ sep } foo{ sep } bar' )
1501+ self .assertEqual (fn ('////foo/bar' ), f'{ sep } { sep } foo{ sep } bar' )
1502+
14841503 @unittest .skipUnless (sys .platform == 'win32' ,
14851504 'test specific to Windows pathnames.' )
14861505 def test_url2pathname_win (self ):
14871506 fn = urllib .request .url2pathname
1488- self .assertEqual (fn ('/' ), '\\ ' )
14891507 self .assertEqual (fn ('/C:/' ), 'C:\\ ' )
14901508 self .assertEqual (fn ("///C|" ), 'C:' )
14911509 self .assertEqual (fn ("///C:" ), 'C:' )
@@ -1531,15 +1549,11 @@ def test_url2pathname_win(self):
15311549 'test specific to POSIX pathnames' )
15321550 def test_url2pathname_posix (self ):
15331551 fn = urllib .request .url2pathname
1534- self .assertEqual (fn ('/foo/bar' ), '/foo/bar' )
15351552 self .assertRaises (urllib .error .URLError , fn , '//foo/bar' )
15361553 self .assertRaises (urllib .error .URLError , fn , '//localhost:/foo/bar' )
15371554 self .assertRaises (urllib .error .URLError , fn , '//:80/foo/bar' )
15381555 self .assertRaises (urllib .error .URLError , fn , '//:/foo/bar' )
15391556 self .assertRaises (urllib .error .URLError , fn , '//c:80/foo/bar' )
1540- self .assertEqual (fn ('///foo/bar' ), '/foo/bar' )
1541- self .assertEqual (fn ('////foo/bar' ), '//foo/bar' )
1542- self .assertEqual (fn ('//localhost/foo/bar' ), '/foo/bar' )
15431557 self .assertEqual (fn ('//127.0.0.1/foo/bar' ), '/foo/bar' )
15441558 self .assertEqual (fn (f'//{ socket .gethostname ()} /foo/bar' ), '/foo/bar' )
15451559
0 commit comments