~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-07-29 04:07:27 UTC
  • mto: (5050.3.16 2.2)
  • mto: This revision was merged to the branch mainline in revision 5365.
  • Revision ID: andrew.bennetts@canonical.com-20100729040727-amlyw1jt3xhw17ku
Delete test_merge_into, and put those tests directly in test_merge.

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
"""
19
19
 
20
20
import os
 
21
import re
21
22
import time
22
23
 
23
24
from StringIO import StringIO
24
25
 
25
 
from testtools.matchers import *
26
 
 
27
26
from bzrlib import (
28
27
    config,
29
28
    errors,
40
39
    test_progress,
41
40
    )
42
41
from bzrlib.ui import text as _mod_ui_text
43
 
from bzrlib.tests.testui import (
44
 
    ProgressRecordingUIFactory,
45
 
    )
46
42
 
47
43
 
48
44
class TestUIConfiguration(tests.TestCaseWithTransport):
54
50
        ui = tests.TestUIFactory(stdin=None,
55
51
            stdout=tests.StringIOWrapper(),
56
52
            stderr=tests.StringIOWrapper())
57
 
        output = ui.make_output_stream()
58
 
        self.assertEquals(output.encoding, enc)
 
53
        os = ui.make_output_stream()
 
54
        self.assertEquals(os.encoding, enc)
59
55
 
60
56
 
61
57
class TestTextUIFactory(tests.TestCase):
62
58
 
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
 
 
77
59
    def test_text_factory_ascii_password(self):
78
 
        ui = self.make_test_ui_factory('secret\n')
 
60
        ui = tests.TestUIFactory(stdin='secret\n',
 
61
                                 stdout=tests.StringIOWrapper(),
 
62
                                 stderr=tests.StringIOWrapper())
79
63
        pb = ui.nested_progress_bar()
80
64
        try:
81
65
            self.assertEqual('secret',
96
80
        We can't predict what encoding users will have for stdin, so we force
97
81
        it to utf8 to test that we transport the password correctly.
98
82
        """
99
 
        ui = self.make_test_ui_factory(u'baz\u1234'.encode('utf8'))
 
83
        ui = tests.TestUIFactory(stdin=u'baz\u1234'.encode('utf8'),
 
84
                                 stdout=tests.StringIOWrapper(),
 
85
                                 stderr=tests.StringIOWrapper())
100
86
        ui.stderr.encoding = ui.stdout.encoding = ui.stdin.encoding = 'utf8'
101
87
        pb = ui.nested_progress_bar()
102
88
        try:
158
144
    def test_text_factory_prompts_and_clears(self):
159
145
        # a get_boolean call should clear the pb before prompting
160
146
        out = test_progress._TTYStringIO()
161
 
        self.overrideEnv('TERM', 'xterm')
 
147
        os.environ['TERM'] = 'xterm'
162
148
        factory = _mod_ui_text.TextUIFactory(
163
149
            stdin=tests.StringIOWrapper("yada\ny\n"),
164
150
            stdout=out, stderr=out)
226
212
            pb.finished()
227
213
 
228
214
    def test_quietness(self):
229
 
        self.overrideEnv('BZR_PROGRESS_BAR', 'text')
 
215
        os.environ['BZR_PROGRESS_BAR'] = 'text'
230
216
        ui_factory = _mod_ui_text.TextUIFactory(None,
231
217
            test_progress._TTYStringIO(),
232
218
            test_progress._TTYStringIO())
313
299
            # however, it can still be forced on
314
300
            (FileStringIO, 'dumb', 'text', _mod_ui_text.TextProgressView),
315
301
            ):
316
 
            self.overrideEnv('TERM', term)
317
 
            self.overrideEnv('BZR_PROGRESS_BAR', pb)
 
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
318
308
            stdin = file_class('')
319
309
            stderr = file_class()
320
310
            stdout = file_class()
331
321
        stderr = test_progress._NonTTYStringIO()
332
322
        stdout = test_progress._NonTTYStringIO()
333
323
        for term_type in ['dumb', None, 'xterm']:
334
 
            self.overrideEnv('TERM', term_type)
 
324
            if term_type is None:
 
325
                del os.environ['TERM']
 
326
            else:
 
327
                os.environ['TERM'] = term_type
335
328
            uif = _mod_ui.make_ui_for_terminal(stdin, stdout, stderr)
336
329
            self.assertIsInstance(uif, _mod_ui_text.TextUIFactory,
337
330
                'TERM=%r' % (term_type,))
439
432
        self.assertIsNone('0', av)
440
433
        self.assertIsNone('on', av)
441
434
        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)