/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_urlutils.py

  • Committer: Andrew Bennetts
  • Date: 2008-03-12 20:13:07 UTC
  • mfrom: (3267 +trunk)
  • mto: This revision was merged to the branch mainline in revision 3756.
  • Revision ID: andrew.bennetts@canonical.com-20080312201307-ngd5bynt2nvhnlb7
Merge from bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2005 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
16
 
17
17
"""Tests for the urlutils wrapper."""
18
18
 
19
19
import os
 
20
import re
20
21
import sys
21
22
 
22
23
from bzrlib import osutils, urlutils, win32utils
23
 
from bzrlib.errors import InvalidURL, InvalidURLJoin, InvalidRebaseURLs
 
24
from bzrlib.errors import InvalidURL, InvalidURLJoin
24
25
from bzrlib.tests import TestCaseInTempDir, TestCase, TestSkipped
25
26
 
26
27
 
27
28
class TestUrlToPath(TestCase):
28
 
 
 
29
    
29
30
    def test_basename(self):
30
31
        # bzrlib.urlutils.basename
31
32
        # Test bzrlib.urlutils.split()
82
83
        try:
83
84
            u'uni/\xb5'.encode(osutils.get_user_encoding())
84
85
        except UnicodeError:
85
 
            # locale cannot handle unicode
 
86
            # locale cannot handle unicode 
86
87
            pass
87
88
        else:
88
89
            norm_file('uni/%C2%B5', u'uni/\xb5')
225
226
        test('file:///bar/foo', 'file:///bar/', 'foo')
226
227
        test('http://host/foo', 'http://host/', 'foo')
227
228
        test('http://host/', 'http://host', '')
228
 
 
 
229
        
229
230
        # Invalid joinings
230
231
        # Cannot go above root
231
232
        # Implicitly at root:
263
264
 
264
265
        # Test joining to a path with a trailing slash
265
266
        test('foo/bar', 'foo/', 'bar')
266
 
 
 
267
        
267
268
        # Invalid joinings
268
269
        # Cannot go above root
269
270
        self.assertRaises(InvalidURLJoin, urlutils.joinpath, '/', '../baz')
299
300
            from_url('file:///path/to/r%C3%A4ksm%C3%B6rg%C3%A5s'))
300
301
        self.assertEqual(u'/path/to/r\xe4ksm\xf6rg\xe5s',
301
302
            from_url('file:///path/to/r%c3%a4ksm%c3%b6rg%c3%a5s'))
302
 
        self.assertEqual(u'/path/to/r\xe4ksm\xf6rg\xe5s',
303
 
            from_url('file://localhost/path/to/r%c3%a4ksm%c3%b6rg%c3%a5s'))
304
303
 
305
304
        self.assertRaises(InvalidURL, from_url, '/path/to/foo')
306
 
        self.assertRaises(
307
 
            InvalidURL, from_url,
308
 
            'file://remotehost/path/to/r%c3%a4ksm%c3%b6rg%c3%a5s')
309
305
 
310
306
    def test_win32_local_path_to_url(self):
311
307
        to_url = urlutils._win32_local_path_to_url
320
316
        self.assertEqual('file:///C:/path/to/f%20oo',
321
317
            to_url('C:/path/to/f oo'))
322
318
 
323
 
        self.assertEqual('file:///', to_url('/'))
324
 
 
325
319
        try:
326
320
            result = to_url(u'd:/path/to/r\xe4ksm\xf6rg\xe5s')
327
321
        except UnicodeError:
353
347
            from_url('file:///d|/path/to/r%C3%A4ksm%C3%B6rg%C3%A5s'))
354
348
        self.assertEqual(u'D:/path/to/r\xe4ksm\xf6rg\xe5s',
355
349
            from_url('file:///d:/path/to/r%c3%a4ksm%c3%b6rg%c3%a5s'))
356
 
        self.assertEqual('/', from_url('file:///'))
357
350
 
358
351
        self.assertRaises(InvalidURL, from_url, '/path/to/foo')
359
352
        # Not a valid _win32 url, no drive letter
501
494
        self.assertEqual('%C3%A5', urlutils.escape(u'\xe5'))
502
495
        self.assertFalse(isinstance(urlutils.escape(u'\xe5'), unicode))
503
496
 
504
 
    def test_escape_tildes(self):
505
 
        self.assertEqual('~foo', urlutils.escape('~foo'))
506
 
 
507
497
    def test_unescape(self):
508
498
        self.assertEqual('%', urlutils.unescape('%25'))
509
499
        self.assertEqual(u'\xe5', urlutils.unescape('%C3%A5'))
520
510
        def test(expected, base, other):
521
511
            result = urlutils.relative_url(base, other)
522
512
            self.assertEqual(expected, result)
523
 
 
 
513
            
524
514
        test('a', 'http://host/', 'http://host/a')
525
515
        test('http://entirely/different', 'sftp://host/branch',
526
516
                    'http://entirely/different')
