| 498 | # self.checkJoin(RFC2396_BASE, '/../g', 'http://a/../g') |
| 499 | |
| 500 | def test_RFC3986(self): |
| 501 | self.checkJoin(RFC3986_BASE, '?y','http://a/b/c/d;p?y') |
| 502 | self.checkJoin(RFC3986_BASE, ';x', 'http://a/b/c/;x') |
| 503 | self.checkJoin(RFC3986_BASE, 'g:h','g:h') |
| 504 | self.checkJoin(RFC3986_BASE, 'g','http://a/b/c/g') |
| 505 | self.checkJoin(RFC3986_BASE, './g','http://a/b/c/g') |
| 506 | self.checkJoin(RFC3986_BASE, 'g/','http://a/b/c/g/') |
| 507 | self.checkJoin(RFC3986_BASE, '/g','http://a/g') |
| 508 | self.checkJoin(RFC3986_BASE, '//g','http://g') |
| 509 | self.checkJoin(RFC3986_BASE, '?y','http://a/b/c/d;p?y') |
| 510 | self.checkJoin(RFC3986_BASE, 'g?y','http://a/b/c/g?y') |
| 511 | self.checkJoin(RFC3986_BASE, '#s','http://a/b/c/d;p?q#s') |
| 512 | self.checkJoin(RFC3986_BASE, 'g#s','http://a/b/c/g#s') |
| 513 | self.checkJoin(RFC3986_BASE, 'g?y#s','http://a/b/c/g?y#s') |
| 514 | self.checkJoin(RFC3986_BASE, ';x','http://a/b/c/;x') |
| 515 | self.checkJoin(RFC3986_BASE, 'g;x','http://a/b/c/g;x') |
| 516 | self.checkJoin(RFC3986_BASE, 'g;x?y#s','http://a/b/c/g;x?y#s') |
| 517 | self.checkJoin(RFC3986_BASE, '','http://a/b/c/d;p?q') |
| 518 | self.checkJoin(RFC3986_BASE, '.','http://a/b/c/') |
| 519 | self.checkJoin(RFC3986_BASE, './','http://a/b/c/') |
| 520 | self.checkJoin(RFC3986_BASE, '..','http://a/b/') |
| 521 | self.checkJoin(RFC3986_BASE, '../','http://a/b/') |
| 522 | self.checkJoin(RFC3986_BASE, '../g','http://a/b/g') |
| 523 | self.checkJoin(RFC3986_BASE, '../..','http://a/') |
| 524 | self.checkJoin(RFC3986_BASE, '../../','http://a/') |
| 525 | self.checkJoin(RFC3986_BASE, '../../g','http://a/g') |
| 526 | self.checkJoin(RFC3986_BASE, '../../../g', 'http://a/g') |
| 527 | |
| 528 | # Abnormal Examples |
| 529 | |
| 530 | # The 'abnormal scenarios' are incompatible with RFC2986 parsing |
| 531 | # Tests are here for reference. |
| 532 | |
| 533 | self.checkJoin(RFC3986_BASE, '../../../g','http://a/g') |
| 534 | self.checkJoin(RFC3986_BASE, '../../../../g','http://a/g') |
| 535 | self.checkJoin(RFC3986_BASE, '/./g','http://a/g') |
| 536 | self.checkJoin(RFC3986_BASE, '/../g','http://a/g') |
| 537 | self.checkJoin(RFC3986_BASE, 'g.','http://a/b/c/g.') |
| 538 | self.checkJoin(RFC3986_BASE, '.g','http://a/b/c/.g') |
| 539 | self.checkJoin(RFC3986_BASE, 'g..','http://a/b/c/g..') |
| 540 | self.checkJoin(RFC3986_BASE, '..g','http://a/b/c/..g') |
| 541 | self.checkJoin(RFC3986_BASE, './../g','http://a/b/g') |
| 542 | self.checkJoin(RFC3986_BASE, './g/.','http://a/b/c/g/') |
| 543 | self.checkJoin(RFC3986_BASE, 'g/./h','http://a/b/c/g/h') |
| 544 | self.checkJoin(RFC3986_BASE, 'g/../h','http://a/b/c/h') |
| 545 | self.checkJoin(RFC3986_BASE, 'g;x=1/./y','http://a/b/c/g;x=1/y') |
| 546 | self.checkJoin(RFC3986_BASE, 'g;x=1/../y','http://a/b/c/y') |
| 547 | self.checkJoin(RFC3986_BASE, 'g?y/./x','http://a/b/c/g?y/./x') |
| 548 | self.checkJoin(RFC3986_BASE, 'g?y/../x','http://a/b/c/g?y/../x') |
| 549 | self.checkJoin(RFC3986_BASE, 'g#s/./x','http://a/b/c/g#s/./x') |
| 550 | self.checkJoin(RFC3986_BASE, 'g#s/../x','http://a/b/c/g#s/../x') |
| 551 | #self.checkJoin(RFC3986_BASE, 'http:g','http:g') # strict parser |
| 552 | self.checkJoin(RFC3986_BASE, 'http:g','http://a/b/c/g') #relaxed parser |
| 553 | |
| 554 | # Test for issue9721 |
| 555 | self.checkJoin('http://a/b/c/de', ';x','http://a/b/c/;x') |
| 556 | |
| 557 | def test_urljoins(self): |