~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_ui.py

  • Committer: Jelmer Vernooij
  • Date: 2011-01-11 04:33:12 UTC
  • mto: (5582.12.2 weave-plugin)
  • mto: This revision was merged to the branch mainline in revision 5718.
  • Revision ID: jelmer@samba.org-20110111043312-g4wx6iuf9662f36d
Move weave formats into bzrlib.plugins.weave_fmt.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
"""
19
19
 
20
20
import os
21
 
import re
22
21
import time
23
22
 
24
23
from StringIO import StringIO
25
24
 
 
25
from testtools.matchers import *
 
26
 
26
27
from bzrlib import (
27
28
    config,
28
29
    errors,
39
40
    test_progress,
40
41
    )
41
42
from bzrlib.ui import text as _mod_ui_text
 
43
from bzrlib.tests.testui import (
 
44
    ProgressRecordingUIFactory,
 
45
    )
42
46
 
43
47
 
44
48
class TestUIConfiguration(tests.TestCaseWithTransport):
50
54
        ui = tests.TestUIFactory(stdin=None,
51
55
            stdout=tests.StringIOWrapper(),
52
56
            stderr=tests.StringIOWrapper())
53
 
        os = ui.make_output_stream()
54
 
        self.assertEquals(os.encoding, enc)
 
57
        output = ui.make_output_stream()
 
58
        self.assertEquals(output.encoding, enc)
55
59
 
56
60
 
57
61
class TestTextUIFactory(tests.TestCase):
58
62
 
 
63
    def make_test_ui_factory(self, stdin_contents):
 
64
        ui = tests.TestUIFactory(stdin=stdin_contents,
 
65
                                 stdout=tests.StringIOWrapper(),
 
66
                                 stderr=tests.StringIOWrapper())
 
67
        return ui
 
68
 
 
69
    def test_text_factory_confirm(self):
 
70
        # turns into reading a regular boolean
 
71
        ui = self.make_test_ui_factory('n\n')
 
72
        self.assertEquals(ui.confirm_action('Should %(thing)s pass?',
 
73
            'bzrlib.tests.test_ui.confirmation',
 
74
            {'thing': 'this'},),
 
75
            False)
 
76
 
59
77
    def test_text_factory_ascii_password(self):
60
 
        ui = tests.TestUIFactory(stdin='secret\n',
61
 
                                 stdout=tests.StringIOWrapper(),
62
 
                                 stderr=tests.StringIOWrapper())
 
78
        ui = self.make_test_ui_factory('secret\n')
63
79
        pb = ui.nested_progress_bar()
64
80
        try:
65
81
            self.assertEqual('secret',
80
96
        We can't predict what encoding users will have for stdin, so we force
81
97
        it to utf8 to test that we transport the password correctly.
82
98
        """
83
 
        ui = tests.TestUIFactory(stdin=u'baz\u1234'.encode('utf8'),
84
 
                                 stdout=tests.StringIOWrapper(),
85
 
                                 stderr=tests.StringIOWrapper())
 
99
        ui = self.make_test_ui_factory(u'baz\u1234'.encode('utf8'))
86
100
        ui.stderr.encoding = ui.stdout.encoding = ui.stdin.encoding = 'utf8'
87
101
        pb = ui.nested_progress_bar()
88
102
        try:
144
158
    def test_text_factory_prompts_and_clears(self):
145
159
        # a get_boolean call should clear the pb before prompting
146
160
        out = test_progress._TTYStringIO()
147
 
        os.environ['TERM'] = 'xterm'
 
161
        self.overrideEnv('TERM', 'xterm')
148
162
        factory = _mod_ui_text.TextUIFactory(
149
163
            stdin=tests.StringIOWrapper("yada\ny\n"),
150
164
            stdout=out, stderr=out)
212
226
            pb.finished()
213
227
 
214
228
    def test_quietness(self):
215
 
        os.environ['BZR_PROGRESS_BAR'] = 'text'
 
229
        self.overrideEnv('BZR_PROGRESS_BAR', 'text')
216
230
        ui_factory = _mod_ui_text.TextUIFactory(None,
217
231
            test_progress._TTYStringIO(),
218
232
            test_progress._TTYStringIO())