535
525
                    'sftp://host/home/jelmer/branch/2b')
536
526
        test('../../branch/feature/%2b', 'http://host/home/jelmer/bar/%2b',
537
527
                    'http://host/home/jelmer/branch/feature/%2b')
538
 
        test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/',
 
528
        test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/', 
539
529
                    'http://host/home/jelmer/branch/feature/2b')
540
530
        # relative_url should preserve a trailing slash
541
531
        test('../../branch/feature/2b/', 'http://host/home/jelmer/bar/2b/',
599
589
 
600
590
        os.chdir(u'dod\xe9')
601
591
 
602
 
        # On Mac OSX this directory is actually:
 
592
        # On Mac OSX this directory is actually: 
603
593
        #   u'/dode\u0301' => '/dode\xcc\x81
604
 
        # but we should normalize it back to
 
594
        # but we should normalize it back to 
605
595
        #   u'/dod\xe9' => '/dod\xc3\xa9'
606
596
        url = urlutils.local_path_to_url('.')
607
597
        self.assertEndsWith(url, '/dod%C3%A9')
623
613
        self.assertEqual("bar", derive("http://foo/bar"))
624
614
        self.assertEqual("bar", derive("bzr+ssh://foo/bar"))
625
615
        self.assertEqual("foo-bar", derive("lp:foo-bar"))
626
 
 
627
 
 
628
 
class TestRebaseURL(TestCase):
629
 
    """Test the behavior of rebase_url."""
630
 
 
631
 
    def test_non_relative(self):
632
 
        result = urlutils.rebase_url('file://foo', 'file://foo',
633
 
                                     'file://foo/bar')
634
 
        self.assertEqual('file://foo', result)
635
 
        result = urlutils.rebase_url('/foo', 'file://foo',
636
 
                                     'file://foo/bar')
637
 
        self.assertEqual('/foo', result)
638
 
 
639
 
    def test_different_ports(self):
640
 
        e = self.assertRaises(InvalidRebaseURLs, urlutils.rebase_url,
641
 
                              'foo', 'http://bar:80', 'http://bar:81')
642
 
        self.assertEqual(str(e), "URLs differ by more than path:"
643
 
                         " 'http://bar:80' and 'http://bar:81'")
644
 
 
645
 
    def test_different_hosts(self):
646
 
        e = self.assertRaises(InvalidRebaseURLs, urlutils.rebase_url,
647
 
                              'foo', 'http://bar', 'http://baz')
648
 
        self.assertEqual(str(e), "URLs differ by more than path: 'http://bar'"
649
 
                         " and 'http://baz'")
650
 
 
651
 
    def test_different_protocol(self):
652
 
        e = self.assertRaises(InvalidRebaseURLs, urlutils.rebase_url,
653
 
                              'foo', 'http://bar', 'ftp://bar')
654
 
        self.assertEqual(str(e), "URLs differ by more than path: 'http://bar'"
655
 
                         " and 'ftp://bar'")
656
 
 
657
 
    def test_rebase_success(self):
658
 
        self.assertEqual('../bar', urlutils.rebase_url('bar', 'http://baz/',
659
 
                         'http://baz/qux'))
660
 
        self.assertEqual('qux/bar', urlutils.rebase_url('bar',
661
 
                         'http://baz/qux', 'http://baz/'))
662
 
        self.assertEqual('.', urlutils.rebase_url('foo',
663
 
                         'http://bar/', 'http://bar/foo/'))
664
 
        self.assertEqual('qux/bar', urlutils.rebase_url('../bar',
665
 
                         'http://baz/qux/foo', 'http://baz/'))
666
 
 
667
 
    def test_determine_relative_path(self):
668
 
        self.assertEqual('../../baz/bar',
669
 
                         urlutils.determine_relative_path(
670
 
                         '/qux/quxx', '/baz/bar'))
671
 
        self.assertEqual('..',
672
 
                         urlutils.determine_relative_path(
673
 
                         '/bar/baz', '/bar'))
674
 
        self.assertEqual('baz',
675
 
                         urlutils.determine_relative_path(
676
 
                         '/bar', '/bar/baz'))
677
 
        self.assertEqual('.', urlutils.determine_relative_path(
678
 
                         '/bar', '/bar'))
679
 
 
680
 
 
681
 
class TestParseURL(TestCase):
682
 
 
683
 
    def test_parse_url(self):
684
 
        self.assertEqual(urlutils.parse_url('http://example.com:80/one'),
685
 
            ('http', None, None, 'example.com', 80, '/one'))
686
 
        self.assertEqual(urlutils.parse_url('http://[1:2:3::40]/one'),
687
 
                ('http', None, None, '1:2:3::40', None, '/one'))
688
 
        self.assertEqual(urlutils.parse_url('http://[1:2:3::40]:80/one'),
689
 
                ('http', None, None, '1:2:3::40', 80, '/one'))