~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_ui.py

(jameinel) Allow 'bzr serve' to interpret SIGHUP as a graceful shutdown.
 (bug #795025) (John A Meinel)

Show diffs side-by-side

added added

removed removed

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