349
346
from_url('file:///d|/path/to/r%C3%A4ksm%C3%B6rg%C3%A5s'))
350
347
self.assertEqual(u'D:/path/to/r\xe4ksm\xf6rg\xe5s',
351
348
from_url('file:///d:/path/to/r%c3%a4ksm%c3%b6rg%c3%a5s'))
352
self.assertEqual('/', from_url('file:///'))
354
350
self.assertRaises(InvalidURL, from_url, '/path/to/foo')
355
351
# Not a valid _win32 url, no drive letter
546
541
#test('.', 'http://host/', 'http://host')
547
542
test('http://host', 'http://host/', 'http://host')
549
# On Windows file:///C:/path/to and file:///D:/other/path
550
# should not use relative url over the non-existent '/' directory.
551
if sys.platform == 'win32':
553
test('../../other/path',
554
'file:///C:/path/to', 'file:///C:/other/path')
555
#~next two tests is failed, i.e. urlutils.relative_url expects
556
#~to see normalized file URLs?
557
#~test('../../other/path',
558
#~ 'file:///C:/path/to', 'file:///c:/other/path')
559
#~test('../../other/path',
560
#~ 'file:///C:/path/to', 'file:///C|/other/path')
562
# check UNC paths too
563
test('../../other/path',
564
'file://HOST/base/path/to', 'file://HOST/base/other/path')
565
# on different drives
566
test('file:///D:/other/path',
567
'file:///C:/path/to', 'file:///D:/other/path')
568
# TODO: strictly saying in UNC path //HOST/base is full analog
569
# of drive letter for hard disk, and this situation is also
570
# should be exception from rules. [bialix 20071221]
573
545
class TestCwdToURL(TestCaseInTempDir):
574
546
"""Test that local_path_to_url works base on the cwd"""
616
588
self.assertEqual("bar", derive("http://foo/bar"))
617
589
self.assertEqual("bar", derive("bzr+ssh://foo/bar"))
618
590
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(