~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_ui.py

  • Committer: Andrew Bennetts
  • Date: 2010-09-17 04:32:50 UTC
  • mto: This revision was merged to the branch mainline in revision 5433.
  • Revision ID: andrew.bennetts@canonical.com-20100917043250-4f57ifkg0yu321t7
Reuse self._log_file rather than make new StringIO, and wrap pre-existing long line.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2011 Canonical Ltd
 
1
# Copyright (C) 2005-2010 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
17
17
"""Tests for the bzrlib ui
18
18
"""
19
19
 
 
20
import os
20
21
import time
21
22
 
22
23
from StringIO import StringIO
25
26
 
26
27
from bzrlib import (
27
28
    config,
 
29
    errors,
28
30
    remote,
 
31
    repository,
29
32
    tests,
30
33
    ui as _mod_ui,
31
34
    )
 
35
from bzrlib.symbol_versioning import (
 
36
    deprecated_in,
 
37
    )
32
38
from bzrlib.tests import (
33
39
    fixtures,
34
40
    test_progress,
63
69
    def test_text_factory_confirm(self):
64
70
        # turns into reading a regular boolean
65
71
        ui = self.make_test_ui_factory('n\n')
66
 
        self.assertEquals(ui.confirm_action(u'Should %(thing)s pass?',
 
72
        self.assertEquals(ui.confirm_action('Should %(thing)s pass?',
67
73
            'bzrlib.tests.test_ui.confirmation',
68
74
            {'thing': 'this'},),
69
75
            False)
119
125
        stdout = tests.StringIOWrapper()
120
126
        stderr = tests.StringIOWrapper()
121
127
        factory = _mod_ui_text.TextUIFactory(stdin, stdout, stderr)
122
 
        self.assertEqual(True, factory.get_boolean(u""))
123
 
        self.assertEqual(False, factory.get_boolean(u""))
124
 
        self.assertEqual(True, factory.get_boolean(u""))
125
 
        self.assertEqual(False, factory.get_boolean(u""))
126
 
        self.assertEqual(True, factory.get_boolean(u""))
127
 
        self.assertEqual(False, factory.get_boolean(u""))
 
128
        self.assertEqual(True, factory.get_boolean(""))
 
129
        self.assertEqual(False, factory.get_boolean(""))
 
130
        self.assertEqual(True, factory.get_boolean(""))
 
131
        self.assertEqual(False, factory.get_boolean(""))
 
132
        self.assertEqual(True, factory.get_boolean(""))
 
133
        self.assertEqual(False, factory.get_boolean(""))
128
134
        self.assertEqual("foo\n", factory.stdin.read())
129
135
        # stdin should be empty
130
136
        self.assertEqual('', factory.stdin.readline())
137
143
        stdout = tests.StringIOWrapper()
138
144
        stderr = tests.StringIOWrapper()
139
145
        factory = _mod_ui_text.TextUIFactory(stdin, stdout, stderr)
140
 
        self.assertEqual(1, factory.get_integer(u""))
141
 
        self.assertEqual(-2, factory.get_integer(u""))
142
 
        self.assertEqual(42, factory.get_integer(u""))
 
146
        self.assertEqual(1, factory.get_integer(""))
 
147
        self.assertEqual(-2, factory.get_integer(""))
 
148
        self.assertEqual(42, factory.get_integer(""))
143
149
 
144
150
    def test_text_factory_prompt(self):
145
151
        # see <https://launchpad.net/bugs/365891>
146
152
        StringIO = tests.StringIOWrapper
147
153
        factory = _mod_ui_text.TextUIFactory(StringIO(), StringIO(), StringIO())
148
 
        factory.prompt(u'foo %2e')
 
154
        factory.prompt('foo %2e')
149
155
        self.assertEqual('', factory.stdout.getvalue())
150
156
        self.assertEqual('foo %2e', factory.stderr.getvalue())
151
157
 
152
158
    def test_text_factory_prompts_and_clears(self):
153
159
        # a get_boolean call should clear the pb before prompting
154
160
        out = test_progress._TTYStringIO()
155
 
        self.overrideEnv('TERM', 'xterm')
 
161
        os.environ['TERM'] = 'xterm'
156
162
        factory = _mod_ui_text.TextUIFactory(
157
163
            stdin=tests.StringIOWrapper("yada\ny\n"),
158
164
            stdout=out, stderr=out)
166
172
                         self.apply_redirected(None, factory.stdout,
167
173
                                               factory.stdout,
168
174
                                               factory.get_boolean,
169
 
                                               u"what do you want"))
 
175
                                               "what do you want"))
