def constructLocalFileUrl(self, filePath):
filePath = os.path.abspath(filePath)
- try:
- filePath.encode("utf-8")
- except UnicodeEncodeError:
- raise unittest.SkipTest("filePath is not encodable to utf8")
return "file://%s" % urllib.request.pathname2url(filePath)
def createNewTempFile(self, data=b""):
self.assertEqual(fn('/a/b.c'), '/a/b.c')
self.assertEqual(fn('/a/b%#c'), '/a/b%25%23c')
+ @unittest.skipUnless(os_helper.FS_NONASCII, 'need os_helper.FS_NONASCII')
+ def test_pathname2url_nonascii(self):
+ encoding = sys.getfilesystemencoding()
+ errors = sys.getfilesystemencodeerrors()
+ url = urllib.parse.quote(os_helper.FS_NONASCII, encoding=encoding, errors=errors)
+ self.assertEqual(urllib.request.pathname2url(os_helper.FS_NONASCII), url)
+
@unittest.skipUnless(sys.platform == 'win32',
'test specific to Windows pathnames.')
def test_url2pathname_win(self):
self.assertEqual(fn('////foo/bar'), '//foo/bar')
self.assertEqual(fn('//localhost/foo/bar'), '//localhost/foo/bar')
+ @unittest.skipUnless(os_helper.FS_NONASCII, 'need os_helper.FS_NONASCII')
+ def test_url2pathname_nonascii(self):
+ encoding = sys.getfilesystemencoding()
+ errors = sys.getfilesystemencodeerrors()
+ url = os_helper.FS_NONASCII
+ self.assertEqual(urllib.request.url2pathname(url), os_helper.FS_NONASCII)
+ url = urllib.parse.quote(url, encoding=encoding, errors=errors)
+ self.assertEqual(urllib.request.url2pathname(url), os_helper.FS_NONASCII)
+
class Utility_Tests(unittest.TestCase):
"""Testcase to test the various utility functions in the urllib."""
# URL has an empty authority section, so the path begins on the
# third character.
pathname = pathname[2:]
- return unquote(pathname)
+ encoding = sys.getfilesystemencoding()
+ errors = sys.getfilesystemencodeerrors()
+ return unquote(pathname, encoding=encoding, errors=errors)
def pathname2url(pathname):
"""OS-specific conversion from a file system path to a relative URL
of the 'file' scheme; not recommended for general use."""
- return quote(pathname)
+ encoding = sys.getfilesystemencoding()
+ errors = sys.getfilesystemencodeerrors()
+ return quote(pathname, encoding=encoding, errors=errors)
ftpcache = {}