~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_transport_implementations.py

  • Committer: John Arbash Meinel
  • Date: 2007-04-28 15:04:17 UTC
  • mfrom: (2466 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2566.
  • Revision ID: john@arbash-meinel.com-20070428150417-trp3pi0pzd411pu4
[merge] bzr.dev 2466

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2004, 2005, 2006 Canonical Ltd
 
1
# Copyright (C) 2004, 2005, 2006, 2007 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
22
22
 
23
23
import os
24
24
from cStringIO import StringIO
 
25
from StringIO import StringIO as pyStringIO
25
26
import stat
26
27
import sys
27
28
 
30
31
    osutils,
31
32
    urlutils,
32
33
    )
33
 
from bzrlib.errors import (DirectoryNotEmpty, NoSuchFile, FileExists,
34
 
                           LockError, NoSmartServer, PathError,
35
 
                           TransportNotPossible, ConnectionError,
36
 
                           InvalidURL)
 
34
from bzrlib.errors import (ConnectionError,
 
35
                           DirectoryNotEmpty,
 
36
                           FileExists,
 
37
                           InvalidURL,
 
38
                           LockError,
 
39
                           NoSmartServer,
 
40
                           NoSuchFile,
 
41
                           NotLocalUrl,
 
42
                           PathError,
 
43
                           TransportNotPossible,
 
44
                           )
37
45
from bzrlib.osutils import getcwd
 
46
from bzrlib.smart import medium
38
47
from bzrlib.symbol_versioning import zero_eleven
39
48
from bzrlib.tests import TestCaseInTempDir, TestSkipped
40
49
from bzrlib.tests.test_transport import TestTransportImplementation
41
 
from bzrlib.smart import medium
42
50
from bzrlib.transport import memory, remote
43
51
import bzrlib.transport
44
52
 
369
377
                              dir_mode=0777, create_parent_dir=True)
370
378
        self.assertTransportMode(t, 'dir777', 0777)
371
379
 
 
380
    def test_put_bytes_unicode(self):
 
381
        # Expect put_bytes to raise AssertionError or UnicodeEncodeError if
 
382
        # given unicode "bytes".  UnicodeEncodeError doesn't really make sense
 
383
        # (we don't want to encode unicode here at all, callers should be
 
384
        # strictly passing bytes to put_bytes), but we allow it for backwards
 
385
        # compatibility.  At some point we should use a specific exception.
 
386
        # See https://bugs.launchpad.net/bzr/+bug/106898.
 
387
        t = self.get_transport()
 
388
        if t.is_readonly():
 
389
            return
 
390
        unicode_string = u'\u1234'
 
391
        self.assertRaises(
 
392
            (AssertionError, UnicodeEncodeError),
 
393
            t.put_bytes, 'foo', unicode_string)
 
394
 
 
395
    def test_put_file_unicode(self):
 
396
        # Like put_bytes, except with a StringIO.StringIO of a unicode string.
 
397
        # This situation can happen (and has) if code is careless about the type
 
398
        # of "string" they initialise/write to a StringIO with.  We cannot use
 
399
        # cStringIO, because it never returns unicode from read.
 
400
        # Like put_bytes, UnicodeEncodeError isn't quite the right exception to
 
401
        # raise, but we raise it for hysterical raisins.
 
402
        t = self.get_transport()
 
403
        if t.is_readonly():
 
404
            return
 
405
        unicode_file = pyStringIO(u'\u1234')
 
406
        self.assertRaises(UnicodeEncodeError, t.put_file, 'foo', unicode_file)
 
407
 
372
408
    def test_put_multi(self):
373
409
        t = self.get_transport()
374
410
 
1114
1150
        transport = self.get_transport()
1115
1151
        try:
1116
1152
            p = transport.local_abspath('.')
1117
 
        except TransportNotPossible:
1118
 
            pass # This is not a local transport
 
1153
        except (errors.NotLocalUrl, TransportNotPossible), e:
 
1154
            # should be formattable
 
1155
            s = str(e)
1119
1156
        else:
1120
1157
            self.assertEqual(getcwd(), p)
1121
1158