~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_urlutils.py

  • Committer: John Arbash Meinel
  • Date: 2008-07-11 21:41:24 UTC
  • mto: This revision was merged to the branch mainline in revision 3543.
  • Revision ID: john@arbash-meinel.com-20080711214124-qi09irlj7pd5cuzg
Shortcut the case when one revision is in the ancestry of the other.

At the cost of a heads() check, when one parent supersedes, we don't have to extract
the text for the other. Changes merge time from 3m37s => 3m21s. Using a
CachingParentsProvider would drop the time down to 3m11s.

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
315
316
        #     to_url('C:/path/to/foo '))
316
317
        self.assertEqual('file:///C:/path/to/f%20oo',
317
318
            to_url('C:/path/to/f oo'))
318
 
        
319
 
        self.assertEqual('file:///', to_url('/'))
320
319
 
321
320
        try:
322
321
            result = to_url(u'd:/path/to/r\xe4ksm\xf6rg\xe5s')
349
348
            from_url('file:///d|/path/to/r%C3%A4ksm%C3%B6rg%C3%A5s'))
350
349
        self.assertEqual(u'D:/path/to/r\xe4ksm\xf6rg\xe5s',
351
350
            from_url('file:///d:/path/to/r%c3%a4ksm%c3%b6rg%c3%a5s'))
352
 
        self.assertEqual('/', from_url('file:///'))
353
351
 
354
352
        self.assertRaises(InvalidURL, from_url, '/path/to/foo')
355
353
        # Not a valid _win32 url, no drive letter
616
614
        self.assertEqual("bar", derive("http://foo/bar"))
617
615
        self.assertEqual("bar", derive("bzr+ssh://foo/bar"))
618
616
        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'))