~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_ui.py

  • Committer: John Arbash Meinel
  • Date: 2009-10-20 19:46:46 UTC
  • mfrom: (4759 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4771.
  • Revision ID: john@arbash-meinel.com-20091020194646-wnqpd15qs19y28z7
Merge bzr.dev 4759, bringing in static_tuple and streaming improvements.

Show diffs side-by-side

added added

removed removed

Lines of Context:
42
42
    )
43
43
from bzrlib.ui import (
44
44
    CannedInputUIFactory,
45
 
    CLIUIFactory,
46
45
    SilentUIFactory,
47
46
    UIFactory,
48
47
    make_ui_for_terminal,
54
53
    )
55
54
 
56
55
 
57
 
class UITests(tests.TestCase):
 
56
class TestTextUIFactory(tests.TestCase):
58
57
 
59
58
    def test_text_factory_ascii_password(self):
60
59
        ui = tests.TestUIFactory(stdin='secret\n',
100
99
        finally:
101
100
            pb.finished()
102
101
 
103
 
    def test_progress_construction(self):
104
 
        """TextUIFactory constructs the right progress view.
105
 
        """
106
 
        for (file_class, term, pb, expected_pb_class) in (
107
 
            # on an xterm, either use them or not as the user requests,
108
 
            # otherwise default on
109
 
            (_TTYStringIO, 'xterm', 'none', NullProgressView),
110
 
            (_TTYStringIO, 'xterm', 'text', TextProgressView),
111
 
            (_TTYStringIO, 'xterm', None, TextProgressView),
112
 
            # on a dumb terminal, again if there's explicit configuration do
113
 
            # it, otherwise default off
114
 
            (_TTYStringIO, 'dumb', 'none', NullProgressView),
115
 
            (_TTYStringIO, 'dumb', 'text', TextProgressView),
116
 
            (_TTYStringIO, 'dumb', None, NullProgressView),
117
 
            # on a non-tty terminal, it's null regardless of $TERM
118
 
            (StringIO, 'xterm', None, NullProgressView),
119
 
            (StringIO, 'dumb', None, NullProgressView),
120
 
            # however, it can still be forced on
121
 
            (StringIO, 'dumb', 'text', TextProgressView),
122
 
            ):
123
 
            os.environ['TERM'] = term
124
 
            if pb is None:
125
 
                if 'BZR_PROGRESS_BAR' in os.environ:
126
 
                    del os.environ['BZR_PROGRESS_BAR']
127
 
            else:
128
 
                os.environ['BZR_PROGRESS_BAR'] = pb
129
 
            stdin = file_class('')
130
 
            stderr = file_class()
131
 
            stdout = file_class()
132
 
            uif = make_ui_for_terminal(stdin, stdout, stderr)
133
 
            self.assertIsInstance(uif, TextUIFactory,
134
 
                "TERM=%s BZR_PROGRESS_BAR=%s uif=%r" % (term, pb, uif,))
135
 
            self.assertIsInstance(uif.make_progress_view(),
136
 
                expected_pb_class,
137
 
                "TERM=%s BZR_PROGRESS_BAR=%s uif=%r" % (term, pb, uif,))
138
 
 
139
 
    def test_text_ui_non_terminal(self):
140
 
        """Even on non-ttys, make_ui_for_terminal gives a text ui."""
141
 
        stdin = _NonTTYStringIO('')
142
 
        stderr = _NonTTYStringIO()
143
 
        stdout = _NonTTYStringIO()
144
 
        for term_type in ['dumb', None, 'xterm']:
145
 
            if term_type is None:
146
 
                del os.environ['TERM']
147
 
            else:
148
 
                os.environ['TERM'] = term_type
149
 
            uif = make_ui_for_terminal(stdin, stdout, stderr)
150
 
            self.assertIsInstance(uif, TextUIFactory,
151
 
                'TERM=%r' % (term_type,))
152
 
 
153
102
    def test_progress_note(self):
154
103
        stderr = StringIO()
155
104
        stdout = StringIO()
304
253
            pb.finished()
305
254
 
306
255
 
307
 
class CLIUITests(TestCase):
308
 
 
309
 
    def test_cli_factory_deprecated(self):
310
 
        uif = self.applyDeprecated(deprecated_in((1, 18, 0)),
311
 
            CLIUIFactory,
312
 
            StringIO(), StringIO(), StringIO())
313
 
        self.assertIsInstance(uif, UIFactory)
 
256
class UITests(tests.TestCase):
 
257
 
 
258
    def test_progress_construction(self):
 
259
        """TextUIFactory constructs the right progress view.
 
260
        """
 
261
        for (file_class, term, pb, expected_pb_class) in (
 
262
            # on an xterm, either use them or not as the user requests,
 
263
            # otherwise default on
 
264
            (_TTYStringIO, 'xterm', 'none', NullProgressView),
 
265
            (_TTYStringIO, 'xterm', 'text', TextProgressView),
 
266
            (_TTYStringIO, 'xterm', None, TextProgressView),
 
267
            # on a dumb terminal, again if there's explicit configuration do
 
268
            # it, otherwise default off
 
269
            (_TTYStringIO, 'dumb', 'none', NullProgressView),
 
270
            (_TTYStringIO, 'dumb', 'text', TextProgressView),
 
271
            (_TTYStringIO, 'dumb', None, NullProgressView),
 
272
            # on a non-tty terminal, it's null regardless of $TERM
 
273
            (StringIO, 'xterm', None, NullProgressView),
 
274
            (StringIO, 'dumb', None, NullProgressView),
 
275
            # however, it can still be forced on
 
276
            (StringIO, 'dumb', 'text', TextProgressView),
 
277
            ):
 
278
            os.environ['TERM'] = term
 
279
            if pb is None:
 
280
                if 'BZR_PROGRESS_BAR' in os.environ:
 
281
                    del os.environ['BZR_PROGRESS_BAR']
 
282
            else:
 
283
                os.environ['BZR_PROGRESS_BAR'] = pb
 
284
            stdin = file_class('')
 
285
            stderr = file_class()
 
286
            stdout = file_class()
 
287
            uif = make_ui_for_terminal(stdin, stdout, stderr)
 
288
            self.assertIsInstance(uif, TextUIFactory,
 
289
                "TERM=%s BZR_PROGRESS_BAR=%s uif=%r" % (term, pb, uif,))
 
290
            self.assertIsInstance(uif.make_progress_view(),
 
291
                expected_pb_class,
 
292
                "TERM=%s BZR_PROGRESS_BAR=%s uif=%r" % (term, pb, uif,))
 
293
 
 
294
    def test_text_ui_non_terminal(self):
 
295
        """Even on non-ttys, make_ui_for_terminal gives a text ui."""
 
296
        stdin = _NonTTYStringIO('')
 
297
        stderr = _NonTTYStringIO()
 
298
        stdout = _NonTTYStringIO()
 
299
        for term_type in ['dumb', None, 'xterm']:
 
300
            if term_type is None:
 
301
                del os.environ['TERM']
 
302
            else:
 
303
                os.environ['TERM'] = term_type
 
304
            uif = make_ui_for_terminal(stdin, stdout, stderr)
 
305
            self.assertIsInstance(uif, TextUIFactory,
 
306
                'TERM=%r' % (term_type,))
314
307
 
315
308
 
316
309
class SilentUITests(TestCase):