GH-123599: url2pathname()
: handle authority section in file URL (#1… · python/cpython@66cdb2b (original) (raw)
`@@ -11,6 +11,7 @@
`
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):
`