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

This commit is contained in:
Yury Selivanov 2016-02-04 14:00:26 -05:00
parent a7eae4016e
commit 46f7785e28
2 changed files with 10 additions and 4 deletions

View file

@ -75,9 +75,12 @@ def complete(self, text, state):
if not text.strip():
if state == 0:
readline.insert_text('\t')
readline.redisplay()
return ''
if _readline_available:
readline.insert_text('\t')
readline.redisplay()
return ''
else:
return '\t'
else:
return None
@ -170,10 +173,11 @@ def get_class_members(klass):
try:
import readline
except ImportError:
pass
_readline_available = False
else:
readline.set_completer(Completer().complete)
# Release references early at shutdown (the readline module's
# contents are quasi-immortal, and the completer function holds a
# reference to globals).
atexit.register(lambda: readline.set_completer(None))
_readline_available = True

View file

@ -1,4 +1,5 @@
import unittest
import unittest.mock
import builtins
import rlcompleter
@ -77,6 +78,7 @@ def bar(self):
self.assertEqual(completer.complete('f.b', 0), 'f.bar')
self.assertEqual(f.calls, 1)
@unittest.mock.patch('rlcompleter._readline_available', False)
def test_complete(self):
completer = rlcompleter.Completer()
self.assertEqual(completer.complete('', 0), '\t')