23
23
from bzrlib import osutils, urlutils, win32utils
25
from bzrlib.errors import InvalidURL, InvalidURLJoin
24
from bzrlib.errors import InvalidURL, InvalidURLJoin, InvalidRebaseURLs
26
25
from bzrlib.tests import TestCaseInTempDir, TestCase, TestSkipped
29
28
class TestUrlToPath(TestCase):
31
30
def test_basename(self):
32
31
# bzrlib.urlutils.basename
33
32
# Test bzrlib.urlutils.split()
348
349
from_url('file:///d|/path/to/r%C3%A4ksm%C3%B6rg%C3%A5s'))
349
350
self.assertEqual(u'D:/path/to/r\xe4ksm\xf6rg\xe5s',
350
351
from_url('file:///d:/path/to/r%c3%a4ksm%c3%b6rg%c3%a5s'))
352
self.assertEqual('/', from_url('file:///'))
352
354
self.assertRaises(InvalidURL, from_url, '/path/to/foo')
353
355
# Not a valid _win32 url, no drive letter
511
513
def test(expected, base, other):
512
514
result = urlutils.relative_url(base, other)
513
515
self.assertEqual(expected, result)
515
517
test('a', 'http://host/', 'http://host/a')
516
518
test('http://entirely/different', 'sftp://host/branch',
517
519
'http://entirely/different')
526
528
'sftp://host/home/jelmer/branch/2b')
527
529
test('../../branch/feature/%2b', 'http://host/home/jelmer/bar/%2b',
528
530
'http://host/home/jelmer/branch/feature/%2b')
529
test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/',
531
test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/',
530
532
'http://host/home/jelmer/branch/feature/2b')
531
533
# relative_url should preserve a trailing slash
532
534
test('../../branch/feature/2b/', 'http://host/home/jelmer/bar/2b/',
591
593
os.chdir(u'dod\xe9')
593
# On Mac OSX this directory is actually:
595
# On Mac OSX this directory is actually:
594
596
# u'/dode\u0301' => '/dode\xcc\x81
595
# but we should normalize it back to
597
# but we should normalize it back to
596
598
# u'/dod\xe9' => '/dod\xc3\xa9'
597
599
url = urlutils.local_path_to_url('.')
598
600
self.assertEndsWith(url, '/dod%C3%A9')
614
616
self.assertEqual("bar", derive("http://foo/bar"))
615
617
self.assertEqual("bar", derive("bzr+ssh://foo/bar"))
616
618
self.assertEqual("foo-bar", derive("lp:foo-bar"))
621
class TestRebaseURL(TestCase):
622
"""Test the behavior of rebase_url."""
624
def test_non_relative(self):
625
result = urlutils.rebase_url('file://foo', 'file://foo',
627
self.assertEqual('file://foo', result)
628
result = urlutils.rebase_url('/foo', 'file://foo',
630
self.assertEqual('/foo', result)
632
def test_different_ports(self):
633
e = self.assertRaises(InvalidRebaseURLs, urlutils.rebase_url,
634
'foo', 'http://bar:80', 'http://bar:81')
635
self.assertEqual(str(e), "URLs differ by more than path:"
636
" 'http://bar:80' and 'http://bar:81'")
638
def test_different_hosts(self):
639
e = self.assertRaises(InvalidRebaseURLs, urlutils.rebase_url,
640
'foo', 'http://bar', 'http://baz')
641
self.assertEqual(str(e), "URLs differ by more than path: 'http://bar'"
644
def test_different_protocol(self):
645
e = self.assertRaises(InvalidRebaseURLs, urlutils.rebase_url,
646
'foo', 'http://bar', 'ftp://bar')
647
self.assertEqual(str(e), "URLs differ by more than path: 'http://bar'"
650
def test_rebase_success(self):
651
self.assertEqual('../bar', urlutils.rebase_url('bar', 'http://baz/',
653
self.assertEqual('qux/bar', urlutils.rebase_url('bar',
654
'http://baz/qux', 'http://baz/'))
655
self.assertEqual('.', urlutils.rebase_url('foo',
656
'http://bar/', 'http://bar/foo/'))
657
self.assertEqual('qux/bar', urlutils.rebase_url('../bar',
658
'http://baz/qux/foo', 'http://baz/'))
660
def test_determine_relative_path(self):
661
self.assertEqual('../../baz/bar',
662
urlutils.determine_relative_path(
663
'/qux/quxx', '/baz/bar'))
664
self.assertEqual('..',
665
urlutils.determine_relative_path(
667
self.assertEqual('baz',
668
urlutils.determine_relative_path(
670
self.assertEqual('.', urlutils.determine_relative_path(