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):

`