~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_urlutils.py

  • Committer: Aaron Bentley
  • Date: 2007-12-09 23:53:50 UTC
  • mto: This revision was merged to the branch mainline in revision 3133.
  • Revision ID: aaron.bentley@utoronto.ca-20071209235350-qp39yk0xzx7a4f6p
Don't use the base if not cherrypicking

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
 
from bzrlib.errors import InvalidURL, InvalidURLJoin, InvalidRebaseURLs
 
24
import bzrlib
 
25
from bzrlib.errors import InvalidURL, InvalidURLJoin
25
26
from bzrlib.tests import TestCaseInTempDir, TestCase, TestSkipped
26
27
 
27
28
 
81
82
 
82
83
        # Local paths are assumed to *not* be escaped at all
83
84
        try:
84
 
            u'uni/\xb5'.encode(osutils.get_user_encoding())
 
85
            u'uni/\xb5'.encode(bzrlib.user_encoding)
85
86
        except UnicodeError:
86
87
            # locale cannot handle unicode 
87
88
            pass
290
291
            raise TestSkipped("local encoding cannot handle unicode")
291
292
 
292
293
        self.assertEqual('file:///path/to/r%C3%A4ksm%C3%B6rg%C3%A5s', result)
293
 
        self.assertFalse(isinstance(result, unicode))
294
294
 
295
295
    def test_posix_local_path_from_url(self):
296
296
        from_url = urlutils._posix_local_path_from_url
315
315
        #     to_url('C:/path/to/foo '))
316
316
        self.assertEqual('file:///C:/path/to/f%20oo',
317
317
            to_url('C:/path/to/f oo'))
318
 
        
319
 
        self.assertEqual('file:///', to_url('/'))
320
318
 
321
319
        try:
322
320
            result = to_url(u'd:/path/to/r\xe4ksm\xf6rg\xe5s')
324
322
            raise TestSkipped("local encoding cannot handle unicode")
325
323
 
326
324
        self.assertEqual('file:///D:/path/to/r%C3%A4ksm%C3%B6rg%C3%A5s', result)
327
 
        self.assertFalse(isinstance(result, unicode))
328
325
 
329
326
    def test_win32_unc_path_to_url(self):
330
327
        to_url = urlutils._win32_local_path_to_url
339
336
            raise TestSkipped("local encoding cannot handle unicode")
340
337
 
341
338
        self.assertEqual('file://HOST/path/to/r%C3%A4ksm%C3%B6rg%C3%A5s', result)
342
 
        self.assertFalse(isinstance(result, unicode))
 
339
 
343
340
 
344
341
    def test_win32_local_path_from_url(self):
345
342
        from_url = urlutils._win32_local_path_from_url
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:///'))
353
349
 
354
350
        self.assertRaises(InvalidURL, from_url, '/path/to/foo')
355
351
        # Not a valid _win32 url, no drive letter
495
491
    def test_escape(self):
496
492
        self.assertEqual('%25', urlutils.escape('%'))
497
493
        self.assertEqual('%C3%A5', urlutils.escape(u'\xe5'))
498
 
        self.assertFalse(isinstance(urlutils.escape(u'\xe5'), unicode))
499
494
 
500
495
    def test_unescape(self):
501
496
        self.assertEqual('%', urlutils.unescape('%25'))
546
541
        #test('.', 'http://host/', 'http://host')
547
542
        test('http://host', 'http://host/', 'http://host')
548
543
 
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':
552
 
            # on the same drive
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')
561
 
 
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]
571
 
 
572
544
 
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"))
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'))