125
129
eq('http://host/~bob%2525-._',
126
130
normalize_url(u'http://host/%7Ebob%2525%2D%2E%5F'))
133
# On Python 2, normalize verifies URLs when they are not unicode
134
# (indicating they did not come from the user)
135
self.assertRaises(urlutils.InvalidURL, normalize_url,
137
self.assertRaises(urlutils.InvalidURL,
138
normalize_url, b'http://host/ ')
128
140
def test_url_scheme_re(self):
129
141
# Test paths that may be URLs
130
142
def test_one(url, scheme_and_path):
438
450
self.assertEqual(
439
451
'file://HOST/path/to/r%C3%A4ksm%C3%B6rg%C3%A5s', result)
440
self.assertFalse(isinstance(result, str))
452
self.assertFalse(isinstance(result, text_type))
442
454
def test_win32_local_path_from_url(self):
443
455
from_url = urlutils._win32_local_path_from_url
527
539
self.assertEqual(('path/..', 'foo'), split('path/../foo'))
528
540
self.assertEqual(('../path', 'foo'), split('../path/foo'))
530
def test_strip_segment_parameters(self):
531
strip_segment_parameters = urlutils.strip_segment_parameters
532
# Check relative references with absolute paths
533
self.assertEqual("/some/path",
534
strip_segment_parameters("/some/path"))
535
self.assertEqual("/some/path",
536
strip_segment_parameters("/some/path,tip"))
537
self.assertEqual("/some,dir/path",
538
strip_segment_parameters("/some,dir/path,tip"))
541
strip_segment_parameters("/somedir/path,heads%2Ftip"))
544
strip_segment_parameters("/somedir/path,heads%2Ftip,bar"))
545
# Check relative references with relative paths
546
self.assertEqual("", strip_segment_parameters(",key1=val1"))
547
self.assertEqual("foo/", strip_segment_parameters("foo/,key1=val1"))
548
self.assertEqual("foo", strip_segment_parameters("foo,key1=val1"))
550
"foo/base,la=bla/other/elements",
551
strip_segment_parameters("foo/base,la=bla/other/elements"))
553
"foo/base,la=bla/other/elements",
554
strip_segment_parameters("foo/base,la=bla/other/elements,a=b"))
555
# TODO: Check full URLs as well as relative references
557
542
def test_split_segment_parameters_raw(self):
558
543
split_segment_parameters_raw = urlutils.split_segment_parameters_raw
559
544
# Check relative references with absolute paths
666
651
# Test that URLs are converted to nice unicode strings for display
667
652
def test(expected, url, encoding='utf-8'):
668
653
disp_url = urlutils.unescape_for_display(url, encoding=encoding)
669
self.assertIsInstance(disp_url, str)
654
self.assertIsInstance(disp_url, text_type)
670
655
self.assertEqual(expected, disp_url)
672
657
test('http://foo', 'http://foo')
715
700
self.assertEqual('%', urlutils.unescape('%25'))
716
701
self.assertEqual(u'\xe5', urlutils.unescape('%C3%A5'))
704
self.assertRaises(urlutils.InvalidURL, urlutils.unescape, u'\xe5')
718
705
self.assertRaises((TypeError, urlutils.InvalidURL),
719
706
urlutils.unescape, b'\xe5')
720
self.assertEqual('\xe5', urlutils.unescape('%C3%A5'))
708
self.assertRaises(urlutils.InvalidURL, urlutils.unescape, '%E5')
710
self.assertEqual('\xe5', urlutils.unescape('%C3%A5'))
722
712
def test_escape_unescape(self):
723
713
self.assertEqual(u'\xe5', urlutils.unescape(urlutils.escape(u'\xe5')))
1124
1114
def test_unquote(self):
1125
1115
self.assertEqual('%', urlutils.unquote('%25'))
1126
self.assertEqual('\xe5', urlutils.unquote('%C3%A5'))
1117
self.assertEqual('\xe5', urlutils.unquote('%C3%A5'))
1119
self.assertEqual('\xc3\xa5', urlutils.unquote('%C3%A5'))
1127
1120
self.assertEqual(u"\xe5", urlutils.unquote(u'\xe5'))
1129
1122
def test_unquote_to_bytes(self):