~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: 2010-02-18 04:04:19 UTC
  • mfrom: (5035.4.8 335033-upgrade)
  • Revision ID: pqm@pqm.ubuntu.com-20100218040419-l1gkx8dm60czagfq
(mbp, for parthm) copy to backup.bzr.~N~ before upgrading

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
 
19
19
import os
20
 
import re
21
20
import sys
22
21
 
23
22
from bzrlib import osutils, urlutils, win32utils
24
 
import bzrlib
25
23
from bzrlib.errors import InvalidURL, InvalidURLJoin, InvalidRebaseURLs
26
24
from bzrlib.tests import TestCaseInTempDir, TestCase, TestSkipped
27
25
 
28
26
 
29
27
class TestUrlToPath(TestCase):
30
 
    
 
28
 
31
29
    def test_basename(self):
32
30
        # bzrlib.urlutils.basename
33
31
        # Test bzrlib.urlutils.split()
82
80
 
83
81
        # Local paths are assumed to *not* be escaped at all
84
82
        try:
85
 
            u'uni/\xb5'.encode(bzrlib.user_encoding)
 
83
            u'uni/\xb5'.encode(osutils.get_user_encoding())
86
84
        except UnicodeError:
87
 
            # locale cannot handle unicode 
 
85
            # locale cannot handle unicode
88
86
            pass
89
87
        else:
90
88
            norm_file('uni/%C2%B5', u'uni/\xb5')
227
225
        test('file:///bar/foo', 'file:///bar/', 'foo')
228
226
        test('http://host/foo', 'http://host/', 'foo')
229
227
        test('http://host/', 'http://host', '')
230
 
        
 
228
 
231
229
        # Invalid joinings
232
230
        # Cannot go above root
233
231
        # Implicitly at root:
265
263
 
266
264
        # Test joining to a path with a trailing slash
267
265
        test('foo/bar', 'foo/', 'bar')
268
 
        
 
266
 
269
267
        # Invalid joinings
270
268
        # Cannot go above root
271
269
        self.assertRaises(InvalidURLJoin, urlutils.joinpath, '/', '../baz')
301
299
            from_url('file:///path/to/r%C3%A4ksm%C3%B6rg%C3%A5s'))
302
300
        self.assertEqual(u'/path/to/r\xe4ksm\xf6rg\xe5s',
303
301
            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')
306
309
 
307
310
    def test_win32_local_path_to_url(self):
308
311
        to_url = urlutils._win32_local_path_to_url
316
319
        #     to_url('C:/path/to/foo '))
317
320
        self.assertEqual('file:///C:/path/to/f%20oo',
318
321
            to_url('C:/path/to/f oo'))
319
 
        
 
322
 
320
323
        self.assertEqual('file:///', to_url('/'))
321
324
 
322
325
        try:
498
501
        self.assertEqual('%C3%A5', urlutils.escape(u'\xe5'))
499
502
        self.assertFalse(isinstance(urlutils.escape(u'\xe5'), unicode))
500
503
 
 
504
    def test_escape_tildes(self):
 
505
        self.assertEqual('~foo', urlutils.escape('~foo'))
 
506
 
501
507
    def test_unescape(self):
502
508
        self.assertEqual('%', urlutils.unescape('%25'))
503
509
        self.assertEqual(u'\xe5', urlutils.unescape('%C3%A5'))
514
520
        def test(expected, base, other):
515
521
            result = urlutils.relative_url(base, other)
516
522
            self.assertEqual(expected, result)
517
 
            
 
523
 
518
524
        test('a', 'http://host/', 'http://host/a')
519
525
        test('http://entirely/different', 'sftp://host/branch',
520
526
                    'http://entirely/different')
529
535
                    'sftp://host/home/jelmer/branch/2b')
530
536
        test('../../branch/feature/%2b', 'http://host/home/jelmer/bar/%2b',
531
537
                    'http://host/home/jelmer/branch/feature/%2b')
532
 
        test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/', 
 
538
        test('../../branch/feature/2b', 'http://host/home/jelmer/bar/2b/',
533
539
                    'http://host/home/jelmer/branch/feature/2b')
534
540
        # relative_url should preserve a trailing slash
535
541
        test('../../branch/feature/2b/', 'http://host/home/jelmer/bar/2b/',
593
599
 
594
600
        os.chdir(u'dod\xe9')
595
601
 
596
 
        # On Mac OSX this directory is actually: 
 
602
        # On Mac OSX this directory is actually:
597
603
        #   u'/dode\u0301' => '/dode\xcc\x81
598
 
        # but we should normalize it back to 
 
604
        # but we should normalize it back to
599
605
        #   u'/dod\xe9' => '/dod\xc3\xa9'
600
606
        url = urlutils.local_path_to_url('.')
601
607
        self.assertEndsWith(url, '/dod%C3%A9')
670
676
                         '/bar', '/bar/baz'))
671
677
        self.assertEqual('.', urlutils.determine_relative_path(
672
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'))