526
531
'sftp://host/home/jelmer/branch/2b')
527
532
test('../../branch/feature/%2b', 'http://host/home/jelmer/bar/%2b',
528
533
'http://host/home/jelmer/branch/feature/%2b')
529
test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/',
534
test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/',
530
535
'http://host/home/jelmer/branch/feature/2b')
531
536
# relative_url should preserve a trailing slash
532
537
test('../../branch/feature/2b/', 'http://host/home/jelmer/bar/2b/',
614
619
self.assertEqual("bar", derive("http://foo/bar"))
615
620
self.assertEqual("bar", derive("bzr+ssh://foo/bar"))
616
621
self.assertEqual("foo-bar", derive("lp:foo-bar"))
624
class TestRebaseURL(TestCase):
625
"""Test the behavior of rebase_url."""
627
def test_non_relative(self):
628
result = urlutils.rebase_url('file://foo', 'file://foo',
630
self.assertEqual('file://foo', result)
631
result = urlutils.rebase_url('/foo', 'file://foo',
633
self.assertEqual('/foo', result)
635
def test_different_ports(self):
636
e = self.assertRaises(InvalidRebaseURLs, urlutils.rebase_url,
637
'foo', 'http://bar:80', 'http://bar:81')
638
self.assertEqual(str(e), "URLs differ by more than path:"
639
" 'http://bar:80' and 'http://bar:81'")
641
def test_different_hosts(self):
642
e = self.assertRaises(InvalidRebaseURLs, urlutils.rebase_url,
643
'foo', 'http://bar', 'http://baz')
644
self.assertEqual(str(e), "URLs differ by more than path: 'http://bar'"
647
def test_different_protocol(self):
648
e = self.assertRaises(InvalidRebaseURLs, urlutils.rebase_url,
649
'foo', 'http://bar', 'ftp://bar')
650
self.assertEqual(str(e), "URLs differ by more than path: 'http://bar'"
653
def test_rebase_success(self):
654
self.assertEqual('../bar', urlutils.rebase_url('bar', 'http://baz/',
656
self.assertEqual('qux/bar', urlutils.rebase_url('bar',
657
'http://baz/qux', 'http://baz/'))
658
self.assertEqual('.', urlutils.rebase_url('foo',
659
'http://bar/', 'http://bar/foo/'))
660
self.assertEqual('qux/bar', urlutils.rebase_url('../bar',
661
'http://baz/qux/foo', 'http://baz/'))
663
def test_determine_relative_path(self):
664
self.assertEqual('../../baz/bar',
665
urlutils.determine_relative_path(
666
'/qux/quxx', '/baz/bar'))
667
self.assertEqual('..',
668
urlutils.determine_relative_path(
670
self.assertEqual('baz',
671
urlutils.determine_relative_path(
673
self.assertEqual('.', urlutils.determine_relative_path(
677
class TestParseURL(TestCase):
679
def test_parse_url(self):
680
self.assertEqual(urlutils.parse_url('http://example.com:80/one'),
681
('http', None, None, 'example.com', 80, '/one'))
682
self.assertEqual(urlutils.parse_url('http://[1:2:3::40]/one'),
683
('http', None, None, '1:2:3::40', None, '/one'))
684
self.assertEqual(urlutils.parse_url('http://[1:2:3::40]:80/one'),
685
('http', None, None, '1:2:3::40', 80, '/one'))