Commit f4fb1432 authored by Yury Selivanov's avatar Yury Selivanov

Issue #25660: Fix a unittest and rlcompleter when readline isn't available

parent f093d61e
...@@ -75,9 +75,12 @@ class Completer: ...@@ -75,9 +75,12 @@ class Completer:
if not text.strip(): if not text.strip():
if state == 0: if state == 0:
if _readline_available:
readline.insert_text('\t') readline.insert_text('\t')
readline.redisplay() readline.redisplay()
return '' return ''
else:
return '\t'
else: else:
return None return None
...@@ -170,10 +173,11 @@ def get_class_members(klass): ...@@ -170,10 +173,11 @@ def get_class_members(klass):
try: try:
import readline import readline
except ImportError: except ImportError:
pass _readline_available = False
else: else:
readline.set_completer(Completer().complete) readline.set_completer(Completer().complete)
# Release references early at shutdown (the readline module's # Release references early at shutdown (the readline module's
# contents are quasi-immortal, and the completer function holds a # contents are quasi-immortal, and the completer function holds a
# reference to globals). # reference to globals).
atexit.register(lambda: readline.set_completer(None)) atexit.register(lambda: readline.set_completer(None))
_readline_available = True
import unittest import unittest
import unittest.mock
import builtins import builtins
import rlcompleter import rlcompleter
...@@ -77,6 +78,7 @@ class TestRlcompleter(unittest.TestCase): ...@@ -77,6 +78,7 @@ class TestRlcompleter(unittest.TestCase):
self.assertEqual(completer.complete('f.b', 0), 'f.bar') self.assertEqual(completer.complete('f.b', 0), 'f.bar')
self.assertEqual(f.calls, 1) self.assertEqual(f.calls, 1)
@unittest.mock.patch('rlcompleter._readline_available', False)
def test_complete(self): def test_complete(self):
completer = rlcompleter.Completer() completer = rlcompleter.Completer()
self.assertEqual(completer.complete('', 0), '\t') self.assertEqual(completer.complete('', 0), '\t')
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment