257
def test_silent_ui_getusername(self):
258
factory = SilentUIFactory()
259
factory.stdin = StringIO("someuser\n\n")
260
factory.stdout = StringIO()
261
self.assertEquals(None,
262
factory.get_username(u'Hello\u1234 %(host)s', host=u'some\u1234'))
263
self.assertEquals("", factory.stdout.getvalue())
264
self.assertEquals("someuser\n\n", factory.stdin.getvalue())
266
def test_text_ui_getusername(self):
267
factory = TextUIFactory(None, None, None)
268
factory.stdin = StringIO("someuser\n\n")
269
factory.stdout = StringIO()
270
factory.stdout.encoding = "utf8"
271
# there is no output from the base factory
272
self.assertEqual("someuser",
273
factory.get_username('Hello %(host)s', host='some'))
274
self.assertEquals("Hello some: ", factory.stdout.getvalue())
275
self.assertEqual("", factory.get_username("Gebruiker"))
276
# stdin should be empty
277
self.assertEqual('', factory.stdin.readline())
279
def test_text_ui_getusername_utf8(self):
280
ui = TestUIFactory(stdin=u'someuser\u1234'.encode('utf8'),
281
stdout=StringIOWrapper())
282
ui.stdin.encoding = "utf8"
283
ui.stdout.encoding = ui.stdin.encoding
284
pb = ui.nested_progress_bar()
286
# there is no output from the base factory
287
username = self.apply_redirected(ui.stdin, ui.stdout, ui.stdout,
288
ui.get_username, u'Hello\u1234 %(host)s', host=u'some\u1234')
289
self.assertEquals(u"someuser\u1234", username.decode('utf8'))
290
self.assertEquals(u"Hello\u1234 some\u1234: ",
291
ui.stdout.getvalue().decode("utf8"))
296
class TestTextProgressView(TestCase):
297
"""Tests for text display of progress bars.
299
# XXX: These might be a bit easier to write if the rendering and
300
# state-maintaining parts of TextProgressView were more separate, and if
301
# the progress task called back directly to its own view not to the ui
302
# factory. -- mbp 20090312
304
def _make_factory(self):
306
uif = TextUIFactory(stderr=out)
307
uif._progress_view._width = 80
310
def test_render_progress_easy(self):
311
"""Just one task and one quarter done"""
312
out, uif = self._make_factory()
313
task = uif.nested_progress_bar()
314
task.update('reticulating splines', 5, 20)
316
'\r[####/ ] reticulating splines 5/20 \r'
319
def test_render_progress_nested(self):
320
"""Tasks proportionally contribute to overall progress"""
321
out, uif = self._make_factory()
322
task = uif.nested_progress_bar()
323
task.update('reticulating splines', 0, 2)
324
task2 = uif.nested_progress_bar()
325
task2.update('stage2', 1, 2)
326
# so we're in the first half of the main task, and half way through
329
r'[####\ ] reticulating splines:stage2 1/2'
330
, uif._progress_view._render_line())
331
# if the nested task is complete, then we're all the way through the
332
# first half of the overall work
333
task2.update('stage2', 2, 2)
335
r'[#########| ] reticulating splines:stage2 2/2'
336
, uif._progress_view._render_line())
338
def test_render_progress_sub_nested(self):
339
"""Intermediate tasks don't mess up calculation."""
340
out, uif = self._make_factory()
341
task_a = uif.nested_progress_bar()
342
task_a.update('a', 0, 2)
343
task_b = uif.nested_progress_bar()
345
task_c = uif.nested_progress_bar()
346
task_c.update('c', 1, 2)
347
# the top-level task is in its first half; the middle one has no
348
# progress indication, just a label; and the bottom one is half done,
349
# so the overall fraction is 1/4
351
r'[####| ] a:b:c 1/2'
352
, uif._progress_view._render_line())