~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_urlutils.py

  • Committer: Vincent Ladeuil
  • Date: 2009-06-22 12:52:39 UTC
  • mto: (4471.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 4472.
  • Revision ID: v.ladeuil+lp@free.fr-20090622125239-kabo9smxt9c3vnir
Use a consistent scheme for naming pyrex source files.

Show diffs side-by-side

added added

removed removed

Lines of Context:
12
12
#
13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16
16
 
17
17
"""Tests for the urlutils wrapper."""
18
18
 
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
495
497
        self.assertEqual('%C3%A5', urlutils.escape(u'\xe5'))
496
498
        self.assertFalse(isinstance(urlutils.escape(u'\xe5'), unicode))
497
499
 
 
500
    def test_escape_tildes(self):
 
501
        self.assertEqual('~foo', urlutils.escape('~foo'))
 
502
 
498
503
    def test_unescape(self):
499
504
        self.assertEqual('%', urlutils.unescape('%25'))
500
505
        self.assertEqual(u'\xe5', urlutils.unescape('%C3%A5'))
511
516
        def test(expected, base, other):
512
517
            result = urlutils.relative_url(base, other)
513
518
            self.assertEqual(expected, result)
514
 
            
 
519
 
515
520
        test('a', 'http://host/', 'http://host/a')
516
521
        test('http://entirely/different', 'sftp://host/branch',
517
522
                    'http://entirely/different')
526
531
                    'sftp://host/home/jelmer/branch/2b')
527
532
        test('../../branch/feature/%2b', 'http://host/home/jelmer/bar/%2b',
528
533
                    'http://host/home/jelmer/branch/feature/%2b')
529
 
        test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/', 
 
534
        test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/',
530
535
                    'http://host/home/jelmer/branch/feature/2b')
531
536
        # relative_url should preserve a trailing slash
532
537
        test('../../branch/feature/2b/', 'http://host/home/jelmer/bar/2b/',
590
595
 
591
596
        os.chdir(u'dod\xe9')
592
597
 
593
 
        # On Mac OSX this directory is actually: 
 
598
        # On Mac OSX this directory is actually:
594
599
        #   u'/dode\u0301' => '/dode\xcc\x81
595
 
        # but we should normalize it back to 
 
600
        # but we should normalize it back to
596
601
        #   u'/dod\xe9' => '/dod\xc3\xa9'
597
602
        url = urlutils.local_path_to_url('.')
598
603
        self.assertEndsWith(url, '/dod%C3%A9')
614
619
        self.assertEqual("bar", derive("http://foo/bar"))
615
620
        self.assertEqual("bar", derive("bzr+ssh://foo/bar"))
616
621
        self.assertEqual("foo-bar", derive("lp:foo-bar"))
 
622
 
 
623
 
 
624
class TestRebaseURL(TestCase):
 
625
    """Test the behavior of rebase_url."""
 
626
 
 
627
    def test_non_relative(self):
 
628
        result = urlutils.rebase_url('file://foo', 'file://foo',
 
629
                                     'file://foo/bar')
 
630
        self.assertEqual('file://foo', result)
 
631
        result = urlutils.rebase_url('/foo', 'file://foo',
 
632
                                     'file://foo/bar')
 
633
        self.assertEqual('/foo', result)
 
634
 
 
635
    def test_different_ports(self):
 
636
        e = self.assertRaises(InvalidRebaseURLs, urlutils.rebase_url,
 
637
                              'foo', 'http://bar:80', 'http://bar:81')
 
638
        self.assertEqual(str(e), "URLs differ by more than path:"
 
639
                         " 'http://bar:80' and 'http://bar:81'")
 
640
 
 
641
    def test_different_hosts(self):
 
642
        e = self.assertRaises(InvalidRebaseURLs, urlutils.rebase_url,
 
643
                              'foo', 'http://bar', 'http://baz')
 
644
        self.assertEqual(str(e), "URLs differ by more than path: 'http://bar'"
 
645
                         " and 'http://baz'")
 
646
 
 
647
    def test_different_protocol(self):
 
648
        e = self.assertRaises(InvalidRebaseURLs, urlutils.rebase_url,
 
649
                              'foo', 'http://bar', 'ftp://bar')
 
650
        self.assertEqual(str(e), "URLs differ by more than path: 'http://bar'"
 
651
                         " and 'ftp://bar'")
 
652
 
 
653
    def test_rebase_success(self):
 
654
        self.assertEqual('../bar', urlutils.rebase_url('bar', 'http://baz/',
 
655
                         'http://baz/qux'))
 
656
        self.assertEqual('qux/bar', urlutils.rebase_url('bar',
 
657
                         'http://baz/qux', 'http://baz/'))
 
658
        self.assertEqual('.', urlutils.rebase_url('foo',
 
659
                         'http://bar/', 'http://bar/foo/'))
 
660
        self.assertEqual('qux/bar', urlutils.rebase_url('../bar',
 
661
                         'http://baz/qux/foo', 'http://baz/'))
 
662
 
 
663
    def test_determine_relative_path(self):
 
664
        self.assertEqual('../../baz/bar',
 
665
                         urlutils.determine_relative_path(
 
666
                         '/qux/quxx', '/baz/bar'))
 
667
        self.assertEqual('..',
 
668
                         urlutils.determine_relative_path(
 
669
                         '/bar/baz', '/bar'))
 
670
        self.assertEqual('baz',
 
671
                         urlutils.determine_relative_path(
 
672
                         '/bar', '/bar/baz'))
 
673
        self.assertEqual('.', urlutils.determine_relative_path(
 
674
                         '/bar', '/bar'))
 
675
 
 
676
 
 
677
class TestParseURL(TestCase):
 
678
 
 
679
    def test_parse_url(self):
 
680
        self.assertEqual(urlutils.parse_url('http://example.com:80/one'),
 
681
            ('http', None, None, 'example.com', 80, '/one'))
 
682
        self.assertEqual(urlutils.parse_url('http://[1:2:3::40]/one'),
 
683
                ('http', None, None, '1:2:3::40', None, '/one'))
 
684
        self.assertEqual(urlutils.parse_url('http://[1:2:3::40]:80/one'),
 
685
                ('http', None, None, '1:2:3::40', 80, '/one'))