~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_urlutils.py

  • Committer: Andrew Bennetts
  • Date: 2007-03-28 07:08:42 UTC
  • mfrom: (2380 +trunk)
  • mto: (2018.5.146 hpss)
  • mto: This revision was merged to the branch mainline in revision 2414.
  • Revision ID: andrew.bennetts@canonical.com-20070328070842-r843houy668oxb9o
Merge from bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
import re
21
21
import sys
22
22
 
23
 
from bzrlib import osutils, urlutils
 
23
from bzrlib import osutils, urlutils, win32utils
24
24
import bzrlib
25
25
from bzrlib.errors import InvalidURL, InvalidURLJoin
26
26
from bzrlib.tests import TestCaseInTempDir, TestCase, TestSkipped
197
197
            joined = urlutils.join(*args)
198
198
            self.assertEqual(expected, joined)
199
199
 
200
 
        # Test a single element
201
 
        test('foo', 'foo')
202
 
 
203
200
        # Test relative path joining
 
201
        test('foo', 'foo') # relative fragment with nothing is preserved.
204
202
        test('foo/bar', 'foo', 'bar')
205
203
        test('http://foo/bar', 'http://foo', 'bar')
206
204
        test('http://foo/bar', 'http://foo', '.', 'bar')
207
205
        test('http://foo/baz', 'http://foo', 'bar', '../baz')
208
206
        test('http://foo/bar/baz', 'http://foo', 'bar/baz')
209
207
        test('http://foo/baz', 'http://foo', 'bar/../baz')
 
208
        test('http://foo/baz', 'http://foo/bar/', '../baz')
210
209
 
211
210
        # Absolute paths
 
211
        test('http://foo', 'http://foo') # abs url with nothing is preserved.
212
212
        test('http://bar', 'http://foo', 'http://bar')
213
213
        test('sftp://bzr/foo', 'http://foo', 'bar', 'sftp://bzr/foo')
214
214
        test('file:///bar', 'foo', 'file:///bar')
 
215
        test('http://bar/', 'http://foo', 'http://bar/')
 
216
        test('http://bar/a', 'http://foo', 'http://bar/a')
 
217
        test('http://bar/a/', 'http://foo', 'http://bar/a/')
215
218
 
216
219
        # From a base path
217
220
        test('file:///foo', 'file:///', 'foo')
221
224
        
222
225
        # Invalid joinings
223
226
        # Cannot go above root
 
227
        # Implicitly at root:
224
228
        self.assertRaises(InvalidURLJoin, urlutils.join,
225
229
                'http://foo', '../baz')
 
230
        self.assertRaises(InvalidURLJoin, urlutils.join,
 
231
                'http://foo', '/..')
 
232
        # Joining from a path explicitly under the root.
 
233
        self.assertRaises(InvalidURLJoin, urlutils.join,
 
234
                'http://foo/a', '../../b')
 
235
 
 
236
    def test_joinpath(self):
 
237
        def test(expected, *args):
 
238
            joined = urlutils.joinpath(*args)
 
239
            self.assertEqual(expected, joined)
 
240
 
 
241
        # Test a single element
 
242
        test('foo', 'foo')
 
243
 
 
244
        # Test relative path joining
 
245
        test('foo/bar', 'foo', 'bar')
 
246
        test('foo/bar', 'foo', '.', 'bar')
 
247
        test('foo/baz', 'foo', 'bar', '../baz')
 
248
        test('foo/bar/baz', 'foo', 'bar/baz')
 
249
        test('foo/baz', 'foo', 'bar/../baz')
 
250
 
 
251
        # Test joining to an absolute path
 
252
        test('/foo', '/foo')
 
253
        test('/foo', '/foo', '.')
 
254
        test('/foo/bar', '/foo', 'bar')
 
255
        test('/', '/foo', '..')
 
256
 
 
257
        # Test joining with an absolute path
 
258
        test('/bar', 'foo', '/bar')
 
259
 
 
260
        # Test joining to a path with a trailing slash
 
261
        test('foo/bar', 'foo/', 'bar')
 
262
        
 
263
        # Invalid joinings
 
264
        # Cannot go above root
 
265
        self.assertRaises(InvalidURLJoin, urlutils.joinpath, '/', '../baz')
 
266
        self.assertRaises(InvalidURLJoin, urlutils.joinpath, '/', '..')
 
267
        self.assertRaises(InvalidURLJoin, urlutils.joinpath, '/', '/..')
226
268
 
227
269
    def test_function_type(self):
228
270
        if sys.platform == 'win32':
506
548
        self.assertEndsWith(url, '/mytest')
507
549
 
508
550
    def test_non_ascii(self):
 
551
        if win32utils.winver == 'Windows 98':
 
552
            raise TestSkipped('Windows 98 cannot handle unicode filenames')
 
553
 
509
554
        try:
510
555
            os.mkdir(u'dod\xe9')
511
556
        except UnicodeError: