Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 46f7785

Browse files
committed
Issue #25660: Fix a unittest and rlcompleter when readline isn't available
1 parent a7eae40 commit 46f7785

2 files changed

Lines changed: 10 additions & 4 deletions

File tree

Lib/rlcompleter.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,12 @@ def complete(self, text, state):
7575

7676
if not text.strip():
7777
if state == 0:
78-
readline.insert_text('\t')
79-
readline.redisplay()
80-
return ''
78+
if _readline_available:
79+
readline.insert_text('\t')
80+
readline.redisplay()
81+
return ''
82+
else:
83+
return '\t'
8184
else:
8285
return None
8386

@@ -170,10 +173,11 @@ def get_class_members(klass):
170173
try:
171174
import readline
172175
except ImportError:
173-
pass
176+
_readline_available = False
174177
else:
175178
readline.set_completer(Completer().complete)
176179
# Release references early at shutdown (the readline module's
177180
# contents are quasi-immortal, and the completer function holds a
178181
# reference to globals).
179182
atexit.register(lambda: readline.set_completer(None))
183+
_readline_available = True

Lib/test/test_rlcompleter.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import unittest
2+
import unittest.mock
23
import builtins
34
import rlcompleter
45

@@ -77,6 +78,7 @@ def bar(self):
7778
self.assertEqual(completer.complete('f.b', 0), 'f.bar')
7879
self.assertEqual(f.calls, 1)
7980

81+
@unittest.mock.patch('rlcompleter._readline_available', False)
8082
def test_complete(self):
8183
completer = rlcompleter.Completer()
8284
self.assertEqual(completer.complete('', 0), '\t')

0 commit comments

Comments
 (0)