~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_osutils_encodings.py

  • Committer: Martin Pool
  • Date: 2007-04-04 06:17:31 UTC
  • mto: This revision was merged to the branch mainline in revision 2397.
  • Revision ID: mbp@sourcefrog.net-20070404061731-tt2xrzllqhbodn83
Contents of TODO file moved into bug tracker

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., 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 osutils wrapper."""
18
18
 
21
21
import os
22
22
import sys
23
23
 
 
24
import bzrlib
24
25
from bzrlib import (
25
26
    errors,
26
27
    osutils,
27
28
    )
28
29
from bzrlib.tests import (
29
30
        StringIOWrapper,
30
 
        TestCase,
 
31
        TestCase, 
 
32
        TestSkipped,
31
33
        )
32
34
 
33
35
 
34
36
class FakeCodec(object):
35
37
    """Special class that helps testing over several non-existed encodings.
36
 
 
 
38
    
37
39
    Clients can add new encoding names, but because of how codecs is
38
40
    implemented they cannot be removed. Be careful with naming to avoid
39
41
    collisions between tests.
51
53
            self._registered = True
52
54
        if encoding_name is not None:
53
55
            self._enabled_encodings.add(encoding_name)
54
 
 
 
56
        
55
57
    def __call__(self, encoding_name):
56
58
        """Called indirectly by codecs module during lookup"""
57
59
        if encoding_name in self._enabled_encodings:
62
64
 
63
65
 
64
66
class TestFakeCodec(TestCase):
65
 
 
 
67
    
66
68
    def test_fake_codec(self):
67
69
        self.assertRaises(LookupError, codecs.lookup, 'fake')
68
70
 
74
76
    """Test the auto-detection of proper terminal encoding."""
75
77
 
76
78
    def setUp(self):
77
 
        TestCase.setUp(self)
78
79
        self._stdout = sys.stdout
79
80
        self._stderr = sys.stderr
80
81
        self._stdin = sys.stdin
81
 
        self._user_encoding = osutils._cached_user_encoding
 
82
        self._user_encoding = bzrlib.user_encoding
82
83
 
83
84
        self.addCleanup(self._reset)
84
85
 
85
 
    def make_wrapped_streams(self,
 
86
    def make_wrapped_streams(self, 
86
87
                             stdout_encoding,
87
88
                             stderr_encoding,
88
89
                             stdin_encoding,
94
95
        sys.stderr.encoding = stderr_encoding
95
96
        sys.stdin = StringIOWrapper()
96
97
        sys.stdin.encoding = stdin_encoding
97
 
        osutils._cached_user_encoding = user_encoding
 
98
        bzrlib.user_encoding = user_encoding
98
99
        if enable_fake_encodings:
99
100
            fake_codec.add(stdout_encoding)
100
101
            fake_codec.add(stderr_encoding)
104
105
        sys.stdout = self._stdout
105
106
        sys.stderr = self._stderr
106
107
        sys.stdin = self._stdin
107
 
        osutils._cached_user_encoding = self._user_encoding
 
108
        bzrlib.user_encoding = self._user_encoding
108
109
 
109
110
    def test_get_terminal_encoding(self):
110
111
        self.make_wrapped_streams('stdout_encoding',
119
120
        self.assertEqual('stdin_encoding', osutils.get_terminal_encoding())
120
121
 
121
122
        sys.stdin.encoding = None
122
 
        # and in the worst case, use osutils.get_user_encoding()
 
123
        # and in the worst case, use bzrlib.user_encoding
123
124
        self.assertEqual('user_encoding', osutils.get_terminal_encoding())
124
125
 
125
126
    def test_terminal_cp0(self):
144
145
                                  'cp-unknown',
145
146
                                  user_encoding='latin-1',
146
147
                                  enable_fake_encodings=False)
147
 
 
 
148
        
148
149
        self.assertEqual('latin-1', osutils.get_terminal_encoding())
149
150
 
150
151
        # check stderr
151
152
        self.assertEquals('bzr: warning: unknown terminal encoding cp-unknown.\n'
152
 
                          '  Using encoding latin-1 instead.\n',
 
153
                          '  Using encoding latin-1 instead.\n', 
153
154
                          sys.stderr.getvalue())
154
155
 
155
156
 
156
157
class TestUserEncoding(TestCase):
157
158
    """Test detection of default user encoding."""
158
 
 
 
159
    
159
160
    def setUp(self):
160
 
        TestCase.setUp(self)
161
161
        self._stderr = sys.stderr
162
162
        self._getpreferredencoding = locale.getpreferredencoding
163
163
        self.addCleanup(self._reset)
198
198
                          ' Continuing with ascii encoding.\n',
199
199
                          sys.stderr.getvalue())
200
200
 
201
 
    def test_user_empty(self):
202
 
        """Running bzr from a vim script gives '' for a preferred locale"""
203
 
        def f():
204
 
            return ''
205
 
 
206
 
        locale.getpreferredencoding = f
207
 
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
208
 
        self.assertEquals('', sys.stderr.getvalue())
209
 
 
210
201
    def test_user_locale_error(self):
211
202
        def f():
212
203
            raise locale.Error, 'unsupported locale'