170
176
        output = out.getvalue()
171
177
        self.assertContainsRe(output,
172
178
            "| foo *\r\r  *\r*")
195
201
        factory.stdout.encoding = "utf8"
196
202
        # there is no output from the base factory
197
203
        self.assertEqual("someuser",
198
 
                         factory.get_username(u'Hello %(host)s', host='some'))
 
204
                         factory.get_username('Hello %(host)s', host='some'))
199
205
        self.assertEquals("Hello some: ", factory.stderr.getvalue())
200
206
        self.assertEquals('', factory.stdout.getvalue())
201
 
        self.assertEqual("", factory.get_username(u"Gebruiker"))
 
207
        self.assertEqual("", factory.get_username("Gebruiker"))
202
208
        # stdin should be empty
203
209
        self.assertEqual('', factory.stdin.readline())
204
210
 
220
226
            pb.finished()
221
227
 
222
228
    def test_quietness(self):
223
 
        self.overrideEnv('BZR_PROGRESS_BAR', 'text')
 
229
        os.environ['BZR_PROGRESS_BAR'] = 'text'
224
230
        ui_factory = _mod_ui_text.TextUIFactory(None,
225
231
            test_progress._TTYStringIO(),
226
232
            test_progress._TTYStringIO())
232
238
 
233
239
    def test_text_ui_show_user_warning(self):
234
240
        from bzrlib.repofmt.groupcompress_repo import RepositoryFormat2a
235
 
        from bzrlib.repofmt.knitpack_repo import RepositoryFormatKnitPack5
 
241
        from bzrlib.repofmt.pack_repo import RepositoryFormatKnitPack5
236
242
        err = StringIO()
237
243
        out = StringIO()
238
244
        ui = tests.TextUIFactory(stdin=None, stdout=out, stderr=err)
307
313
            # however, it can still be forced on
308
314
            (FileStringIO, 'dumb', 'text', _mod_ui_text.TextProgressView),
309
315
            ):
310
 
            self.overrideEnv('TERM', term)
311
 
            self.overrideEnv('BZR_PROGRESS_BAR', pb)
 
316
            os.environ['TERM'] = term
 
317
            if pb is None:
 
318
                if 'BZR_PROGRESS_BAR' in os.environ:
 
319
                    del os.environ['BZR_PROGRESS_BAR']
 
320
            else:
 
321
                os.environ['BZR_PROGRESS_BAR'] = pb
312
322
            stdin = file_class('')
313
323
            stderr = file_class()
314
324
            stdout = file_class()
325
335
        stderr = test_progress._NonTTYStringIO()
326
336
        stdout = test_progress._NonTTYStringIO()
327
337
        for term_type in ['dumb', None, 'xterm']:
328
 
            self.overrideEnv('TERM', term_type)
 
338
            if term_type is None:
 
339
                del os.environ['TERM']
 
340
            else:
 
341
                os.environ['TERM'] = term_type
329
342
            uif = _mod_ui.make_ui_for_terminal(stdin, stdout, stderr)
330
343
            self.assertIsInstance(uif, _mod_ui_text.TextUIFactory,
331
344
                'TERM=%r' % (term_type,))
352
365
        self.assertRaises(
353
366
            NotImplementedError,
354
367
            self.apply_redirected,
355
 
            None, stdout, stdout, factory.get_boolean, u"foo")
 
368
            None, stdout, stdout, factory.get_boolean, "foo")
356
369
 
357
370
 
358
371
class TestUIFactoryTests(tests.TestCase):
371
384
 
372
385
    def test_canned_input_get_input(self):
373
386
        uif = _mod_ui.CannedInputUIFactory([True, 'mbp', 'password', 42])
374
 
        self.assertEqual(True, uif.get_boolean(u'Extra cheese?'))
375
 
        self.assertEqual('mbp', uif.get_username(u'Enter your user name'))
 
387
        self.assertEqual(True, uif.get_boolean('Extra cheese?'))
 
388
        self.assertEqual('mbp', uif.get_username('Enter your user name'))
376
389
        self.assertEqual('password',
377
 
                         uif.get_password(u'Password for %(host)s',
 
390
                         uif.get_password('Password for %(host)s',
378
391
                                          host='example.com'))
379
 
        self.assertEqual(42, uif.get_integer(u'And all that jazz ?'))
 
392
        self.assertEqual(42, uif.get_integer('And all that jazz ?'))
380
393
 
381
394
 
382
395
class TestBoolFromString(tests.TestCase):