[Python-checkins] cpython (3.5): Issue #16182: Attempted workarounds for Apple Editline

martin.panter python-checkins at python.org
Tue Jun 14 01:51:12 EDT 2016


https://hg.python.org/cpython/rev/0794bbfceec6
changeset:   102006:0794bbfceec6
branch:      3.5
parent:      102001:438359d00a83
user:        Martin Panter <vadmium+py at gmail.com>
date:        Tue Jun 14 05:45:31 2016 +0000
summary:
  Issue #16182: Attempted workarounds for Apple Editline

files:
  Lib/test/test_readline.py |  18 +++++++++++++-----
  1 files changed, 13 insertions(+), 5 deletions(-)


diff --git a/Lib/test/test_readline.py b/Lib/test/test_readline.py
--- a/Lib/test/test_readline.py
+++ b/Lib/test/test_readline.py
@@ -15,6 +15,8 @@
 # Skip tests if there is no readline module
 readline = import_module('readline')
 
+is_editline = readline.__doc__ and "libedit" in readline.__doc__
+
 @unittest.skipUnless(hasattr(readline, "clear_history"),
                      "The history update test cannot be run because the "
                      "clear_history method is not available.")
@@ -99,14 +101,17 @@
         self.addCleanup(os.remove, TESTFN)
         readline.clear_history()
         readline.read_history_file(TESTFN)
+        if is_editline:
+            # An add_history() call seems to be required for get_history_
+            # item() to register items from the file
+            readline.add_history("dummy")
         self.assertEqual(readline.get_history_item(1), "entrée 1")
         self.assertEqual(readline.get_history_item(2), "entrée 22")
 
 
 class TestReadline(unittest.TestCase):
 
-    @unittest.skipIf(readline._READLINE_VERSION < 0x0600
-                     and "libedit" not in readline.__doc__,
+    @unittest.skipIf(readline._READLINE_VERSION < 0x0600 and not is_editline,
                      "not supported in this library version")
     def test_init(self):
         # Issue #19884: Ensure that the ANSI sequence "\033[1034h" is not
@@ -127,7 +132,9 @@
 if readline.__doc__ and "libedit" in readline.__doc__:
     readline.parse_and_bind(r'bind ^B ed-prev-char')
     readline.parse_and_bind(r'bind "\t" rl_complete')
-    readline.parse_and_bind('bind -s ^A "|t\xEB[after]"')
+    # The insert_line() call via pre_input_hook() does nothing with Editline,
+    # so include the extra text that would have been inserted here
+    readline.parse_and_bind('bind -s ^A "[\xEFnserted]|t\xEB[after]"')
 else:
     readline.parse_and_bind(r'Control-b: backward-char')
     readline.parse_and_bind(r'"\t": complete')
@@ -173,8 +180,9 @@
         self.assertIn(b"text 't\\xeb'\r\n", output)
         self.assertIn(b"line '[\\xefnserted]|t\\xeb[after]'\r\n", output)
         self.assertIn(b"indexes 11 13\r\n", output)
-        self.assertIn(b"substitution 't\\xeb'\r\n", output)
-        self.assertIn(b"matches ['t\\xebnt', 't\\xebxt']\r\n", output)
+        if not is_editline:  # display() hook not called under Editline
+            self.assertIn(b"substitution 't\\xeb'\r\n", output)
+            self.assertIn(b"matches ['t\\xebnt', 't\\xebxt']\r\n", output)
         expected = br"'[\xefnserted]|t\xebxt[after]'"
         self.assertIn(b"result " + expected + b"\r\n", output)
         self.assertIn(b"history " + expected + b"\r\n", output)

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list