~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_urlutils.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2008-07-17 09:40:51 UTC
  • mfrom: (3518.1.2 virtualvf)
  • Revision ID: pqm@pqm.ubuntu.com-20080717094051-cgyo1zagozwcd4mm
(Jelmer) Add VirtualVersionedFiles class.

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
319
316
        #     to_url('C:/path/to/foo '))
320
317
        self.assertEqual('file:///C:/path/to/f%20oo',
321
318
            to_url('C:/path/to/f oo'))
322
 
 
 
319
        
323
320
        self.assertEqual('file:///', to_url('/'))
324
321
 
325
322
        try:
501
498
        self.assertEqual('%C3%A5', urlutils.escape(u'\xe5'))
502
499
        self.assertFalse(isinstance(urlutils.escape(u'\xe5'), unicode))
503
500
 
504
 
    def test_escape_tildes(self):
505
 
        self.assertEqual('~foo', urlutils.escape('~foo'))
506
 
 
507
501
    def test_unescape(self):
508
502
        self.assertEqual('%', urlutils.unescape('%25'))
509
503
        self.assertEqual(u'\xe5', urlutils.unescape('%C3%A5'))
520
514
        def test(expected, base, other):
521
515
            result = urlutils.relative_url(base, other)
522
516
            self.assertEqual(expected, result)
523
 
 
 
517
            
524
518
        test('a', 'http://host/', 'http://host/a')
525
519
        test('http://entirely/different', 'sftp://host/branch',
526
520
                    'http://entirely/different')
535
529
                    'sftp://host/home/jelmer/branch/2b')
536
530
        test('../../branch/feature/%2b', 'http://host/home/jelmer/bar/%2b',
537
531
                    'http://host/home/jelmer/branch/feature/%2b')
538
 
        test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/',
 
532
        test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/', 
539
533
                    'http://host/home/jelmer/branch/feature/2b')
540
534
        # relative_url should preserve a trailing slash
541
535
        test('../../branch/feature/2b/', 'http://host/home/jelmer/bar/2b/',
599
593
 
600
594
        os.chdir(u'dod\xe9')
601
595
 
602
 
        # On Mac OSX this directory is actually:
 
596
        # On Mac OSX this directory is actually: 
603
597
        #   u'/dode\u0301' => '/dode\xcc\x81
604
 
        # but we should normalize it back to
 
598
        # but we should normalize it back to 
605
599
        #   u'/dod\xe9' => '/dod\xc3\xa9'
606
600
        url = urlutils.local_path_to_url('.')
607
601
        self.assertEndsWith(url, '/dod%C3%A9')
661
655
                         'http://baz/qux', 'http://baz/'))
662
656
        self.assertEqual('.', urlutils.rebase_url('foo',
663
657
                         'http://bar/', 'http://bar/foo/'))
664
 
        self.assertEqual('qux/bar', urlutils.rebase_url('../bar',
665
 
                         'http://baz/qux/foo', 'http://baz/'))
666
658
 
667
659
    def test_determine_relative_path(self):
668
660
        self.assertEqual('../../baz/bar',
676
668
                         '/bar', '/bar/baz'))
677
669
        self.assertEqual('.', urlutils.determine_relative_path(
678
670
                         '/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'))