~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_ui.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2010-09-15 12:02:35 UTC
  • mfrom: (5416.1.13 ui-factory)
  • Revision ID: pqm@pqm.ubuntu.com-20100915120235-gjrl0gmv0vxbu7b0
(mbp) add structured confirmations to the ui_factory (Martin Pool)

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,
53
54
        ui = tests.TestUIFactory(stdin=None,
54
55
            stdout=tests.StringIOWrapper(),
55
56
            stderr=tests.StringIOWrapper())
56
 
        os = ui.make_output_stream()
57
 
        self.assertEquals(os.encoding, enc)
 
57
        output = ui.make_output_stream()
 
58
        self.assertEquals(output.encoding, enc)
58
59
 
59
60
 
60
61
class TestTextUIFactory(tests.TestCase):
61
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
 
62
77
    def test_text_factory_ascii_password(self):
63
 
        ui = tests.TestUIFactory(stdin='secret\n',
64
 
                                 stdout=tests.StringIOWrapper(),
65
 
                                 stderr=tests.StringIOWrapper())
 
78
        ui = self.make_test_ui_factory('secret\n')
66
79
        pb = ui.nested_progress_bar()
67
80
        try:
68
81
            self.assertEqual('secret',
83
96
        We can't predict what encoding users will have for stdin, so we force
84
97
        it to utf8 to test that we transport the password correctly.
85
98
        """
86
 
        ui = tests.TestUIFactory(stdin=u'baz\u1234'.encode('utf8'),
87
 
                                 stdout=tests.StringIOWrapper(),
88
 
                                 stderr=tests.StringIOWrapper())
 
99
        ui = self.make_test_ui_factory(u'baz\u1234'.encode('utf8'))
89
100
        ui.stderr.encoding = ui.stdout.encoding = ui.stdin.encoding = 'utf8'
90
101
        pb = ui.nested_progress_bar()
91
102
        try:
437
448
        self.assertIsNone('off', av)
438
449
 
439
450
 
 
451
class TestConfirmationUserInterfacePolicy(tests.TestCase):
 
452
 
 
453
    def test_confirm_action_default(self):
 
454
        base_ui = _mod_ui.NoninteractiveUIFactory()
 
455
        for answer in [True, False]:
 
456
            self.assertEquals(
 
457
                _mod_ui.ConfirmationUserInterfacePolicy(base_ui, answer, {})
 
458
                .confirm_action("Do something?",
 
459
                    "bzrlib.tests.do_something", {}),
 
460
                answer)
 
461
 
 
462
    def test_confirm_action_specific(self):
 
463
        base_ui = _mod_ui.NoninteractiveUIFactory()
 
464
        for default_answer in [True, False]:
 
465
            for specific_answer in [True, False]:
 
466
                for conf_id in ['given_id', 'other_id']:
 
467
                    wrapper = _mod_ui.ConfirmationUserInterfacePolicy(
 
468
                        base_ui, default_answer, dict(given_id=specific_answer))
 
469
                    result = wrapper.confirm_action("Do something?", conf_id, {})
 
470
                    if conf_id == 'given_id':
 
471
                        self.assertEquals(result, specific_answer)
 
472
                    else:
 
473
                        self.assertEquals(result, default_answer)
 
474
 
 
475
    def test_repr(self):
 
476
        base_ui = _mod_ui.NoninteractiveUIFactory()
 
477
        wrapper = _mod_ui.ConfirmationUserInterfacePolicy(
 
478
            base_ui, True, dict(a=2))
 
479
        self.assertThat(repr(wrapper),
 
480
            Equals("ConfirmationUserInterfacePolicy("
 
481
                "NoninteractiveUIFactory(), True, {'a': 2})"))
 
482
 
 
483
 
440
484
class TestProgressRecordingUI(tests.TestCase):
441
485
    """Test test-oriented UIFactory that records progress updates"""
442
486