Lines Matching refs:self

73     def checkRoundtrips(self, url, parsed, split):
75 self.assertEqual(result, parsed)
78 self.assertEqual(t, parsed)
81 self.assertEqual(result2, url)
82 self.assertEqual(result2, result.geturl())
87 self.assertEqual(result3.geturl(), result.geturl())
88 self.assertEqual(result3, result)
89 self.assertEqual(result3.scheme, result.scheme)
90 self.assertEqual(result3.netloc, result.netloc)
91 self.assertEqual(result3.path, result.path)
92 self.assertEqual(result3.params, result.params)
93 self.assertEqual(result3.query, result.query)
94 self.assertEqual(result3.fragment, result.fragment)
95 self.assertEqual(result3.username, result.username)
96 self.assertEqual(result3.password, result.password)
97 self.assertEqual(result3.hostname, result.hostname)
98 self.assertEqual(result3.port, result.port)
102 self.assertEqual(result, split)
105 self.assertEqual(t, split)
107 self.assertEqual(result2, url)
108 self.assertEqual(result2, result.geturl())
112 self.assertEqual(result3.geturl(), result.geturl())
113 self.assertEqual(result3, result)
114 self.assertEqual(result3.scheme, result.scheme)
115 self.assertEqual(result3.netloc, result.netloc)
116 self.assertEqual(result3.path, result.path)
117 self.assertEqual(result3.query, result.query)
118 self.assertEqual(result3.fragment, result.fragment)
119 self.assertEqual(result3.username, result.username)
120 self.assertEqual(result3.password, result.password)
121 self.assertEqual(result3.hostname, result.hostname)
122 self.assertEqual(result3.port, result.port)
124 def test_qsl(self):
127 self.assertEqual(result, expect, "Error parsing %r" % orig)
130 self.assertEqual(result, expect_without_blanks,
133 def test_qs(self):
136 self.assertEqual(result, expect, "Error parsing %r" % orig)
140 self.assertEqual(result, expect_without_blanks,
143 def test_roundtrips(self):
176 self.checkRoundtrips(url, parsed, split)
178 def test_http_roundtrips(self):
214 self.checkRoundtrips(url, parsed, split)
216 def checkJoin(self, base, relurl, expected):
218 self.assertEqual(urllib.parse.urljoin(base, relurl), expected)
221 self.assertEqual(urllib.parse.urljoin(baseb, relurlb), expectedb)
223 def test_unparse_parse(self):
227 self.assertEqual(urllib.parse.urlunsplit(urllib.parse.urlsplit(u)), u)
228 self.assertEqual(urllib.parse.urlunparse(urllib.parse.urlparse(u)), u)
230 def test_RFC1808(self):
232 self.checkJoin(RFC1808_BASE, 'g:h', 'g:h')
233 self.checkJoin(RFC1808_BASE, 'g', 'http://a/b/c/g')
234 self.checkJoin(RFC1808_BASE, './g', 'http://a/b/c/g')
235 self.checkJoin(RFC1808_BASE, 'g/', 'http://a/b/c/g/')
236 self.checkJoin(RFC1808_BASE, '/g', 'http://a/g')
237 self.checkJoin(RFC1808_BASE, '//g', 'http://g')
238 self.checkJoin(RFC1808_BASE, 'g?y', 'http://a/b/c/g?y')
239 self.checkJoin(RFC1808_BASE, 'g?y/./x', 'http://a/b/c/g?y/./x')
240 self.checkJoin(RFC1808_BASE, '#s', 'http://a/b/c/d;p?q#s')
241 self.checkJoin(RFC1808_BASE, 'g#s', 'http://a/b/c/g#s')
242 self.checkJoin(RFC1808_BASE, 'g#s/./x', 'http://a/b/c/g#s/./x')
243 self.checkJoin(RFC1808_BASE, 'g?y#s', 'http://a/b/c/g?y#s')
244 self.checkJoin(RFC1808_BASE, 'g;x', 'http://a/b/c/g;x')
245 self.checkJoin(RFC1808_BASE, 'g;x?y#s', 'http://a/b/c/g;x?y#s')
246 self.checkJoin(RFC1808_BASE, '.', 'http://a/b/c/')
247 self.checkJoin(RFC1808_BASE, './', 'http://a/b/c/')
248 self.checkJoin(RFC1808_BASE, '..', 'http://a/b/')
249 self.checkJoin(RFC1808_BASE, '../', 'http://a/b/')
250 self.checkJoin(RFC1808_BASE, '../g', 'http://a/b/g')
251 self.checkJoin(RFC1808_BASE, '../..', 'http://a/')
252 self.checkJoin(RFC1808_BASE, '../../', 'http://a/')
253 self.checkJoin(RFC1808_BASE, '../../g', 'http://a/g')
256 self.checkJoin(RFC1808_BASE, '', 'http://a/b/c/d;p?q#f')
257 self.checkJoin(RFC1808_BASE, 'g.', 'http://a/b/c/g.')
258 self.checkJoin(RFC1808_BASE, '.g', 'http://a/b/c/.g')
259 self.checkJoin(RFC1808_BASE, 'g..', 'http://a/b/c/g..')
260 self.checkJoin(RFC1808_BASE, '..g', 'http://a/b/c/..g')
261 self.checkJoin(RFC1808_BASE, './../g', 'http://a/b/g')
262 self.checkJoin(RFC1808_BASE, './g/.', 'http://a/b/c/g/')
263 self.checkJoin(RFC1808_BASE, 'g/./h', 'http://a/b/c/g/h')
264 self.checkJoin(RFC1808_BASE, 'g/../h', 'http://a/b/c/h')
268 #self.checkJoin(RFC1808_BASE, 'http:g', 'http:g')
269 #self.checkJoin(RFC1808_BASE, 'http:', 'http:')
272 # self.checkJoin(RFC1808_BASE, '../../../g', 'http://a/../g')
273 # self.checkJoin(RFC1808_BASE, '../../../../g', 'http://a/../../g')
274 # self.checkJoin(RFC1808_BASE, '/./g', 'http://a/./g')
275 # self.checkJoin(RFC1808_BASE, '/../g', 'http://a/../g')
278 def test_RFC2368(self):
280 self.assertEqual(urllib.parse.urlparse('mailto:1337@example.org'),
283 def test_RFC2396(self):
286 self.checkJoin(RFC2396_BASE, 'g:h', 'g:h')
287 self.checkJoin(RFC2396_BASE, 'g', 'http://a/b/c/g')
288 self.checkJoin(RFC2396_BASE, './g', 'http://a/b/c/g')
289 self.checkJoin(RFC2396_BASE, 'g/', 'http://a/b/c/g/')
290 self.checkJoin(RFC2396_BASE, '/g', 'http://a/g')
291 self.checkJoin(RFC2396_BASE, '//g', 'http://g')
292 self.checkJoin(RFC2396_BASE, 'g?y', 'http://a/b/c/g?y')
293 self.checkJoin(RFC2396_BASE, '#s', 'http://a/b/c/d;p?q#s')
294 self.checkJoin(RFC2396_BASE, 'g#s', 'http://a/b/c/g#s')
295 self.checkJoin(RFC2396_BASE, 'g?y#s', 'http://a/b/c/g?y#s')
296 self.checkJoin(RFC2396_BASE, 'g;x', 'http://a/b/c/g;x')
297 self.checkJoin(RFC2396_BASE, 'g;x?y#s', 'http://a/b/c/g;x?y#s')
298 self.checkJoin(RFC2396_BASE, '.', 'http://a/b/c/')
299 self.checkJoin(RFC2396_BASE, './', 'http://a/b/c/')
300 self.checkJoin(RFC2396_BASE, '..', 'http://a/b/')
301 self.checkJoin(RFC2396_BASE, '../', 'http://a/b/')
302 self.checkJoin(RFC2396_BASE, '../g', 'http://a/b/g')
303 self.checkJoin(RFC2396_BASE, '../..', 'http://a/')
304 self.checkJoin(RFC2396_BASE, '../../', 'http://a/')
305 self.checkJoin(RFC2396_BASE, '../../g', 'http://a/g')
306 self.checkJoin(RFC2396_BASE, '', RFC2396_BASE)
307 self.checkJoin(RFC2396_BASE, 'g.', 'http://a/b/c/g.')
308 self.checkJoin(RFC2396_BASE, '.g', 'http://a/b/c/.g')
309 self.checkJoin(RFC2396_BASE, 'g..', 'http://a/b/c/g..')
310 self.checkJoin(RFC2396_BASE, '..g', 'http://a/b/c/..g')
311 self.checkJoin(RFC2396_BASE, './../g', 'http://a/b/g')
312 self.checkJoin(RFC2396_BASE, './g/.', 'http://a/b/c/g/')
313 self.checkJoin(RFC2396_BASE, 'g/./h', 'http://a/b/c/g/h')
314 self.checkJoin(RFC2396_BASE, 'g/../h', 'http://a/b/c/h')
315 self.checkJoin(RFC2396_BASE, 'g;x=1/./y', 'http://a/b/c/g;x=1/y')
316 self.checkJoin(RFC2396_BASE, 'g;x=1/../y', 'http://a/b/c/y')
317 self.checkJoin(RFC2396_BASE, 'g?y/./x', 'http://a/b/c/g?y/./x')
318 self.checkJoin(RFC2396_BASE, 'g?y/../x', 'http://a/b/c/g?y/../x')
319 self.checkJoin(RFC2396_BASE, 'g#s/./x', 'http://a/b/c/g#s/./x')
320 self.checkJoin(RFC2396_BASE, 'g#s/../x', 'http://a/b/c/g#s/../x')
323 # self.checkJoin(RFC2396_BASE, '../../../g', 'http://a/../g')
324 # self.checkJoin(RFC2396_BASE, '../../../../g', 'http://a/../../g')
325 # self.checkJoin(RFC2396_BASE, '/./g', 'http://a/./g')
326 # self.checkJoin(RFC2396_BASE, '/../g', 'http://a/../g')
328 def test_RFC3986(self):
329 self.checkJoin(RFC3986_BASE, '?y','http://a/b/c/d;p?y')
330 self.checkJoin(RFC3986_BASE, ';x', 'http://a/b/c/;x')
331 self.checkJoin(RFC3986_BASE, 'g:h','g:h')
332 self.checkJoin(RFC3986_BASE, 'g','http://a/b/c/g')
333 self.checkJoin(RFC3986_BASE, './g','http://a/b/c/g')
334 self.checkJoin(RFC3986_BASE, 'g/','http://a/b/c/g/')
335 self.checkJoin(RFC3986_BASE, '/g','http://a/g')
336 self.checkJoin(RFC3986_BASE, '//g','http://g')
337 self.checkJoin(RFC3986_BASE, '?y','http://a/b/c/d;p?y')
338 self.checkJoin(RFC3986_BASE, 'g?y','http://a/b/c/g?y')
339 self.checkJoin(RFC3986_BASE, '#s','http://a/b/c/d;p?q#s')
340 self.checkJoin(RFC3986_BASE, 'g#s','http://a/b/c/g#s')
341 self.checkJoin(RFC3986_BASE, 'g?y#s','http://a/b/c/g?y#s')
342 self.checkJoin(RFC3986_BASE, ';x','http://a/b/c/;x')
343 self.checkJoin(RFC3986_BASE, 'g;x','http://a/b/c/g;x')
344 self.checkJoin(RFC3986_BASE, 'g;x?y#s','http://a/b/c/g;x?y#s')
345 self.checkJoin(RFC3986_BASE, '','http://a/b/c/d;p?q')
346 self.checkJoin(RFC3986_BASE, '.','http://a/b/c/')
347 self.checkJoin(RFC3986_BASE, './','http://a/b/c/')
348 self.checkJoin(RFC3986_BASE, '..','http://a/b/')
349 self.checkJoin(RFC3986_BASE, '../','http://a/b/')
350 self.checkJoin(RFC3986_BASE, '../g','http://a/b/g')
351 self.checkJoin(RFC3986_BASE, '../..','http://a/')
352 self.checkJoin(RFC3986_BASE, '../../','http://a/')
353 self.checkJoin(RFC3986_BASE, '../../g','http://a/g')
354 self.checkJoin(RFC3986_BASE, '../../../g', 'http://a/g')
361 self.checkJoin(RFC3986_BASE, '../../../g','http://a/g')
362 self.checkJoin(RFC3986_BASE, '../../../../g','http://a/g')
363 self.checkJoin(RFC3986_BASE, '/./g','http://a/g')
364 self.checkJoin(RFC3986_BASE, '/../g','http://a/g')
365 self.checkJoin(RFC3986_BASE, 'g.','http://a/b/c/g.')
366 self.checkJoin(RFC3986_BASE, '.g','http://a/b/c/.g')
367 self.checkJoin(RFC3986_BASE, 'g..','http://a/b/c/g..')
368 self.checkJoin(RFC3986_BASE, '..g','http://a/b/c/..g')
369 self.checkJoin(RFC3986_BASE, './../g','http://a/b/g')
370 self.checkJoin(RFC3986_BASE, './g/.','http://a/b/c/g/')
371 self.checkJoin(RFC3986_BASE, 'g/./h','http://a/b/c/g/h')
372 self.checkJoin(RFC3986_BASE, 'g/../h','http://a/b/c/h')
373 self.checkJoin(RFC3986_BASE, 'g;x=1/./y','http://a/b/c/g;x=1/y')
374 self.checkJoin(RFC3986_BASE, 'g;x=1/../y','http://a/b/c/y')
375 self.checkJoin(RFC3986_BASE, 'g?y/./x','http://a/b/c/g?y/./x')
376 self.checkJoin(RFC3986_BASE, 'g?y/../x','http://a/b/c/g?y/../x')
377 self.checkJoin(RFC3986_BASE, 'g#s/./x','http://a/b/c/g#s/./x')
378 self.checkJoin(RFC3986_BASE, 'g#s/../x','http://a/b/c/g#s/../x')
379 #self.checkJoin(RFC3986_BASE, 'http:g','http:g') # strict parser
380 self.checkJoin(RFC3986_BASE, 'http:g','http://a/b/c/g') #relaxed parser
383 self.checkJoin('http://a/b/c/de', ';x','http://a/b/c/;x')
385 def test_urljoins(self):
386 self.checkJoin(SIMPLE_BASE, 'g:h','g:h')
387 self.checkJoin(SIMPLE_BASE, 'http:g','http://a/b/c/g')
388 self.checkJoin(SIMPLE_BASE, 'http:','http://a/b/c/d')
389 self.checkJoin(SIMPLE_BASE, 'g','http://a/b/c/g')
390 self.checkJoin(SIMPLE_BASE, './g','http://a/b/c/g')
391 self.checkJoin(SIMPLE_BASE, 'g/','http://a/b/c/g/')
392 self.checkJoin(SIMPLE_BASE, '/g','http://a/g')
393 self.checkJoin(SIMPLE_BASE, '//g','http://g')
394 self.checkJoin(SIMPLE_BASE, '?y','http://a/b/c/d?y')
395 self.checkJoin(SIMPLE_BASE, 'g?y','http://a/b/c/g?y')
396 self.checkJoin(SIMPLE_BASE, 'g?y/./x','http://a/b/c/g?y/./x')
397 self.checkJoin(SIMPLE_BASE, '.','http://a/b/c/')
398 self.checkJoin(SIMPLE_BASE, './','http://a/b/c/')
399 self.checkJoin(SIMPLE_BASE, '..','http://a/b/')
400 self.checkJoin(SIMPLE_BASE, '../','http://a/b/')
401 self.checkJoin(SIMPLE_BASE, '../g','http://a/b/g')
402 self.checkJoin(SIMPLE_BASE, '../..','http://a/')
403 self.checkJoin(SIMPLE_BASE, '../../g','http://a/g')
404 self.checkJoin(SIMPLE_BASE, './../g','http://a/b/g')
405 self.checkJoin(SIMPLE_BASE, './g/.','http://a/b/c/g/')
406 self.checkJoin(SIMPLE_BASE, 'g/./h','http://a/b/c/g/h')
407 self.checkJoin(SIMPLE_BASE, 'g/../h','http://a/b/c/h')
408 self.checkJoin(SIMPLE_BASE, 'http:g','http://a/b/c/g')
409 self.checkJoin(SIMPLE_BASE, 'http:','http://a/b/c/d')
410 self.checkJoin(SIMPLE_BASE, 'http:?y','http://a/b/c/d?y')
411 self.checkJoin(SIMPLE_BASE, 'http:g?y','http://a/b/c/g?y')
412 self.checkJoin(SIMPLE_BASE, 'http:g?y/./x','http://a/b/c/g?y/./x')
413 self.checkJoin('http:///', '..','http:///')
414 self.checkJoin('', 'http://a/b/c/g?y/./x','http://a/b/c/g?y/./x')
415 self.checkJoin('', 'http://a/./g', 'http://a/./g')
416 self.checkJoin('svn://pathtorepo/dir1', 'dir2', 'svn://pathtorepo/dir2')
417 self.checkJoin('svn+ssh://pathtorepo/dir1', 'dir2', 'svn+ssh://pathtorepo/dir2')
418 self.checkJoin('ws://a/b','g','ws://a/g')
419 self.checkJoin('wss://a/b','g','wss://a/g')
422 # self.checkJoin(SIMPLE_BASE, '../../../g','http://a/../g')
423 # self.checkJoin(SIMPLE_BASE, '/./g','http://a/./g')
426 self.checkJoin(SIMPLE_BASE + '/', 'foo', SIMPLE_BASE + '/foo')
430 self.checkJoin('http://a/b/c/d/e/', '../../f/g/', 'http://a/b/c/f/g/')
431 self.checkJoin('http://a/b/c/d/e', '../../f/g/', 'http://a/b/f/g/')
432 self.checkJoin('http://a/b/c/d/e/', '/../../f/g/', 'http://a/f/g/')
433 self.checkJoin('http://a/b/c/d/e', '/../../f/g/', 'http://a/f/g/')
434 self.checkJoin('http://a/b/c/d/e/', '../../f/g', 'http://a/b/c/f/g')
435 self.checkJoin('http://a/b/', '../../f/g/', 'http://a/f/g/')
438 self.checkJoin('a', 'b', 'b')
440 def test_RFC2732(self):
478 self.assertEqual((urlparsed.hostname, urlparsed.port) , (hostname, port))
488 self.assertRaises(ValueError, urllib.parse.urlparse, invalid_url)
490 def test_urldefrag(self):
508 self.assertEqual(result.geturl(), url)
509 self.assertEqual(result, (defrag, frag))
510 self.assertEqual(result.url, defrag)
511 self.assertEqual(result.fragment, frag)
513 def test_urlsplit_scoped_IPv6(self):
515 self.assertEqual(p.hostname, "fe80::822a:a8ff:fe49:470c%tESt")
516 self.assertEqual(p.netloc, '[FE80::822a:a8ff:fe49:470c%tESt]:1234')
519 self.assertEqual(p.hostname, b"fe80::822a:a8ff:fe49:470c%tESt")
520 self.assertEqual(p.netloc, b'[FE80::822a:a8ff:fe49:470c%tESt]:1234')
522 def test_urlsplit_attributes(self):
525 self.assertEqual(p.scheme, "http")
526 self.assertEqual(p.netloc, "WWW.PYTHON.ORG")
527 self.assertEqual(p.path, "/doc/")
528 self.assertEqual(p.query, "")
529 self.assertEqual(p.fragment, "frag")
530 self.assertEqual(p.username, None)
531 self.assertEqual(p.password, None)
532 self.assertEqual(p.hostname, "www.python.org")
533 self.assertEqual(p.port, None)
537 self.assertEqual(p.geturl()[4:], url[4:])
541 self.assertEqual(p.scheme, "http")
542 self.assertEqual(p.netloc, "User:Pass@www.python.org:080")
543 self.assertEqual(p.path, "/doc/")
544 self.assertEqual(p.query, "query=yes")
545 self.assertEqual(p.fragment, "frag")
546 self.assertEqual(p.username, "User")
547 self.assertEqual(p.password, "Pass")
548 self.assertEqual(p.hostname, "www.python.org")
549 self.assertEqual(p.port, 80)
550 self.assertEqual(p.geturl(), url)
558 self.assertEqual(p.scheme, "http")
559 self.assertEqual(p.netloc, "User@example.com:Pass@www.python.org:080")
560 self.assertEqual(p.path, "/doc/")
561 self.assertEqual(p.query, "query=yes")
562 self.assertEqual(p.fragment, "frag")
563 self.assertEqual(p.username, "User@example.com")
564 self.assertEqual(p.password, "Pass")
565 self.assertEqual(p.hostname, "www.python.org")
566 self.assertEqual(p.port, 80)
567 self.assertEqual(p.geturl(), url)
572 self.assertEqual(p.scheme, b"http")
573 self.assertEqual(p.netloc, b"WWW.PYTHON.ORG")
574 self.assertEqual(p.path, b"/doc/")
575 self.assertEqual(p.query, b"")
576 self.assertEqual(p.fragment, b"frag")
577 self.assertEqual(p.username, None)
578 self.assertEqual(p.password, None)
579 self.assertEqual(p.hostname, b"www.python.org")
580 self.assertEqual(p.port, None)
581 self.assertEqual(p.geturl()[4:], url[4:])
585 self.assertEqual(p.scheme, b"http")
586 self.assertEqual(p.netloc, b"User:Pass@www.python.org:080")
587 self.assertEqual(p.path, b"/doc/")
588 self.assertEqual(p.query, b"query=yes")
589 self.assertEqual(p.fragment, b"frag")
590 self.assertEqual(p.username, b"User")
591 self.assertEqual(p.password, b"Pass")
592 self.assertEqual(p.hostname, b"www.python.org")
593 self.assertEqual(p.port, 80)
594 self.assertEqual(p.geturl(), url)
598 self.assertEqual(p.scheme, b"http")
599 self.assertEqual(p.netloc, b"User@example.com:Pass@www.python.org:080")
600 self.assertEqual(p.path, b"/doc/")
601 self.assertEqual(p.query, b"query=yes")
602 self.assertEqual(p.fragment, b"frag")
603 self.assertEqual(p.username, b"User@example.com")
604 self.assertEqual(p.password, b"Pass")
605 self.assertEqual(p.hostname, b"www.python.org")
606 self.assertEqual(p.port, 80)
607 self.assertEqual(p.geturl(), url)
612 with self.assertRaisesRegex(ValueError, "out of range"):
615 def test_urlsplit_remove_unsafe_bytes(self):
619 self.assertEqual(p.scheme, "http")
620 self.assertEqual(p.netloc, "www.python.org")
621 self.assertEqual(p.path, "/javascript:alert('msg')/")
622 self.assertEqual(p.query, "query=something")
623 self.assertEqual(p.fragment, "fragment")
624 self.assertEqual(p.username, None)
625 self.assertEqual(p.password, None)
626 self.assertEqual(p.hostname, "www.python.org")
627 self.assertEqual(p.port, None)
628 self.assertEqual(p.geturl(), "http://www.python.org/javascript:alert('msg')/?query=something#fragment")
633 self.assertEqual(p.scheme, b"http")
634 self.assertEqual(p.netloc, b"www.python.org")
635 self.assertEqual(p.path, b"/javascript:alert('msg')/")
636 self.assertEqual(p.query, b"query=something")
637 self.assertEqual(p.fragment, b"fragment")
638 self.assertEqual(p.username, None)
639 self.assertEqual(p.password, None)
640 self.assertEqual(p.hostname, b"www.python.org")
641 self.assertEqual(p.port, None)
642 self.assertEqual(p.geturl(), b"http://www.python.org/javascript:alert('msg')/?query=something#fragment")
649 self.assertEqual(p.scheme, "http")
650 self.assertEqual(p.geturl(), "http://www.python.org/javascript:alert('msg')/?query=something#fragment")
652 def test_urlsplit_strip_url(self):
658 self.assertEqual(p.scheme, "http")
659 self.assertEqual(p.netloc, "User:Pass@www.python.org:080")
660 self.assertEqual(p.path, "/doc/")
661 self.assertEqual(p.query, "query=yes")
662 self.assertEqual(p.fragment, "frag")
663 self.assertEqual(p.username, "User")
664 self.assertEqual(p.password, "Pass")
665 self.assertEqual(p.hostname, "www.python.org")
666 self.assertEqual(p.port, 80)
667 self.assertEqual(p.geturl(), base_url)
671 self.assertEqual(p.scheme, b"http")
672 self.assertEqual(p.netloc, b"User:Pass@www.python.org:080")
673 self.assertEqual(p.path, b"/doc/")
674 self.assertEqual(p.query, b"query=yes")
675 self.assertEqual(p.fragment, b"frag")
676 self.assertEqual(p.username, b"User")
677 self.assertEqual(p.password, b"Pass")
678 self.assertEqual(p.hostname, b"www.python.org")
679 self.assertEqual(p.port, 80)
680 self.assertEqual(p.geturl(), base_url.encode("utf-8"))
686 self.assertEqual(p.scheme, "https")
687 self.assertEqual(p.netloc, "www.python.org:88")
688 self.assertEqual(p.path, "/doc/")
689 self.assertEqual(p.query, "query= ")
690 self.assertEqual(p.port, 88)
691 self.assertEqual(p.geturl(), query_spaces_url)
701 self.assertEqual(urllib.parse.urlunsplit(p), "www.pypi.org ")
708 self.assertEqual(p.scheme, "https")
709 self.assertEqual(p.geturl(), "https://www.python.org/")
711 def test_attributes_bad_port(self):
716 with self.subTest(bytes=bytes, parse=parse, port=port):
726 self.assertEqual(p.netloc, netloc)
727 with self.assertRaises(ValueError):
730 def test_attributes_bad_scheme(self):
735 with self.subTest(bytes=bytes, parse=parse, scheme=scheme):
744 self.assertEqual(p.scheme, b"")
746 self.assertEqual(p.scheme, "")
748 def test_attributes_without_netloc(self):
756 self.assertEqual(p.netloc, "")
757 self.assertEqual(p.username, None)
758 self.assertEqual(p.password, None)
759 self.assertEqual(p.hostname, None)
760 self.assertEqual(p.port, None)
761 self.assertEqual(p.geturl(), uri)
764 self.assertEqual(p.netloc, "")
765 self.assertEqual(p.username, None)
766 self.assertEqual(p.password, None)
767 self.assertEqual(p.hostname, None)
768 self.assertEqual(p.port, None)
769 self.assertEqual(p.geturl(), uri)
774 self.assertEqual(p.netloc, b"")
775 self.assertEqual(p.username, None)
776 self.assertEqual(p.password, None)
777 self.assertEqual(p.hostname, None)
778 self.assertEqual(p.port, None)
779 self.assertEqual(p.geturl(), uri)
782 self.assertEqual(p.netloc, b"")
783 self.assertEqual(p.username, None)
784 self.assertEqual(p.password, None)
785 self.assertEqual(p.hostname, None)
786 self.assertEqual(p.port, None)
787 self.assertEqual(p.geturl(), uri)
789 def test_noslash(self):
791 self.assertEqual(urllib.parse.urlparse("http://example.com?blahblah=/foo"),
793 self.assertEqual(urllib.parse.urlparse(b"http://example.com?blahblah=/foo"),
796 def test_withoutscheme(self):
801 self.assertEqual(urllib.parse.urlparse("path"),
803 self.assertEqual(urllib.parse.urlparse("//www.python.org:80"),
805 self.assertEqual(urllib.parse.urlparse("http://www.python.org:80"),
808 self.assertEqual(urllib.parse.urlparse(b"path"),
810 self.assertEqual(urllib.parse.urlparse(b"//www.python.org:80"),
812 self.assertEqual(urllib.parse.urlparse(b"http://www.python.org:80"),
815 def test_portseparator(self):
817 self.assertEqual(urllib.parse.urlparse("http:80"), ('http','','80','','',''))
818 self.assertEqual(urllib.parse.urlparse("https:80"), ('https','','80','','',''))
819 self.assertEqual(urllib.parse.urlparse("path:80"), ('path','','80','','',''))
820 self.assertEqual(urllib.parse.urlparse("http:"),('http','','','','',''))
821 self.assertEqual(urllib.parse.urlparse("https:"),('https','','','','',''))
822 self.assertEqual(urllib.parse.urlparse("http://www.python.org:80"),
825 self.assertEqual(urllib.parse.urlparse(b"http:80"), (b'http',b'',b'80',b'',b'',b''))
826 self.assertEqual(urllib.parse.urlparse(b"https:80"), (b'https',b'',b'80',b'',b'',b''))
827 self.assertEqual(urllib.parse.urlparse(b"path:80"), (b'path',b'',b'80',b'',b'',b''))
828 self.assertEqual(urllib.parse.urlparse(b"http:"),(b'http',b'',b'',b'',b'',b''))
829 self.assertEqual(urllib.parse.urlparse(b"https:"),(b'https',b'',b'',b'',b'',b''))
830 self.assertEqual(urllib.parse.urlparse(b"http://www.python.org:80"),
833 def test_usingsys(self):
835 self.assertRaises(TypeError, urllib.parse.urlencode, "foo")
837 def test_anyscheme(self):
839 self.assertEqual(urllib.parse.urlparse("s3://foo.com/stuff"),
841 self.assertEqual(urllib.parse.urlparse("x-newscheme://foo.com/stuff"),
843 self.assertEqual(urllib.parse.urlparse("x-newscheme://foo.com/stuff?query#fragment"),
845 self.assertEqual(urllib.parse.urlparse("x-newscheme://foo.com/stuff?query"),
849 self.assertEqual(urllib.parse.urlparse(b"s3://foo.com/stuff"),
851 self.assertEqual(urllib.parse.urlparse(b"x-newscheme://foo.com/stuff"),
853 self.assertEqual(urllib.parse.urlparse(b"x-newscheme://foo.com/stuff?query#fragment"),
855 self.assertEqual(urllib.parse.urlparse(b"x-newscheme://foo.com/stuff?query"),
858 def test_default_scheme(self):
861 with self.subTest(function=func):
863 self.assertEqual(result.scheme, "http")
865 self.assertEqual(result.scheme, b"http")
866 self.assertEqual(func("path", "ftp").scheme, "ftp")
867 self.assertEqual(func("path", scheme="ftp").scheme, "ftp")
868 self.assertEqual(func(b"path", scheme=b"ftp").scheme, b"ftp")
869 self.assertEqual(func("path").scheme, "")
870 self.assertEqual(func(b"path").scheme, b"")
871 self.assertEqual(func(b"path", "").scheme, b"")
873 def test_parse_fragments(self):
891 with self.subTest(url=url, function=func):
893 self.assertEqual(result.fragment, "")
894 self.assertTrue(
896 self.assertEqual(func(url, "", False).fragment, "")
899 self.assertEqual(result.fragment, expected_frag)
900 self.assertFalse(
902 self.assertEqual(func(url, "", True).fragment,
904 self.assertEqual(func(url).fragment, expected_frag)
906 def test_mixed_types_rejected(self):
909 with self.assertRaisesRegex(TypeError, "Cannot mix str"):
911 with self.assertRaisesRegex(TypeError, "Cannot mix str"):
913 with self.assertRaisesRegex(TypeError, "Cannot mix str"):
915 with self.assertRaisesRegex(TypeError, "Cannot mix str"):
917 with self.assertRaisesRegex(TypeError, "Cannot mix str"):
919 with self.assertRaisesRegex(TypeError, "Cannot mix str"):
921 with self.assertRaisesRegex(TypeError, "Cannot mix str"):
923 with self.assertRaisesRegex(TypeError, "Cannot mix str"):
925 with self.assertRaisesRegex(TypeError, "Cannot mix str"):
927 with self.assertRaisesRegex(TypeError, "Cannot mix str"):
930 def _check_result_type(self, str_type):
933 self.assertIs(bytes_type._decoded_counterpart, str_type)
940 self.assertEqual(str_result, str_args)
941 self.assertEqual(bytes_result.decode(), str_args)
942 self.assertEqual(bytes_result.decode(), str_result)
943 self.assertEqual(bytes_result.decode(encoding), str_args)
944 self.assertEqual(bytes_result.decode(encoding), str_result)
945 self.assertEqual(bytes_result.decode(encoding, errors), str_args)
946 self.assertEqual(bytes_result.decode(encoding, errors), str_result)
947 self.assertEqual(bytes_result, bytes_args)
948 self.assertEqual(str_result.encode(), bytes_args)
949 self.assertEqual(str_result.encode(), bytes_result)
950 self.assertEqual(str_result.encode(encoding), bytes_args)
951 self.assertEqual(str_result.encode(encoding), bytes_result)
952 self.assertEqual(str_result.encode(encoding, errors), bytes_args)
953 self.assertEqual(str_result.encode(encoding, errors), bytes_result)
955 def test_result_pairs(self):
963 self._check_result_type(result_type)
965 def test_parse_qs_encoding(self):
967 self.assertEqual(result, {'key': ['\u0141\xE9']})
969 self.assertEqual(result, {'key': ['\u0141\xE9']})
971 self.assertEqual(result, {'key': ['\u0141\ufffd\ufffd']})
973 self.assertEqual(result, {'key': ['\u0141\ufffd-']})
976 self.assertEqual(result, {'key': ['\u0141-']})
978 def test_parse_qsl_encoding(self):
980 self.assertEqual(result, [('key', '\u0141\xE9')])
982 self.assertEqual(result, [('key', '\u0141\xE9')])
984 self.assertEqual(result, [('key', '\u0141\ufffd\ufffd')])
986 self.assertEqual(result, [('key', '\u0141\ufffd-')])
989 self.assertEqual(result, [('key', '\u0141-')])
991 def test_parse_qsl_max_num_fields(self):
992 with self.assertRaises(ValueError):
996 def test_parse_qs_separator(self):
1010 with self.subTest(f"Original: {orig!r}, Expected: {expect!r}"):
1012 self.assertEqual(result, expect, "Error parsing %r" % orig)
1014 self.assertEqual(result_bytes, expect, "Error parsing %r" % orig)
1017 def test_parse_qsl_separator(self):
1031 with self.subTest(f"Original: {orig!r}, Expected: {expect!r}"):
1033 self.assertEqual(result, expect, "Error parsing %r" % orig)
1035 self.assertEqual(result_bytes, expect, "Error parsing %r" % orig)
1038 def test_urlencode_sequences(self):
1046 def __str__(self):
1050 self.assertEqual(result, 'a=trivial')
1052 def test_urlencode_quote_via(self):
1054 self.assertEqual(result, "a=some+value")
1057 self.assertEqual(result, "a=some%20value%2Fanother")
1060 self.assertEqual(result, "a=some%20value/another")
1062 def test_quote_from_bytes(self):
1063 self.assertRaises(TypeError, urllib.parse.quote_from_bytes, 'foo')
1065 self.assertEqual(result, 'archaeological%20arcana')
1067 self.assertEqual(result, '')
1069 def test_unquote_to_bytes(self):
1071 self.assertEqual(result, b'abc def')
1073 self.assertEqual(result, b'')
1075 def test_quote_errors(self):
1076 self.assertRaises(TypeError, urllib.parse.quote, b'foo',
1078 self.assertRaises(TypeError, urllib.parse.quote, b'foo', errors='strict')
1080 def test_issue14072(self):
1082 self.assertEqual(p1.scheme, 'tel')
1083 self.assertEqual(p1.path, '+31-641044153')
1085 self.assertEqual(p2.scheme, 'tel')
1086 self.assertEqual(p2.path, '+31641044153')
1089 self.assertEqual(p1.scheme, 'tel')
1090 self.assertEqual(p1.path, '+31-641044153')
1092 self.assertEqual(p2.scheme, 'tel')
1093 self.assertEqual(p2.path, '+31641044153')
1095 def test_invalid_bracketed_hosts(self):
1096 self.assertRaises(ValueError, urllib.parse.urlsplit, 'Scheme://user@[192.0.2.146]/Path?Query')
1097 self.assertRaises(ValueError, urllib.parse.urlsplit, 'Scheme://user@[important.com:8000]/Path?Query')
1098 self.assertRaises(ValueError, urllib.parse.urlsplit, 'Scheme://user@[v123r.IP]/Path?Query')
1099 self.assertRaises(ValueError, urllib.parse.urlsplit, 'Scheme://user@[v12ae]/Path?Query')
1100 self.assertRaises(ValueError, urllib.parse.urlsplit, 'Scheme://user@[v.IP]/Path?Query')
1101 self.assertRaises(ValueError, urllib.parse.urlsplit, 'Scheme://user@[v123.]/Path?Query')
1102 self.assertRaises(ValueError, urllib.parse.urlsplit, 'Scheme://user@[v]/Path?Query')
1103 self.assertRaises(ValueError, urllib.parse.urlsplit, 'Scheme://user@[0439:23af::2309::fae7:1234]/Path?Query')
1104 self.assertRaises(ValueError, urllib.parse.urlsplit, 'Scheme://user@[0439:23af:2309::fae7:1234:2342:438e:192.0.2.146]/Path?Query')
1105 self.assertRaises(ValueError, urllib.parse.urlsplit, 'Scheme://user@]v6a.ip[/Path')
1107 def test_splitting_bracketed_hosts(self):
1109 self.assertEqual(p1.hostname, 'v6a.ip')
1110 self.assertEqual(p1.username, 'user')
1111 self.assertEqual(p1.path, '/path')
1113 self.assertEqual(p2.hostname, '0439:23af:2309::fae7%test')
1114 self.assertEqual(p2.username, 'user')
1115 self.assertEqual(p2.path, '/path')
1117 self.assertEqual(p3.hostname, '0439:23af:2309::fae7:1234:192.0.2.146%test')
1118 self.assertEqual(p3.username, 'user')
1119 self.assertEqual(p3.path, '/path')
1121 def test_port_casting_failure_message(self):
1124 with self.assertRaisesRegex(ValueError, message):
1128 with self.assertRaisesRegex(ValueError, message):
1131 def test_telurl_params(self):
1133 self.assertEqual(p1.scheme, 'tel')
1134 self.assertEqual(p1.path, '123-4')
1135 self.assertEqual(p1.params, 'phone-context=+1-650-516')
1138 self.assertEqual(p1.scheme, 'tel')
1139 self.assertEqual(p1.path, '+1-201-555-0123')
1140 self.assertEqual(p1.params, '')
1143 self.assertEqual(p1.scheme, 'tel')
1144 self.assertEqual(p1.path, '7042')
1145 self.assertEqual(p1.params, 'phone-context=example.com')
1148 self.assertEqual(p1.scheme, 'tel')
1149 self.assertEqual(p1.path, '863-1234')
1150 self.assertEqual(p1.params, 'phone-context=+1-914-555')
1152 def test_Quoter_repr(self):
1154 self.assertIn('Quoter', repr(quoter))
1156 def test_clear_cache_for_code_coverage(self):
1159 def test_urllib_parse_getattr_failure(self):
1161 with self.assertRaises(AttributeError):
1164 def test_all(self):
1178 self.assertCountEqual(urllib.parse.__all__, expected)
1180 def test_urlsplit_normalization(self):
1193 self.assertIn('\u2100', denorm_chars)
1194 self.assertIn('\uFF03', denorm_chars)
1199 with self.assertRaises(ValueError):
1206 with self.subTest(url=url, char='{:04X}'.format(ord(c))):
1207 with self.assertRaises(ValueError):
1214 def test_splittype(self):
1216 self.assertEqual(splittype('type:opaquestring'), ('type', 'opaquestring'))
1217 self.assertEqual(splittype('opaquestring'), (None, 'opaquestring'))
1218 self.assertEqual(splittype(':opaquestring'), (None, ':opaquestring'))
1219 self.assertEqual(splittype('type:'), ('type', ''))
1220 self.assertEqual(splittype('type:opaque:string'), ('type', 'opaque:string'))
1222 def test_splithost(self):
1224 self.assertEqual(splithost('//www.example.org:80/foo/bar/baz.html'),
1226 self.assertEqual(splithost('//www.example.org:80'),
1228 self.assertEqual(splithost('/foo/bar/baz.html'),
1232 self.assertEqual(splithost('//127.0.0.1#@host.com'),
1234 self.assertEqual(splithost('//127.0.0.1#@host.com:80'),
1236 self.assertEqual(splithost('//127.0.0.1:80#@host.com'),
1240 self.assertEqual(splithost("///file"),
1244 self.assertEqual(splithost("//example.net/file;"),
1246 self.assertEqual(splithost("//example.net/file?"),
1248 self.assertEqual(splithost("//example.net/file#"),
1251 def test_splituser(self):
1253 self.assertEqual(splituser('User:Pass@www.python.org:080'),
1255 self.assertEqual(splituser('@www.python.org:080'),
1257 self.assertEqual(splituser('www.python.org:080'),
1259 self.assertEqual(splituser('User:Pass@'),
1261 self.assertEqual(splituser('User@example.com:Pass@www.python.org:080'),
1264 def test_splitpasswd(self):
1268 self.assertEqual(splitpasswd('user:ab'), ('user', 'ab'))
1269 self.assertEqual(splitpasswd('user:a\nb'), ('user', 'a\nb'))
1270 self.assertEqual(splitpasswd('user:a\tb'), ('user', 'a\tb'))
1271 self.assertEqual(splitpasswd('user:a\rb'), ('user', 'a\rb'))
1272 self.assertEqual(splitpasswd('user:a\fb'), ('user', 'a\fb'))
1273 self.assertEqual(splitpasswd('user:a\vb'), ('user', 'a\vb'))
1274 self.assertEqual(splitpasswd('user:a:b'), ('user', 'a:b'))
1275 self.assertEqual(splitpasswd('user:a b'), ('user', 'a b'))
1276 self.assertEqual(splitpasswd('user 2:ab'), ('user 2', 'ab'))
1277 self.assertEqual(splitpasswd('user+1:a+b'), ('user+1', 'a+b'))
1278 self.assertEqual(splitpasswd('user:'), ('user', ''))
1279 self.assertEqual(splitpasswd('user'), ('user', None))
1280 self.assertEqual(splitpasswd(':ab'), ('', 'ab'))
1282 def test_splitport(self):
1284 self.assertEqual(splitport('parrot:88'), ('parrot', '88'))
1285 self.assertEqual(splitport('parrot'), ('parrot', None))
1286 self.assertEqual(splitport('parrot:'), ('parrot', None))
1287 self.assertEqual(splitport('127.0.0.1'), ('127.0.0.1', None))
1288 self.assertEqual(splitport('parrot:cheese'), ('parrot:cheese', None))
1289 self.assertEqual(splitport('[::1]:88'), ('[::1]', '88'))
1290 self.assertEqual(splitport('[::1]'), ('[::1]', None))
1291 self.assertEqual(splitport(':88'), ('', '88'))
1293 def test_splitnport(self):
1295 self.assertEqual(splitnport('parrot:88'), ('parrot', 88))
1296 self.assertEqual(splitnport('parrot'), ('parrot', -1))
1297 self.assertEqual(splitnport('parrot', 55), ('parrot', 55))
1298 self.assertEqual(splitnport('parrot:'), ('parrot', -1))
1299 self.assertEqual(splitnport('parrot:', 55), ('parrot', 55))
1300 self.assertEqual(splitnport('127.0.0.1'), ('127.0.0.1', -1))
1301 self.assertEqual(splitnport('127.0.0.1', 55), ('127.0.0.1', 55))
1302 self.assertEqual(splitnport('parrot:cheese'), ('parrot', None))
1303 self.assertEqual(splitnport('parrot:cheese', 55), ('parrot', None))
1304 self.assertEqual(splitnport('parrot: +1_0 '), ('parrot', None))
1306 def test_splitquery(self):
1310 self.assertEqual(splitquery('http://python.org/fake?foo=bar'),
1312 self.assertEqual(splitquery('http://python.org/fake?foo=bar?'),
1314 self.assertEqual(splitquery('http://python.org/fake'),
1316 self.assertEqual(splitquery('?foo=bar'), ('', 'foo=bar'))
1318 def test_splittag(self):
1320 self.assertEqual(splittag('http://example.com?foo=bar#baz'),
1322 self.assertEqual(splittag('http://example.com?foo=bar#'),
1324 self.assertEqual(splittag('#baz'), ('', 'baz'))
1325 self.assertEqual(splittag('http://example.com?foo=bar'),
1327 self.assertEqual(splittag('http://example.com?foo=bar#baz#boo'),
1330 def test_splitattr(self):
1332 self.assertEqual(splitattr('/path;attr1=value1;attr2=value2'),
1334 self.assertEqual(splitattr('/path;'), ('/path', ['']))
1335 self.assertEqual(splitattr(';attr1=value1;attr2=value2'),
1337 self.assertEqual(splitattr('/path'), ('/path', []))
1339 def test_splitvalue(self):
1343 self.assertEqual(splitvalue('foo=bar'), ('foo', 'bar'))
1344 self.assertEqual(splitvalue('foo='), ('foo', ''))
1345 self.assertEqual(splitvalue('=bar'), ('', 'bar'))
1346 self.assertEqual(splitvalue('foobar'), ('foobar', None))
1347 self.assertEqual(splitvalue('foo=bar=baz'), ('foo', 'bar=baz'))
1349 def test_to_bytes(self):
1351 self.assertEqual(result, 'http://www.python.org')
1352 self.assertRaises(UnicodeError, urllib.parse._to_bytes,
1355 def test_unwrap(self):
1359 self.assertEqual(url, 'scheme://host/path')
1364 def test_Quoter_deprecation(self):
1365 with self.assertWarns(DeprecationWarning) as cm:
1367 self.assertIs(old_class, urllib.parse._Quoter)
1368 self.assertIn('Quoter will be removed', str(cm.warning))
1370 def test_splittype_deprecation(self):
1371 with self.assertWarns(DeprecationWarning) as cm:
1373 self.assertEqual(str(cm.warning),
1377 def test_splithost_deprecation(self):
1378 with self.assertWarns(DeprecationWarning) as cm:
1380 self.assertEqual(str(cm.warning),
1384 def test_splituser_deprecation(self):
1385 with self.assertWarns(DeprecationWarning) as cm:
1387 self.assertEqual(str(cm.warning),
1391 def test_splitpasswd_deprecation(self):
1392 with self.assertWarns(DeprecationWarning) as cm:
1394 self.assertEqual(str(cm.warning),
1398 def test_splitport_deprecation(self):
1399 with self.assertWarns(DeprecationWarning) as cm:
1401 self.assertEqual(str(cm.warning),
1405 def test_splitnport_deprecation(self):
1406 with self.assertWarns(DeprecationWarning) as cm:
1408 self.assertEqual(str(cm.warning),
1412 def test_splitquery_deprecation(self):
1413 with self.assertWarns(DeprecationWarning) as cm:
1415 self.assertEqual(str(cm.warning),
1419 def test_splittag_deprecation(self):
1420 with self.assertWarns(DeprecationWarning) as cm:
1422 self.assertEqual(str(cm.warning),
1426 def test_splitattr_deprecation(self):
1427 with self.assertWarns(DeprecationWarning) as cm:
1429 self.assertEqual(str(cm.warning),
1433 def test_splitvalue_deprecation(self):
1434 with self.assertWarns(DeprecationWarning) as cm:
1436 self.assertEqual(str(cm.warning),
1440 def test_to_bytes_deprecation(self):
1441 with self.assertWarns(DeprecationWarning) as cm:
1443 self.assertEqual(str(cm.warning),