11
11
from test .support import os_helper
12
12
from test .support import socket_helper
13
13
import os
14
+ import socket
14
15
try :
15
16
import ssl
16
17
except ImportError :
@@ -1424,6 +1425,17 @@ def test_quoting(self):
1424
1425
"url2pathname() failed; %s != %s" %
1425
1426
(expect , result ))
1426
1427
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
+
1427
1439
@unittest .skipUnless (sys .platform == 'win32' ,
1428
1440
'test specific to Windows pathnames.' )
1429
1441
def test_pathname2url_win (self ):
@@ -1466,12 +1478,9 @@ def test_pathname2url_win(self):
1466
1478
'test specific to POSIX pathnames' )
1467
1479
def test_pathname2url_posix (self ):
1468
1480
fn = urllib .request .pathname2url
1469
- self .assertEqual (fn ('/' ), '///' )
1470
- self .assertEqual (fn ('/a/b.c' ), '///a/b.c' )
1471
1481
self .assertEqual (fn ('//a/b.c' ), '////a/b.c' )
1472
1482
self .assertEqual (fn ('///a/b.c' ), '/////a/b.c' )
1473
1483
self .assertEqual (fn ('////a/b.c' ), '//////a/b.c' )
1474
- self .assertEqual (fn ('/a/b%#c' ), '///a/b%25%23c' )
1475
1484
1476
1485
@unittest .skipUnless (os_helper .FS_NONASCII , 'need os_helper.FS_NONASCII' )
1477
1486
def test_pathname2url_nonascii (self ):
@@ -1480,11 +1489,25 @@ def test_pathname2url_nonascii(self):
1480
1489
url = urllib .parse .quote (os_helper .FS_NONASCII , encoding = encoding , errors = errors )
1481
1490
self .assertEqual (urllib .request .pathname2url (os_helper .FS_NONASCII ), url )
1482
1491
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
+
1483
1507
@unittest .skipUnless (sys .platform == 'win32' ,
1484
1508
'test specific to Windows pathnames.' )
1485
1509
def test_url2pathname_win (self ):
1486
1510
fn = urllib .request .url2pathname
1487
- self .assertEqual (fn ('/' ), '\\ ' )
1488
1511
self .assertEqual (fn ('/C:/' ), 'C:\\ ' )
1489
1512
self .assertEqual (fn ("///C|" ), 'C:' )
1490
1513
self .assertEqual (fn ("///C:" ), 'C:' )
@@ -1530,11 +1553,13 @@ def test_url2pathname_win(self):
1530
1553
'test specific to POSIX pathnames' )
1531
1554
def test_url2pathname_posix (self ):
1532
1555
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' )
1538
1563
1539
1564
@unittest .skipUnless (os_helper .FS_NONASCII , 'need os_helper.FS_NONASCII' )
1540
1565
def test_url2pathname_nonascii (self ):
0 commit comments