Rev 4508: ui.get_boolean can also use bool_from_string. in file:///home/vila/src/bzr/experimental/bool-config-option/

Vincent Ladeuil v.ladeuil+lp at free.fr
Thu Jul 2 10:09:35 BST 2009


At file:///home/vila/src/bzr/experimental/bool-config-option/

------------------------------------------------------------
revno: 4508
revision-id: v.ladeuil+lp at free.fr-20090702090935-ya2kx3t8mz1tsf2k
parent: v.ladeuil+lp at free.fr-20090702090722-m7evvdlgz7pxg0xo
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: bool-config-option
timestamp: Thu 2009-07-02 11:09:35 +0200
message:
  ui.get_boolean can also use bool_from_string.
  
  * bzrlib/ui/__init__.py:
  (CLIUIFactory.get_boolean): Simplified by using bool_from_string.
-------------- next part --------------
=== modified file 'bzrlib/tests/test_ui.py'
--- a/bzrlib/tests/test_ui.py	2009-07-02 08:52:35 +0000
+++ b/bzrlib/tests/test_ui.py	2009-07-02 09:09:35 +0000
@@ -174,21 +174,22 @@
         pb1.finished()
 
     def assert_get_bool_acceptance_of_user_input(self, factory):
-        factory.stdin = StringIO("y\nyes with garbage\n"
-                                 "yes\nn\nnot an answer\n"
-                                 "no\n"
-                                 "N\nY\n"
-                                 "foo\n"
-                                )
+        factory.stdin = StringIO("y\n" # True
+                                 "n\n" # False
+                                 "yes with garbage\nY\n" # True
+                                 "not an answer\nno\n" # False
+                                 "I'm sure!\nyes\n" # True
+                                 "NO\n" # False
+                                 "foo\n")
         factory.stdout = StringIO()
         factory.stderr = StringIO()
         # there is no output from the base factory
         self.assertEqual(True, factory.get_boolean(""))
-        self.assertEqual(True, factory.get_boolean(""))
-        self.assertEqual(False, factory.get_boolean(""))
-        self.assertEqual(False, factory.get_boolean(""))
-        self.assertEqual(False, factory.get_boolean(""))
-        self.assertEqual(True, factory.get_boolean(""))
+        self.assertEqual(False, factory.get_boolean(""))
+        self.assertEqual(True, factory.get_boolean(""))
+        self.assertEqual(False, factory.get_boolean(""))
+        self.assertEqual(True, factory.get_boolean(""))
+        self.assertEqual(False, factory.get_boolean(""))
         self.assertEqual("foo\n", factory.stdin.read())
         # stdin should be empty
         self.assertEqual('', factory.stdin.readline())

=== modified file 'bzrlib/ui/__init__.py'
--- a/bzrlib/ui/__init__.py	2009-07-02 08:52:35 +0000
+++ b/bzrlib/ui/__init__.py	2009-07-02 09:09:35 +0000
@@ -192,15 +192,16 @@
         self.stdout = stdout or sys.stdout
         self.stderr = stderr or sys.stderr
 
+    _accepted_boolean_strings = dict(y=True, n=False, yes=True, no=False)
+
     def get_boolean(self, prompt):
         while True:
             self.prompt(prompt + "? [y/n]: ")
             line = self.stdin.readline()
-            line = line.lower()
-            if line in ('y\n', 'yes\n'):
-                return True
-            if line in ('n\n', 'no\n'):
-                return False
+            line = line.rstrip('\n')
+            val = bool_from_string(line, self._accepted_boolean_strings)
+            if val is not None:
+                return val
 
     def get_non_echoed_password(self):
         isatty = getattr(self.stdin, 'isatty', None)



More information about the bazaar-commits mailing list