From 46f7785e28c17f33252a95a57dd3827811291394 Mon Sep 17 00:00:00 2001 From: Yury Selivanov Date: Thu, 4 Feb 2016 14:00:26 -0500 Subject: Issue #25660: Fix a unittest and rlcompleter when readline isn't available --- Lib/rlcompleter.py | 12 ++++++++---- Lib/test/test_rlcompleter.py | 2 ++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/Lib/rlcompleter.py b/Lib/rlcompleter.py index 26f5920..401a626 100644 --- a/Lib/rlcompleter.py +++ b/Lib/rlcompleter.py @@ -75,9 +75,12 @@ class Completer: 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 diff --git a/Lib/test/test_rlcompleter.py b/Lib/test/test_rlcompleter.py index 2d5d9c1..853e773 100644 --- a/Lib/test/test_rlcompleter.py +++ b/Lib/test/test_rlcompleter.py @@ -1,4 +1,5 @@ import unittest +import unittest.mock import builtins import rlcompleter @@ -77,6 +78,7 @@ class TestRlcompleter(unittest.TestCase): 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') -- cgit v0.12