26
26
import bzrlib.errors as errors
27
27
from bzrlib.progress import TTYProgressBar, ProgressBarStack
28
28
from bzrlib.tests import TestCase
29
from bzrlib.tests.test_progress import _TTYStringIO
29
30
from bzrlib.ui import SilentUIFactory
30
31
from bzrlib.ui.text import TextUIFactory
63
64
def test_progress_note(self):
64
65
stderr = StringIO()
65
66
stdout = StringIO()
66
ui_factory = TextUIFactory()
67
pb = ui_factory.nested_progress_bar()
69
pb.to_messages_file = stdout
70
ui_factory._progress_bar_stack.bottom().to_file = stderr
67
ui_factory = TextUIFactory(bar_type=TTYProgressBar)
68
pb = ui_factory.nested_progress_bar()
70
pb.to_messages_file = stdout
71
ui_factory._progress_bar_stack.bottom().to_file = stderr
73
self.assertEqual(None, result)
74
self.assertEqual("t\n", stdout.getvalue())
75
# Since there was no update() call, there should be no clear() call
76
self.failIf(re.search(r'^\r {10,}\r$', stderr.getvalue()) is not None,
77
'We cleared the stderr without anything to put there')
81
def test_progress_note_clears(self):
84
# The PQM redirects the output to a file, so it
85
# defaults to creating a Dots progress bar. we
86
# need to force it to believe we are a TTY
87
ui_factory = TextUIFactory(bar_type=TTYProgressBar)
88
pb = ui_factory.nested_progress_bar()
90
pb.to_messages_file = stdout
91
ui_factory._progress_bar_stack.bottom().to_file = stderr
92
# Create a progress update that isn't throttled
71
95
result = pb.note('t')
72
96
self.assertEqual(None, result)
73
97
self.assertEqual("t\n", stdout.getvalue())
74
98
# the exact contents will depend on the terminal width and we don't
75
99
# care about that right now - but you're probably running it on at
76
100
# least a 10-character wide terminal :)
77
self.assertContainsRe(stderr.getvalue(), r'^\r {10,}\r$')
101
self.assertContainsRe(stderr.getvalue(), r'\r {10,}\r$')
153
177
def test_text_factory_prompts_and_clears(self):
154
178
# a get_boolean call should clear the pb before prompting
155
179
factory = bzrlib.ui.text.TextUIFactory()
156
factory.stdout = StringIO()
180
factory.stdout = _TTYStringIO()
157
181
factory.stdin = StringIO("yada\ny\n")
158
182
pb = self.apply_redirected(
159
183
factory.stdin, factory.stdout, factory.stdout, factory.nested_progress_bar)
175
199
"\rwhat do you want\\? \\[y/n\\]:what do you want\\? \\[y/n\\]:",
177
self.fail("didn't match factory output %r" % factory)
201
self.fail("didn't match factory output %r, %s" % (factory, output))