[MERGE] Add get_username() call to the UIFactory.
Vincent Ladeuil
v.ladeuil+lp at free.fr
Tue Apr 7 11:25:22 BST 2009
>>>>> "Jelmer" == Jelmer Vernooij <jelmer at samba.org> writes:
<snip/>
Jelmer> === modified file 'bzrlib/tests/test_ui.py'
Jelmer> --- bzrlib/tests/test_ui.py 2009-03-23 14:59:43 +0000
Jelmer> +++ bzrlib/tests/test_ui.py 2009-04-02 13:36:58 +0000
Jelmer> @@ -254,6 +254,44 @@
Jelmer> finally:
Jelmer> pb.finished()
Jelmer> + def test_silent_ui_getusername(self):
Jelmer> + factory = SilentUIFactory()
Jelmer> + factory.stdin = StringIO("someuser\n\n")
Jelmer> + factory.stdout = StringIO()
Jelmer> + self.assertEquals(None,
Jelmer> + factory.get_username(u'Hello\u1234 %(host)s', host=u'some\u1234'))
Jelmer> + self.assertEquals("", factory.stdout.getvalue())
Jelmer> + self.assertEquals("someuser\n\n", factory.stdin.getvalue())
Jelmer> +
Jelmer> + def test_text_ui_getusername(self):
Jelmer> + factory = TextUIFactory(None, None, None)
Jelmer> + factory.stdin = StringIO("someuser\n\n")
Jelmer> + factory.stdout = StringIO()
Jelmer> + factory.stdout.encoding = "utf8"
Jelmer> + # there is no output from the base factory
Jelmer> + self.assertEqual("someuser",
Jelmer> + factory.get_username('Hello %(host)s', host='some'))
Jelmer> + self.assertEquals("Hello some: ", factory.stdout.getvalue())
Jelmer> + self.assertEqual("", factory.get_username("Gebruiker"))
Jelmer> + # stdin should be empty
Jelmer> + self.assertEqual('', factory.stdin.readline())
Any reason to *not* use stdin.getvalue() here ? Using readline()
introduces some fuzzy feeling (did we already reach EOF or not ?)
I'd prefer to avoid.
Jelmer> +
Jelmer> + def test_text_ui_getusername_utf8(self):
Jelmer> + ui = TestUIFactory(stdin=u'someuser\u1234'.encode('utf8'),
Jelmer> + stdout=StringIOWrapper())
Jelmer> + ui.stdin.encoding = "utf8"
Jelmer> + ui.stdout.encoding = ui.stdin.encoding
Jelmer> + pb = ui.nested_progress_bar()
Jelmer> + try:
Jelmer> + # there is no output from the base factory
Jelmer> + username = ui.get_username(u'Hello\u1234 %(host)s',
Jelmer> + host=u'some\u1234')
Jelmer> + self.assertEquals(u"someuser\u1234", username.decode('utf8'))
Jelmer> + self.assertEquals(ui.stdout.getvalue().decode("utf8"),
Jelmer> + u"Hello\u1234 some\u1234: ")
Use assert(expected, actual) consistently please.
Jelmer> === modified file 'bzrlib/ui/__init__.py'
Jelmer> --- bzrlib/ui/__init__.py 2009-04-02 17:41:41 +0000
Jelmer> +++ bzrlib/ui/__init__.py 2009-04-03 17:19:39 +0000
Jelmer> @@ -197,6 +197,20 @@
Jelmer> # as opposed to 'my password is empty' -- does it matter?
Jelmer> return self.get_non_echoed_password()
Jelmer> + def get_username(self, prompt, **kwargs):
Jelmer> + """Prompt the user for a password.
Jelmer> +
Jelmer> + :param prompt: The prompt to present the user
Jelmer> + :param kwargs: Arguments which will be expanded into the prompt.
Jelmer> + This lets front ends display different things if
Jelmer> + they so choose.
Jelmer> + :return: The username string, return None if the user
Jelmer> + canceled the request.
I'm afraid you can't return None with that implementation.
Jelmer> + """
Jelmer> + prompt += ': '
Jelmer> + self.prompt(prompt, **kwargs)
Jelmer> + return self.stdin.readline().rstrip("\n")
Jelmer> +
... or rstrip will barf.
See get_non_echoed_password() for an alternate implementation.
Those remarks are minor enough to get addressed without
resubmitting, so:
BB:tweak
Feel free to resubmit if you have concerns,
Vincent
More information about the bazaar
mailing list