/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: Martin Pool
  • Date: 2008-07-17 06:00:08 UTC
  • mto: (3606.1.1 prepare-1.6)
  • mto: This revision was merged to the branch mainline in revision 3551.
  • Revision ID: mbp@sourcefrog.net-20080717060008-ulu4d4h8b57604yb
Review comments to stacking operations

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
 
24
import bzrlib
23
25
from bzrlib.errors import InvalidURL, InvalidURLJoin, InvalidRebaseURLs
24
26
from bzrlib.tests import TestCaseInTempDir, TestCase, TestSkipped
25
27
 
26
28
 
27
29
class TestUrlToPath(TestCase):
28
 
 
 
30
    
29
31
    def test_basename(self):
30
32
        # bzrlib.urlutils.basename
31
33
        # Test bzrlib.urlutils.split()
80
82
 
81
83
        # Local paths are assumed to *not* be escaped at all
82
84
        try:
83
 
            u'uni/\xb5'.encode(osutils.get_user_encoding())
 
85
            u'uni/\xb5'.encode(bzrlib.user_encoding)
84
86
        except UnicodeError:
85
 
            # locale cannot handle unicode
 
87
            # locale cannot handle unicode 
86
88
            pass
87
89
        else:
88
90
            norm_file('uni/%C2%B5', u'uni/\xb5')
225
227
        test('file:///bar/foo', 'file:///bar/', 'foo')
226
228
        test('http://host/foo', 'http://host/', 'foo')
227
229
        test('http://host/', 'http://host', '')
228
 
 
 
230
        
229
231
        # Invalid joinings
230
232
        # Cannot go above root
231
233
        # Implicitly at root:
263
265
 
264
266
        # Test joining to a path with a trailing slash
265
267
        test('foo/bar', 'foo/', 'bar')
266
 
 
 
268
        
267
269
        # Invalid joinings
268
270
        # Cannot go above root
269
271
        self.assertRaises(InvalidURLJoin, urlutils.joinpath, '/', '../baz')
299
301
            from_url('file:///path/to/r%C3%A4ksm%C3%B6rg%C3%A5s'))
300
302
        self.assertEqual(u'/path/to/r\xe4ksm\xf6rg\xe5s',
301
303
            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
304
 
305
305
        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
306
 
310
307
    def test_win32_local_path_to_url(self):
311
308
        to_url = urlutils._win32_local_path_to_url
320
317
        self.assertEqual('file:///C:/path/to/f%20oo',
321
318
            to_url('C:/path/to/f oo'))
322
319
 
323
 
        self.assertEqual('file:///', to_url('/'))
324
 
 
325
320
        try:
326
321
            result = to_url(u'd:/path/to/r\xe4ksm\xf6rg\xe5s')
327
322
        except UnicodeError:
353
348
            from_url('file:///d|/path/to/r%C3%A4ksm%C3%B6rg%C3%A5s'))
354
349
        self.assertEqual(u'D:/path/to/r\xe4ksm\xf6rg\xe5s',
355
350
            from_url('file:///d:/path/to/r%c3%a4ksm%c3%b6rg%c3%a5s'))
356
 
        self.assertEqual('/', from_url('file:///'))
357
351
 
358
352
        self.assertRaises(InvalidURL, from_url, '/path/to/foo')
359
353
        # Not a valid _win32 url, no drive letter
501
495
        self.assertEqual('%C3%A5', urlutils.escape(u'\xe5'))
502
496
        self.assertFalse(isinstance(urlutils.escape(u'\xe5'), unicode))
503
497
 
504
 
    def test_escape_tildes(self):
505
 
        self.assertEqual('~foo', urlutils.escape('~foo'))
506
 
 
507
498
    def test_unescape(self):
508
499
        self.assertEqual('%', urlutils.unescape('%25'))
509
500
        self.assertEqual(u'\xe5', urlutils.unescape('%C3%A5'))
520
511
        def test(expected, base, other):
521
512
            result = urlutils.relative_url(base, other)
522
513
            self.assertEqual(expected, result)
523
 
 
 
514
            
524
515
        test('a', 'http://host/', 'http://host/a')
525
516
        test('http://entirely/different', 'sftp://host/branch',
526
517
                    'http://entirely/different')
535
526
                    'sftp://host/home/jelmer/branch/2b')
536
527
        test('../../branch/feature/%2b', 'http://host/home/jelmer/bar/%2b',
537
528
                    'http://host/home/jelmer/branch/feature/%2b')
538
 
        test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/',
 
529
        test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/', 
539
530
                    'http://host/home/jelmer/branch/feature/2b')
540
531
        # relative_url should preserve a trailing slash
541
532
        test('../../branch/feature/2b/', 'http://host/home/jelmer/bar/2b/',
599
590
 
600
591
        os.chdir(u'dod\xe9')
601
592
 
602
 
        # On Mac OSX this directory is actually:
 
593
        # On Mac OSX this directory is actually: 
603
594
        #   u'/dode\u0301' => '/dode\xcc\x81
604
 
        # but we should normalize it back to
 
595
        # but we should normalize it back to 
605
596
        #   u'/dod\xe9' => '/dod\xc3\xa9'
606
597
        url = urlutils.local_path_to_url('.')
607
598
        self.assertEndsWith(url, '/dod%C3%A9')
661
652
                         'http://baz/qux', 'http://baz/'))
662
653
        self.assertEqual('.', urlutils.rebase_url('foo',
663
654
                         'http://bar/', 'http://bar/foo/'))
664
 
        self.assertEqual('qux/bar', urlutils.rebase_url('../bar',
665
 
                         'http://baz/qux/foo', 'http://baz/'))
666
655
 
667
656
    def test_determine_relative_path(self):
668
657
        self.assertEqual('../../baz/bar',
676
665
                         '/bar', '/bar/baz'))
677
666
        self.assertEqual('.', urlutils.determine_relative_path(
678
667
                         '/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'))