~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_osutils_encodings.py

  • Committer: Aaron Bentley
  • Date: 2007-07-17 13:27:14 UTC
  • mfrom: (2624 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2631.
  • Revision ID: abentley@panoramicfeedback.com-20070717132714-tmzx9khmg9501k51
Merge from bzr.dev

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
 
        self.overrideAttr(sys, 'stdin')
79
 
        self.overrideAttr(sys, 'stdout')
80
 
        self.overrideAttr(sys, 'stderr')
81
 
        self.overrideAttr(osutils, '_cached_user_encoding')
82
 
 
83
 
    def make_wrapped_streams(self,
 
79
        self._stdout = sys.stdout
 
80
        self._stderr = sys.stderr
 
81
        self._stdin = sys.stdin
 
82
        self._user_encoding = bzrlib.user_encoding
 
83
 
 
84
        self.addCleanup(self._reset)
 
85
 
 
86
    def make_wrapped_streams(self, 
84
87
                             stdout_encoding,
85
88
                             stderr_encoding,
86
89
                             stdin_encoding,
92
95
        sys.stderr.encoding = stderr_encoding
93
96
        sys.stdin = StringIOWrapper()
94
97
        sys.stdin.encoding = stdin_encoding
95
 
        osutils._cached_user_encoding = user_encoding
 
98
        bzrlib.user_encoding = user_encoding
96
99
        if enable_fake_encodings:
97
100
            fake_codec.add(stdout_encoding)
98
101
            fake_codec.add(stderr_encoding)
99
102
            fake_codec.add(stdin_encoding)
100
103
 
 
104
    def _reset(self):
 
105
        sys.stdout = self._stdout
 
106
        sys.stderr = self._stderr
 
107
        sys.stdin = self._stdin
 
108
        bzrlib.user_encoding = self._user_encoding
 
109
 
101
110
    def test_get_terminal_encoding(self):
102
111
        self.make_wrapped_streams('stdout_encoding',
103
112
                                  'stderr_encoding',
111
120
        self.assertEqual('stdin_encoding', osutils.get_terminal_encoding())
112
121
 
113
122
        sys.stdin.encoding = None
114
 
        # and in the worst case, use osutils.get_user_encoding()
 
123
        # and in the worst case, use bzrlib.user_encoding
115
124
        self.assertEqual('user_encoding', osutils.get_terminal_encoding())
116
125
 
117
126
    def test_terminal_cp0(self):
136
145
                                  'cp-unknown',
137
146
                                  user_encoding='latin-1',
138
147
                                  enable_fake_encodings=False)
139
 
 
 
148
        
140
149
        self.assertEqual('latin-1', osutils.get_terminal_encoding())
141
150
 
142
151
        # check stderr
143
152
        self.assertEquals('bzr: warning: unknown terminal encoding cp-unknown.\n'
144
 
                          '  Using encoding latin-1 instead.\n',
 
153
                          '  Using encoding latin-1 instead.\n', 
145
154
                          sys.stderr.getvalue())
146
155
 
147
156
 
148
157
class TestUserEncoding(TestCase):
149
158
    """Test detection of default user encoding."""
150
 
 
 
159
    
151
160
    def setUp(self):
152
 
        TestCase.setUp(self)
153
 
        self.overrideAttr(locale, 'getpreferredencoding')
154
 
        self.addCleanup(osutils.set_or_unset_env,
155
 
                        'LANG', os.environ.get('LANG'))
156
 
        self.overrideAttr(sys, 'stderr', StringIOWrapper())
 
161
        self._stderr = sys.stderr
 
162
        self._getpreferredencoding = locale.getpreferredencoding
 
163
        self.addCleanup(self._reset)
 
164
        sys.stderr = StringIOWrapper()
 
165
        # save $LANG
 
166
        self._LANG = os.environ.get('LANG')
 
167
 
 
168
    def _reset(self):
 
169
        locale.getpreferredencoding = self._getpreferredencoding
 
170
        sys.stderr = self._stderr
 
171
        # restore $LANG
 
172
        osutils.set_or_unset_env('LANG', self._LANG)
157
173
 
158
174
    def test_get_user_encoding(self):
159
175
        def f():
182
198
                          ' Continuing with ascii encoding.\n',
183
199
                          sys.stderr.getvalue())
184
200
 
185
 
    def test_user_empty(self):
186
 
        """Running bzr from a vim script gives '' for a preferred locale"""
187
 
        def f():
188
 
            return ''
189
 
 
190
 
        locale.getpreferredencoding = f
191
 
        self.assertEquals('ascii', osutils.get_user_encoding(use_cache=False))
192
 
        self.assertEquals('', sys.stderr.getvalue())
193
 
 
194
201
    def test_user_locale_error(self):
195
202
        def f():
196
203
            raise locale.Error, 'unsupported locale'