299
313
            # however, it can still be forced on
300
314
            (FileStringIO, 'dumb', 'text', _mod_ui_text.TextProgressView),
301
315
            ):
302
 
            os.environ['TERM'] = term
303
 
            if pb is None:
304
 
                if 'BZR_PROGRESS_BAR' in os.environ:
305
 
                    del os.environ['BZR_PROGRESS_BAR']
306
 
            else:
307
 
                os.environ['BZR_PROGRESS_BAR'] = pb
 
316
            self.overrideEnv('TERM', term)
 
317
            self.overrideEnv('BZR_PROGRESS_BAR', pb)
308
318
            stdin = file_class('')
309
319
            stderr = file_class()
310
320
            stdout = file_class()
321
331
        stderr = test_progress._NonTTYStringIO()
322
332
        stdout = test_progress._NonTTYStringIO()
323
333
        for term_type in ['dumb', None, 'xterm']:
324
 
            if term_type is None:
325
 
                del os.environ['TERM']
326
 
            else:
327
 
                os.environ['TERM'] = term_type
 
334
            self.overrideEnv('TERM', term_type)
328
335
            uif = _mod_ui.make_ui_for_terminal(stdin, stdout, stderr)
329
336
            self.assertIsInstance(uif, _mod_ui_text.TextUIFactory,
330
337
                'TERM=%r' % (term_type,))
432
439
        self.assertIsNone('0', av)
433
440
        self.assertIsNone('on', av)
434
441
        self.assertIsNone('off', av)
 
442
 
 
443
 
 
444
class TestConfirmationUserInterfacePolicy(tests.TestCase):
 
445
 
 
446
    def test_confirm_action_default(self):
 
447
        base_ui = _mod_ui.NoninteractiveUIFactory()
 
448
        for answer in [True, False]:
 
449
            self.assertEquals(
 
450
                _mod_ui.ConfirmationUserInterfacePolicy(base_ui, answer, {})
 
451
                .confirm_action("Do something?",
 
452
                    "bzrlib.tests.do_something", {}),
 
453
                answer)
 
454
 
 
455
    def test_confirm_action_specific(self):
 
456
        base_ui = _mod_ui.NoninteractiveUIFactory()
 
457
        for default_answer in [True, False]:
 
458
            for specific_answer in [True, False]:
 
459
                for conf_id in ['given_id', 'other_id']:
 
460
                    wrapper = _mod_ui.ConfirmationUserInterfacePolicy(
 
461
                        base_ui, default_answer, dict(given_id=specific_answer))
 
462
                    result = wrapper.confirm_action("Do something?", conf_id, {})
 
463
                    if conf_id == 'given_id':
 
464
                        self.assertEquals(result, specific_answer)
 
465
                    else:
 
466
                        self.assertEquals(result, default_answer)
 
467
 
 
468
    def test_repr(self):
 
469
        base_ui = _mod_ui.NoninteractiveUIFactory()
 
470
        wrapper = _mod_ui.ConfirmationUserInterfacePolicy(
 
471
            base_ui, True, dict(a=2))
 
472
        self.assertThat(repr(wrapper),
 
473
            Equals("ConfirmationUserInterfacePolicy("
 
474
                "NoninteractiveUIFactory(), True, {'a': 2})"))
 
475
 
 
476
 
 
477
class TestProgressRecordingUI(tests.TestCase):
 
478
    """Test test-oriented UIFactory that records progress updates"""
 
479
 
 
480
    def test_nested_ignore_depth_beyond_one(self):
 
481
        # we only want to capture the first level out progress, not
 
482
        # want sub-components might do. So we have nested bars ignored.
 
483
        factory = ProgressRecordingUIFactory()
 
484
        pb1 = factory.nested_progress_bar()
 
485
        pb1.update('foo', 0, 1)
 
486
        pb2 = factory.nested_progress_bar()
 
487
        pb2.update('foo', 0, 1)
 
488
        pb2.finished()
 
489
        pb1.finished()
 
490
        self.assertEqual([("update", 0, 1, 'foo')], factory._calls)