changeset: 100158:980ea968444c branch: 3.5 parent: 100155:64417e7a1760 user: Yury Selivanov date: Thu Feb 04 14:00:26 2016 -0500 files: Lib/rlcompleter.py Lib/test/test_rlcompleter.py description: Issue #25660: Fix a unittest and rlcompleter when readline isn't available diff -r 64417e7a1760 -r 980ea968444c Lib/rlcompleter.py --- a/Lib/rlcompleter.py Thu Feb 04 01:23:05 2016 -0500 +++ b/Lib/rlcompleter.py Thu Feb 04 14:00:26 2016 -0500 @@ -75,9 +75,12 @@ 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 @@ 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 diff -r 64417e7a1760 -r 980ea968444c Lib/test/test_rlcompleter.py --- a/Lib/test/test_rlcompleter.py Thu Feb 04 01:23:05 2016 -0500 +++ b/Lib/test/test_rlcompleter.py Thu Feb 04 14:00:26 2016 -0500 @@ -1,4 +1,5 @@ import unittest +import unittest.mock import builtins import rlcompleter @@ -77,6 +78,7 @@ 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')