~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: 2008-10-20 23:58:12 UTC
  • mto: This revision was merged to the branch mainline in revision 3787.
  • Revision ID: mbp@sourcefrog.net-20081020235812-itg90mk0u4dez92z
lp-upload-release now handles names like bzr-1.8.tar.gz

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
 
27
27
    )
28
28
from bzrlib.tests import (
29
29
        StringIOWrapper,
30
 
        TestCase,
 
30
        TestCase, 
31
31
        )
32
32
 
33
33
 
34
34
class FakeCodec(object):
35
35
    """Special class that helps testing over several non-existed encodings.
36
 
 
 
36
    
37
37
    Clients can add new encoding names, but because of how codecs is
38
38
    implemented they cannot be removed. Be careful with naming to avoid
39
39
    collisions between tests.
51
51
            self._registered = True
52
52
        if encoding_name is not None:
53
53
            self._enabled_encodings.add(encoding_name)
54
 
 
 
54
        
55
55
    def __call__(self, encoding_name):
56
56
        """Called indirectly by codecs module during lookup"""
57
57
        if encoding_name in self._enabled_encodings:
62
62
 
63
63
 
64
64
class TestFakeCodec(TestCase):
65
 
 
 
65
    
66
66
    def test_fake_codec(self):
67
67
        self.assertRaises(LookupError, codecs.lookup, 'fake')
68
68
 
74
74
    """Test the auto-detection of proper terminal encoding."""
75
75
 
76
76
    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,
 
77
        self._stdout = sys.stdout
 
78
        self._stderr = sys.stderr
 
79
        self._stdin = sys.stdin
 
80
        self._user_encoding = osutils._cached_user_encoding
 
81
 
 
82
        self.addCleanup(self._reset)
 
83
 
 
84
    def make_wrapped_streams(self, 
84
85
                             stdout_encoding,
85
86
                             stderr_encoding,
86
87
                             stdin_encoding,
98
99
            fake_codec.add(stderr_encoding)
99
100
            fake_codec.add(stdin_encoding)
100
101
 
 
102
    def _reset(self):
 
103
        sys.stdout = self._stdout
 
104
        sys.stderr = self._stderr
 
105
        sys.stdin = self._stdin
 
106
        osutils._cached_user_encoding = self._user_encoding
 
107
 
101
108
    def test_get_terminal_encoding(self):
102
109
        self.make_wrapped_streams('stdout_encoding',
103
110
                                  'stderr_encoding',
136
143
                                  'cp-unknown',
137
144
                                  user_encoding='latin-1',
138
145
                                  enable_fake_encodings=False)
139
 
 
 
146
        
140
147
        self.assertEqual('latin-1', osutils.get_terminal_encoding())
141
148
 
142
149
        # check stderr
143
150
        self.assertEquals('bzr: warning: unknown terminal encoding cp-unknown.\n'
144
 
                          '  Using encoding latin-1 instead.\n',
 
151
                          '  Using encoding latin-1 instead.\n', 
145
152
                          sys.stderr.getvalue())
146
153
 
147
154
 
148
155
class TestUserEncoding(TestCase):
149
156
    """Test detection of default user encoding."""
150
 
 
 
157
    
151
158
    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())
 
159
        self._stderr = sys.stderr
 
160
        self._getpreferredencoding = locale.getpreferredencoding
 
161
        self.addCleanup(self._reset)
 
162
        sys.stderr = StringIOWrapper()
 
163
        # save $LANG
 
164
        self._LANG = os.environ.get('LANG')
 
165
 
 
166
    def _reset(self):
 
167
        locale.getpreferredencoding = self._getpreferredencoding
 
168
        sys.stderr = self._stderr
 
169
        # restore $LANG
 
170
        osutils.set_or_unset_env('LANG', self._LANG)
157
171
 
158
172
    def test_get_user_encoding(self):
159
173
        def f():