aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_pyrepl/test_reader.py
diff options
context:
space:
mode:
authorLysandros Nikolaou <lisandrosnik@gmail.com>2024-06-04 18:09:31 +0200
committerGitHub <noreply@github.com>2024-06-04 18:09:31 +0200
commit8fc7653766b106bdbc4ff6154e0020aea4ab15e6 (patch)
tree3b2873331603a1f2510d4b0067b433c8fc18d81a /Lib/test/test_pyrepl/test_reader.py
parent4dcd91ceafce91ec37bb1a9d544e41fc65578994 (diff)
downloadcpython-8fc7653766b106bdbc4ff6154e0020aea4ab15e6.tar.gz
cpython-8fc7653766b106bdbc4ff6154e0020aea4ab15e6.zip
gh-120041: Do not use append_to_screen when completions are visible (GH-120042)
Diffstat (limited to 'Lib/test/test_pyrepl/test_reader.py')
-rw-r--r--Lib/test/test_pyrepl/test_reader.py37
1 files changed, 36 insertions, 1 deletions
diff --git a/Lib/test/test_pyrepl/test_reader.py b/Lib/test/test_pyrepl/test_reader.py
index 9fb956b6555..d02815bfa11 100644
--- a/Lib/test/test_pyrepl/test_reader.py
+++ b/Lib/test/test_pyrepl/test_reader.py
@@ -1,5 +1,6 @@
import itertools
import functools
+import rlcompleter
from unittest import TestCase
from .support import handle_all_events, handle_events_narrow_console, code_to_events, prepare_reader
@@ -9,7 +10,7 @@ from _pyrepl.reader import Reader
class TestReader(TestCase):
def assert_screen_equals(self, reader, expected):
- actual = reader.calc_screen()
+ actual = reader.screen
expected = expected.split("\n")
self.assertListEqual(actual, expected)
@@ -208,3 +209,37 @@ class TestReader(TestCase):
prompt, l = Reader.process_prompt(ps1)
self.assertEqual(prompt, "\033[0;32m樂>\033[0m> ")
self.assertEqual(l, 5)
+
+ def test_completions_updated_on_key_press(self):
+ namespace = {"itertools": itertools}
+ code = "itertools."
+ events = itertools.chain(code_to_events(code), [
+ Event(evt='key', data='\t', raw=bytearray(b'\t')), # Two tabs for completion
+ Event(evt='key', data='\t', raw=bytearray(b'\t')),
+ ], code_to_events("a"))
+
+ completing_reader = functools.partial(
+ prepare_reader,
+ readline_completer=rlcompleter.Completer(namespace).complete
+ )
+ reader, _ = handle_all_events(events, prepare_reader=completing_reader)
+
+ actual = reader.screen
+ self.assertEqual(len(actual), 2)
+ self.assertEqual(actual[0].rstrip(), "itertools.accumulate(")
+ self.assertEqual(actual[1], f"{code}a")
+
+ def test_key_press_on_tab_press_once(self):
+ namespace = {"itertools": itertools}
+ code = "itertools."
+ events = itertools.chain(code_to_events(code), [
+ Event(evt='key', data='\t', raw=bytearray(b'\t')),
+ ], code_to_events("a"))
+
+ completing_reader = functools.partial(
+ prepare_reader,
+ readline_completer=rlcompleter.Completer(namespace).complete
+ )
+ reader, _ = handle_all_events(events, prepare_reader=completing_reader)
+
+ self.assert_screen_equals(reader, f"{code}a")