|
19 | 19 | ssl = None
|
20 | 20 | import sys
|
21 | 21 | import tempfile
|
22 |
| -from nturl2path import url2pathname, pathname2url |
23 | 22 |
|
24 | 23 | from base64 import b64encode
|
25 | 24 | import collections
|
@@ -1520,39 +1519,86 @@ def test_quoting(self):
|
1520 | 1519 | (expect, result))
|
1521 | 1520 |
|
1522 | 1521 | @unittest.skipUnless(sys.platform == 'win32',
|
1523 |
| - 'test specific to the nturl2path functions.') |
1524 |
| - def test_prefixes(self): |
| 1522 | + 'test specific to Windows pathnames.') |
| 1523 | + def test_pathname2url_win(self): |
1525 | 1524 | # Test special prefixes are correctly handled in pathname2url()
|
1526 |
| - given = '\\\\?\\C:\\dir' |
1527 |
| - expect = '///C:/dir' |
1528 |
| - result = urllib.request.pathname2url(given) |
1529 |
| - self.assertEqual(expect, result, |
1530 |
| - "pathname2url() failed; %s != %s" % |
1531 |
| - (expect, result)) |
1532 |
| - given = '\\\\?\\unc\\server\\share\\dir' |
1533 |
| - expect = '/server/share/dir' |
1534 |
| - result = urllib.request.pathname2url(given) |
1535 |
| - self.assertEqual(expect, result, |
1536 |
| - "pathname2url() failed; %s != %s" % |
1537 |
| - (expect, result)) |
1538 |
| - |
| 1525 | + fn = urllib.request.pathname2url |
| 1526 | + self.assertEqual(fn('\\\\?\\C:\\dir'), '///C:/dir') |
| 1527 | + self.assertEqual(fn('\\\\?\\unc\\server\\share\\dir'), '/server/share/dir') |
| 1528 | + self.assertEqual(fn("C:"), '///C:') |
| 1529 | + self.assertEqual(fn("C:\\"), '///C:') |
| 1530 | + self.assertEqual(fn('C:\\a\\b.c'), '///C:/a/b.c') |
| 1531 | + self.assertEqual(fn('C:\\a\\b%#c'), '///C:/a/b%25%23c') |
| 1532 | + self.assertEqual(fn('C:\\a\\b\xe9'), '///C:/a/b%C3%A9') |
| 1533 | + self.assertEqual(fn('C:\\foo\\bar\\spam.foo'), "///C:/foo/bar/spam.foo") |
| 1534 | + # Long drive letter |
| 1535 | + self.assertRaises(IOError, fn, "XX:\\") |
| 1536 | + # No drive letter |
| 1537 | + self.assertEqual(fn("\\folder\\test\\"), '/folder/test/') |
| 1538 | + self.assertEqual(fn("\\\\folder\\test\\"), '////folder/test/') |
| 1539 | + self.assertEqual(fn("\\\\\\folder\\test\\"), '/////folder/test/') |
| 1540 | + self.assertEqual(fn('\\\\some\\share\\'), '////some/share/') |
| 1541 | + self.assertEqual(fn('\\\\some\\share\\a\\b.c'), '////some/share/a/b.c') |
| 1542 | + self.assertEqual(fn('\\\\some\\share\\a\\b%#c\xe9'), '////some/share/a/b%25%23c%C3%A9') |
| 1543 | + # Round-tripping |
| 1544 | + urls = ['///C:', |
| 1545 | + '/////folder/test/', |
| 1546 | + '///C:/foo/bar/spam.foo'] |
| 1547 | + for url in urls: |
| 1548 | + self.assertEqual(fn(urllib.request.url2pathname(url)), url) |
| 1549 | + |
| 1550 | + @unittest.skipIf(sys.platform == 'win32', |
| 1551 | + 'test specific to POSIX pathnames') |
| 1552 | + def test_pathname2url_posix(self): |
| 1553 | + fn = urllib.request.pathname2url |
| 1554 | + self.assertEqual(fn('/'), '/') |
| 1555 | + self.assertEqual(fn('/a/b.c'), '/a/b.c') |
| 1556 | + self.assertEqual(fn('/a/b%#c'), '/a/b%25%23c') |
1539 | 1557 |
|
1540 | 1558 | @unittest.skipUnless(sys.platform == 'win32',
|
1541 |
| - 'test specific to the urllib.url2path function.') |
1542 |
| - def test_ntpath(self): |
1543 |
| - given = ('/C:/', '///C:/', '/C|//') |
1544 |
| - expect = 'C:\\' |
1545 |
| - for url in given: |
1546 |
| - result = urllib.request.url2pathname(url) |
1547 |
| - self.assertEqual(expect, result, |
1548 |
| - 'urllib.request..url2pathname() failed; %s != %s' % |
1549 |
| - (expect, result)) |
1550 |
| - given = '///C|/path' |
1551 |
| - expect = 'C:\\path' |
1552 |
| - result = urllib.request.url2pathname(given) |
1553 |
| - self.assertEqual(expect, result, |
1554 |
| - 'urllib.request.url2pathname() failed; %s != %s' % |
1555 |
| - (expect, result)) |
| 1559 | + 'test specific to Windows pathnames.') |
| 1560 | + def test_url2pathname_win(self): |
| 1561 | + fn = urllib.request.url2pathname |
| 1562 | + self.assertEqual(fn('/C:/'), 'C:\\') |
| 1563 | + self.assertEqual(fn("///C|"), 'C:') |
| 1564 | + self.assertEqual(fn("///C:"), 'C:') |
| 1565 | + self.assertEqual(fn('///C:/'), 'C:\\') |
| 1566 | + self.assertEqual(fn('/C|//'), 'C:\\') |
| 1567 | + self.assertEqual(fn('///C|/path'), 'C:\\path') |
| 1568 | + # No DOS drive |
| 1569 | + self.assertEqual(fn("///C/test/"), '\\\\\\C\\test\\') |
| 1570 | + self.assertEqual(fn("////C/test/"), '\\\\C\\test\\') |
| 1571 | + # DOS drive paths |
| 1572 | + self.assertEqual(fn('C:/path/to/file'), 'C:\\path\\to\\file') |
| 1573 | + self.assertEqual(fn('C|/path/to/file'), 'C:\\path\\to\\file') |
| 1574 | + self.assertEqual(fn('/C|/path/to/file'), 'C:\\path\\to\\file') |
| 1575 | + self.assertEqual(fn('///C|/path/to/file'), 'C:\\path\\to\\file') |
| 1576 | + self.assertEqual(fn("///C|/foo/bar/spam.foo"), 'C:\\foo\\bar\\spam.foo') |
| 1577 | + # Non-ASCII drive letter |
| 1578 | + self.assertRaises(IOError, fn, "///\u00e8|/") |
| 1579 | + # UNC paths |
| 1580 | + self.assertEqual(fn('//server/path/to/file'), '\\\\server\\path\\to\\file') |
| 1581 | + self.assertEqual(fn('////server/path/to/file'), '\\\\server\\path\\to\\file') |
| 1582 | + self.assertEqual(fn('/////server/path/to/file'), '\\\\\\server\\path\\to\\file') |
| 1583 | + # Localhost paths |
| 1584 | + self.assertEqual(fn('//localhost/C:/path/to/file'), 'C:\\path\\to\\file') |
| 1585 | + self.assertEqual(fn('//localhost/C|/path/to/file'), 'C:\\path\\to\\file') |
| 1586 | + # Round-tripping |
| 1587 | + paths = ['C:', |
| 1588 | + r'\\\C\test\\', |
| 1589 | + r'C:\foo\bar\spam.foo'] |
| 1590 | + for path in paths: |
| 1591 | + self.assertEqual(fn(urllib.request.pathname2url(path)), path) |
| 1592 | + |
| 1593 | + @unittest.skipIf(sys.platform == 'win32', |
| 1594 | + 'test specific to POSIX pathnames') |
| 1595 | + def test_url2pathname_posix(self): |
| 1596 | + fn = urllib.request.url2pathname |
| 1597 | + self.assertEqual(fn('/foo/bar'), '/foo/bar') |
| 1598 | + self.assertEqual(fn('//foo/bar'), '//foo/bar') |
| 1599 | + self.assertEqual(fn('///foo/bar'), '///foo/bar') |
| 1600 | + self.assertEqual(fn('////foo/bar'), '////foo/bar') |
| 1601 | + self.assertEqual(fn('//localhost/foo/bar'), '//localhost/foo/bar') |
1556 | 1602 |
|
1557 | 1603 | class Utility_Tests(unittest.TestCase):
|
1558 | 1604 | """Testcase to test the various utility functions in the urllib."""
|
@@ -1636,60 +1682,5 @@ def test_with_method_arg(self):
|
1636 | 1682 | self.assertEqual(request.get_method(), 'HEAD')
|
1637 | 1683 |
|
1638 | 1684 |
|
1639 |
| -class URL2PathNameTests(unittest.TestCase): |
1640 |
| - |
1641 |
| - def test_converting_drive_letter(self): |
1642 |
| - self.assertEqual(url2pathname("///C|"), 'C:') |
1643 |
| - self.assertEqual(url2pathname("///C:"), 'C:') |
1644 |
| - self.assertEqual(url2pathname("///C|/"), 'C:\\') |
1645 |
| - |
1646 |
| - def test_converting_when_no_drive_letter(self): |
1647 |
| - # cannot end a raw string in \ |
1648 |
| - self.assertEqual(url2pathname("///C/test/"), r'\\\C\test' '\\') |
1649 |
| - self.assertEqual(url2pathname("////C/test/"), r'\\C\test' '\\') |
1650 |
| - |
1651 |
| - def test_simple_compare(self): |
1652 |
| - self.assertEqual(url2pathname("///C|/foo/bar/spam.foo"), |
1653 |
| - r'C:\foo\bar\spam.foo') |
1654 |
| - |
1655 |
| - def test_non_ascii_drive_letter(self): |
1656 |
| - self.assertRaises(IOError, url2pathname, "///\u00e8|/") |
1657 |
| - |
1658 |
| - def test_roundtrip_url2pathname(self): |
1659 |
| - list_of_paths = ['C:', |
1660 |
| - r'\\\C\test\\', |
1661 |
| - r'C:\foo\bar\spam.foo' |
1662 |
| - ] |
1663 |
| - for path in list_of_paths: |
1664 |
| - self.assertEqual(url2pathname(pathname2url(path)), path) |
1665 |
| - |
1666 |
| -class PathName2URLTests(unittest.TestCase): |
1667 |
| - |
1668 |
| - def test_converting_drive_letter(self): |
1669 |
| - self.assertEqual(pathname2url("C:"), '///C:') |
1670 |
| - self.assertEqual(pathname2url("C:\\"), '///C:') |
1671 |
| - |
1672 |
| - def test_converting_when_no_drive_letter(self): |
1673 |
| - self.assertEqual(pathname2url(r"\\\folder\test" "\\"), |
1674 |
| - '/////folder/test/') |
1675 |
| - self.assertEqual(pathname2url(r"\\folder\test" "\\"), |
1676 |
| - '////folder/test/') |
1677 |
| - self.assertEqual(pathname2url(r"\folder\test" "\\"), |
1678 |
| - '/folder/test/') |
1679 |
| - |
1680 |
| - def test_simple_compare(self): |
1681 |
| - self.assertEqual(pathname2url(r'C:\foo\bar\spam.foo'), |
1682 |
| - "///C:/foo/bar/spam.foo" ) |
1683 |
| - |
1684 |
| - def test_long_drive_letter(self): |
1685 |
| - self.assertRaises(IOError, pathname2url, "XX:\\") |
1686 |
| - |
1687 |
| - def test_roundtrip_pathname2url(self): |
1688 |
| - list_of_paths = ['///C:', |
1689 |
| - '/////folder/test/', |
1690 |
| - '///C:/foo/bar/spam.foo'] |
1691 |
| - for path in list_of_paths: |
1692 |
| - self.assertEqual(pathname2url(url2pathname(path)), path) |
1693 |
| - |
1694 | 1685 | if __name__ == '__main__':
|
1695 | 1686 | unittest.main()
|
0 commit comments