~jelmer/ubuntu/maverick/bzr/2.2.5

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_urlutils.py

ImportĀ upstreamĀ versionĀ 1.13~rc1

Show diffs side-by-side

added added

removed removed

Lines of Context:
21
21
import sys
22
22
 
23
23
from bzrlib import osutils, urlutils, win32utils
24
 
import bzrlib
25
 
from bzrlib.errors import InvalidURL, InvalidURLJoin
 
24
from bzrlib.errors import InvalidURL, InvalidURLJoin, InvalidRebaseURLs
26
25
from bzrlib.tests import TestCaseInTempDir, TestCase, TestSkipped
27
26
 
28
27
 
29
28
class TestUrlToPath(TestCase):
30
 
    
 
29
 
31
30
    def test_basename(self):
32
31
        # bzrlib.urlutils.basename
33
32
        # Test bzrlib.urlutils.split()
82
81
 
83
82
        # Local paths are assumed to *not* be escaped at all
84
83
        try:
85
 
            u'uni/\xb5'.encode(bzrlib.user_encoding)
 
84
            u'uni/\xb5'.encode(osutils.get_user_encoding())
86
85
        except UnicodeError:
87
 
            # locale cannot handle unicode 
 
86
            # locale cannot handle unicode
88
87
            pass
89
88
        else:
90
89
            norm_file('uni/%C2%B5', u'uni/\xb5')
227
226
        test('file:///bar/foo', 'file:///bar/', 'foo')
228
227
        test('http://host/foo', 'http://host/', 'foo')
229
228
        test('http://host/', 'http://host', '')
230
 
        
 
229
 
231
230
        # Invalid joinings
232
231
        # Cannot go above root
233
232
        # Implicitly at root:
265
264
 
266
265
        # Test joining to a path with a trailing slash
267
266
        test('foo/bar', 'foo/', 'bar')
268
 
        
 
267
 
269
268
        # Invalid joinings
270
269
        # Cannot go above root
271
270
        self.assertRaises(InvalidURLJoin, urlutils.joinpath, '/', '../baz')
317
316
        self.assertEqual('file:///C:/path/to/f%20oo',
318
317
            to_url('C:/path/to/f oo'))
319
318
 
 
319
        self.assertEqual('file:///', to_url('/'))
 
320
 
320
321
        try:
321
322
            result = to_url(u'd:/path/to/r\xe4ksm\xf6rg\xe5s')
322
323
        except UnicodeError:
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:///'))
351
353
 
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)
514
 
            
 
516
 
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/',
590
592
 
591
593
        os.chdir(u'dod\xe9')
592
594
 
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"))
 
619
 
 
620
 
 
621
class TestRebaseURL(TestCase):
 
622
    """Test the behavior of rebase_url."""
 
623
 
 
624
    def test_non_relative(self):
 
625
        result = urlutils.rebase_url('file://foo', 'file://foo',
 
626
                                     'file://foo/bar')
 
627
        self.assertEqual('file://foo', result)
 
628
        result = urlutils.rebase_url('/foo', 'file://foo',
 
629
                                     'file://foo/bar')
 
630
        self.assertEqual('/foo', result)
 
631
 
 
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'")
 
637
 
 
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'"
 
642
                         " and 'http://baz'")
 
643
 
 
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'"
 
648
                         " and 'ftp://bar'")
 
649
 
 
650
    def test_rebase_success(self):
 
651
        self.assertEqual('../bar', urlutils.rebase_url('bar', 'http://baz/',
 
652
                         'http://baz/qux'))
 
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/'))
 
659
 
 
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(
 
666
                         '/bar/baz', '/bar'))
 
667
        self.assertEqual('baz',
 
668
                         urlutils.determine_relative_path(
 
669
                         '/bar', '/bar/baz'))
 
670
        self.assertEqual('.', urlutils.determine_relative_path(
 
671
                         '/bar', '/bar'))