| 555 | self.checkJoin('http://a/b/c/de', ';x','http://a/b/c/;x') |
| 556 | |
| 557 | def test_urljoins(self): |
| 558 | self.checkJoin(SIMPLE_BASE, 'g:h','g:h') |
| 559 | self.checkJoin(SIMPLE_BASE, 'g','http://a/b/c/g') |
| 560 | self.checkJoin(SIMPLE_BASE, './g','http://a/b/c/g') |
| 561 | self.checkJoin(SIMPLE_BASE, 'g/','http://a/b/c/g/') |
| 562 | self.checkJoin(SIMPLE_BASE, '/g','http://a/g') |
| 563 | self.checkJoin(SIMPLE_BASE, '//g','http://g') |
| 564 | self.checkJoin(SIMPLE_BASE, '?y','http://a/b/c/d?y') |
| 565 | self.checkJoin(SIMPLE_BASE, 'g?y','http://a/b/c/g?y') |
| 566 | self.checkJoin(SIMPLE_BASE, 'g?y/./x','http://a/b/c/g?y/./x') |
| 567 | self.checkJoin(SIMPLE_BASE, '.','http://a/b/c/') |
| 568 | self.checkJoin(SIMPLE_BASE, './','http://a/b/c/') |
| 569 | self.checkJoin(SIMPLE_BASE, '..','http://a/b/') |
| 570 | self.checkJoin(SIMPLE_BASE, '../','http://a/b/') |
| 571 | self.checkJoin(SIMPLE_BASE, '../g','http://a/b/g') |
| 572 | self.checkJoin(SIMPLE_BASE, '../..','http://a/') |
| 573 | self.checkJoin(SIMPLE_BASE, '../../g','http://a/g') |
| 574 | self.checkJoin(SIMPLE_BASE, './../g','http://a/b/g') |
| 575 | self.checkJoin(SIMPLE_BASE, './g/.','http://a/b/c/g/') |
| 576 | self.checkJoin(SIMPLE_BASE, 'g/./h','http://a/b/c/g/h') |
| 577 | self.checkJoin(SIMPLE_BASE, 'g/../h','http://a/b/c/h') |
| 578 | self.checkJoin(SIMPLE_BASE, 'http:g','http://a/b/c/g') |
| 579 | self.checkJoin(SIMPLE_BASE, 'http:g?y','http://a/b/c/g?y') |
| 580 | self.checkJoin(SIMPLE_BASE, 'http:g?y/./x','http://a/b/c/g?y/./x') |
| 581 | self.checkJoin('http:///', '..','http:///') |
| 582 | self.checkJoin('', 'http://a/b/c/g?y/./x','http://a/b/c/g?y/./x') |
| 583 | self.checkJoin('', 'http://a/./g', 'http://a/./g') |
| 584 | self.checkJoin('svn://pathtorepo/dir1', 'dir2', 'svn://pathtorepo/dir2') |
| 585 | self.checkJoin('svn+ssh://pathtorepo/dir1', 'dir2', 'svn+ssh://pathtorepo/dir2') |
| 586 | self.checkJoin('ws://a/b','g','ws://a/g') |
| 587 | self.checkJoin('wss://a/b','g','wss://a/g') |
| 588 | |
| 589 | # XXX: The following tests are no longer compatible with RFC3986 |
| 590 | # self.checkJoin(SIMPLE_BASE, '../../../g','http://a/../g') |
| 591 | # self.checkJoin(SIMPLE_BASE, '/./g','http://a/./g') |
| 592 | |
| 593 | # test for issue22118 duplicate slashes |
| 594 | self.checkJoin(SIMPLE_BASE + '/', 'foo', SIMPLE_BASE + '/foo') |
| 595 | |
| 596 | # Non-RFC-defined tests, covering variations of base and trailing |
| 597 | # slashes |
| 598 | self.checkJoin('http://a/b/c/d/e/', '../../f/g/', 'http://a/b/c/f/g/') |
| 599 | self.checkJoin('http://a/b/c/d/e', '../../f/g/', 'http://a/b/f/g/') |
| 600 | self.checkJoin('http://a/b/c/d/e/', '/../../f/g/', 'http://a/f/g/') |
| 601 | self.checkJoin('http://a/b/c/d/e', '/../../f/g/', 'http://a/f/g/') |
| 602 | self.checkJoin('http://a/b/c/d/e/', '../../f/g', 'http://a/b/c/f/g') |
| 603 | self.checkJoin('http://a/b/', '../../f/g/', 'http://a/f/g/') |
| 604 | |
| 605 | # issue 23703: don't duplicate filename |
| 606 | self.checkJoin('a', 'b', 'b') |
| 607 | |
| 608 | # Test with empty (but defined) components. |
| 609 | self.checkJoin(RFC1808_BASE, '', 'http://a/b/c/d;p?q#f') |
| 610 | self.checkJoin(RFC1808_BASE, '#', 'http://a/b/c/d;p?q#', relroundtrip=False) |
| 611 | self.checkJoin(RFC1808_BASE, '#z', 'http://a/b/c/d;p?q#z') |
| 612 | self.checkJoin(RFC1808_BASE, '?', 'http://a/b/c/d;p?', relroundtrip=False) |
| 613 | self.checkJoin(RFC1808_BASE, '?#z', 'http://a/b/c/d;p?#z', relroundtrip=False) |
| 614 | self.checkJoin(RFC1808_BASE, '?y', 'http://a/b/c/d;p?y') |