1111from test .support import os_helper
1212from test .support import socket_helper
1313import os
14+ import socket
1415try :
1516 import ssl
1617except ImportError :
@@ -1424,6 +1425,17 @@ def test_quoting(self):
14241425 "url2pathname() failed; %s != %s" %
14251426 (expect , result ))
14261427
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 (sep ), '///' )
1434+ self .assertEqual (fn ('a' ), 'a' )
1435+ self .assertEqual (fn (f'a{ sep } b.c' ), 'a/b.c' )
1436+ self .assertEqual (fn (f'{ sep } a{ sep } b.c' ), '///a/b.c' )
1437+ self .assertEqual (fn (f'{ sep } a{ sep } b%#c' ), '///a/b%25%23c' )
1438+
14271439 @unittest .skipUnless (sys .platform == 'win32' ,
14281440 'test specific to Windows pathnames.' )
14291441 def test_pathname2url_win (self ):
@@ -1466,12 +1478,9 @@ def test_pathname2url_win(self):
14661478 'test specific to POSIX pathnames' )
14671479 def test_pathname2url_posix (self ):
14681480 fn = urllib .request .pathname2url
1469- self .assertEqual (fn ('/' ), '///' )
1470- self .assertEqual (fn ('/a/b.c' ), '///a/b.c' )
14711481 self .assertEqual (fn ('//a/b.c' ), '////a/b.c' )
14721482 self .assertEqual (fn ('///a/b.c' ), '/////a/b.c' )
14731483 self .assertEqual (fn ('////a/b.c' ), '//////a/b.c' )
1474- self .assertEqual (fn ('/a/b%#c' ), '///a/b%25%23c' )
14751484
14761485 @unittest .skipUnless (os_helper .FS_NONASCII , 'need os_helper.FS_NONASCII' )
14771486 def test_pathname2url_nonascii (self ):
@@ -1480,11 +1489,25 @@ def test_pathname2url_nonascii(self):
14801489 url = urllib .parse .quote (os_helper .FS_NONASCII , encoding = encoding , errors = errors )
14811490 self .assertEqual (urllib .request .pathname2url (os_helper .FS_NONASCII ), url )
14821491
1492+ def test_url2pathname (self ):
1493+ # Test cases common to Windows and POSIX.
1494+ fn = urllib .request .url2pathname
1495+ sep = os .path .sep
1496+ self .assertEqual (fn ('' ), '' )
1497+ self .assertEqual (fn ('/' ), f'{ sep } ' )
1498+ self .assertEqual (fn ('///' ), f'{ sep } ' )
1499+ self .assertEqual (fn ('////' ), f'{ sep } { sep } ' )
1500+ self .assertEqual (fn ('foo' ), 'foo' )
1501+ self .assertEqual (fn ('foo/bar' ), f'foo{ sep } bar' )
1502+ self .assertEqual (fn ('/foo/bar' ), f'{ sep } foo{ sep } bar' )
1503+ self .assertEqual (fn ('//localhost/foo/bar' ), f'{ sep } foo{ sep } bar' )
1504+ self .assertEqual (fn ('///foo/bar' ), f'{ sep } foo{ sep } bar' )
1505+ self .assertEqual (fn ('////foo/bar' ), f'{ sep } { sep } foo{ sep } bar' )
1506+
14831507 @unittest .skipUnless (sys .platform == 'win32' ,
14841508 'test specific to Windows pathnames.' )
14851509 def test_url2pathname_win (self ):
14861510 fn = urllib .request .url2pathname
1487- self .assertEqual (fn ('/' ), '\\ ' )
14881511 self .assertEqual (fn ('/C:/' ), 'C:\\ ' )
14891512 self .assertEqual (fn ("///C|" ), 'C:' )
14901513 self .assertEqual (fn ("///C:" ), 'C:' )
@@ -1530,11 +1553,13 @@ def test_url2pathname_win(self):
15301553 'test specific to POSIX pathnames' )
15311554 def test_url2pathname_posix (self ):
15321555 fn = urllib .request .url2pathname
1533- self .assertEqual (fn ('/foo/bar' ), '/foo/bar' )
1534- self .assertEqual (fn ('//foo/bar' ), '//foo/bar' )
1535- self .assertEqual (fn ('///foo/bar' ), '/foo/bar' )
1536- self .assertEqual (fn ('////foo/bar' ), '//foo/bar' )
1537- self .assertEqual (fn ('//localhost/foo/bar' ), '/foo/bar' )
1556+ self .assertRaises (urllib .error .URLError , fn , '//foo/bar' )
1557+ self .assertRaises (urllib .error .URLError , fn , '//localhost:/foo/bar' )
1558+ self .assertRaises (urllib .error .URLError , fn , '//:80/foo/bar' )
1559+ self .assertRaises (urllib .error .URLError , fn , '//:/foo/bar' )
1560+ self .assertRaises (urllib .error .URLError , fn , '//c:80/foo/bar' )
1561+ self .assertEqual (fn ('//127.0.0.1/foo/bar' ), '/foo/bar' )
1562+ self .assertEqual (fn (f'//{ socket .gethostname ()} /foo/bar' ), '/foo/bar' )
15381563
15391564 @unittest .skipUnless (os_helper .FS_NONASCII , 'need os_helper.FS_NONASCII' )
15401565 def test_url2pathname_nonascii (self ):
0 commit comments