diff options
author | Terry Jan Reedy <tjreedy@udel.edu> | 2019-03-24 21:12:28 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-24 21:12:28 (GMT) |
commit | 0fe4513d9a5510ae91c0da7eb0433f79a6d4dda9 (patch) | |
tree | cf882c27dc64daf2d58af7a67a5adc2e5559129c /Lib/idlelib | |
parent | 6661c1720ebd322e2cb6995a243e8dc6e588d931 (diff) | |
download | cpython-0fe4513d9a5510ae91c0da7eb0433f79a6d4dda9.zip cpython-0fe4513d9a5510ae91c0da7eb0433f79a6d4dda9.tar.gz cpython-0fe4513d9a5510ae91c0da7eb0433f79a6d4dda9.tar.bz2 |
bpo-36405: IDLE - Restore __main__ and add tests (#12518)
Fix error in commit 2b75155 noticed by Serhiy Storchaka.
Diffstat (limited to 'Lib/idlelib')
-rw-r--r-- | Lib/idlelib/NEWS.txt | 2 | ||||
-rw-r--r-- | Lib/idlelib/autocomplete.py | 8 | ||||
-rw-r--r-- | Lib/idlelib/calltip.py | 5 | ||||
-rw-r--r-- | Lib/idlelib/idle_test/test_autocomplete.py | 11 |
4 files changed, 17 insertions, 9 deletions
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index d31ca83..dbb3653 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -3,7 +3,7 @@ Released on 2019-10-20? ====================================== -bpo-36405: Use dict unpacking in idlelib and remove unneeded __main__ imports. +bpo-36405: Use dict unpacking in idlelib. bpo-36396: Remove fgBg param of idlelib.config.GetHighlight(). This param was only used twice and changed the return type. diff --git a/Lib/idlelib/autocomplete.py b/Lib/idlelib/autocomplete.py index 6751928..d57e9c9 100644 --- a/Lib/idlelib/autocomplete.py +++ b/Lib/idlelib/autocomplete.py @@ -3,6 +3,7 @@ Either on demand or after a user-selected delay after a key character, pop up a list of candidates. """ +import __main__ import os import string import sys @@ -181,7 +182,8 @@ class AutoComplete: else: if mode == COMPLETE_ATTRIBUTES: if what == "": - namespace = {**__builtins__.__dict__, **globals()} + namespace = {**__main__.__builtins__.__dict__, + **__main__.__dict__} bigl = eval("dir()", namespace) bigl.sort() if "__all__" in bigl: @@ -216,8 +218,8 @@ class AutoComplete: return smalll, bigl def get_entity(self, name): - "Lookup name in a namespace spanning sys.modules and globals()." - return eval(name, {**sys.modules, **globals()}) + "Lookup name in a namespace spanning sys.modules and __main.dict__." + return eval(name, {**sys.modules, **__main__.__dict__}) AutoComplete.reload() diff --git a/Lib/idlelib/calltip.py b/Lib/idlelib/calltip.py index 4b78917..b013a7f 100644 --- a/Lib/idlelib/calltip.py +++ b/Lib/idlelib/calltip.py @@ -4,6 +4,7 @@ Call Tips are floating windows which display function, class, and method parameter and docstring information when you type an opening parenthesis, and which disappear when you type a closing parenthesis. """ +import __main__ import inspect import re import sys @@ -99,10 +100,10 @@ class Calltip: def get_entity(expression): """Return the object corresponding to expression evaluated - in a namespace spanning sys.modules and globals(). + in a namespace spanning sys.modules and __main.dict__. """ if expression: - namespace = {**sys.modules, **globals()} + namespace = {**sys.modules, **__main__.__dict__} try: return eval(expression, namespace) # Only protect user code. except BaseException: diff --git a/Lib/idlelib/idle_test/test_autocomplete.py b/Lib/idlelib/idle_test/test_autocomplete.py index d7ee00a..89a9ed1 100644 --- a/Lib/idlelib/idle_test/test_autocomplete.py +++ b/Lib/idlelib/idle_test/test_autocomplete.py @@ -3,6 +3,7 @@ import unittest from test.support import requires from tkinter import Tk, Text +import __main__ import idlelib.autocomplete as ac import idlelib.autocomplete_w as acw @@ -35,7 +36,7 @@ class AutoCompleteTest(unittest.TestCase): del cls.root def setUp(self): - self.editor.text.delete('1.0', 'end') + self.text.delete('1.0', 'end') self.autocomplete = ac.AutoComplete(self.editor) def test_init(self): @@ -132,12 +133,16 @@ class AutoCompleteTest(unittest.TestCase): # a small list containing non-private variables. # For file completion, a large list containing all files in the path, # and a small list containing files that do not start with '.' - pass + small, large = self.autocomplete.fetch_completions( + '', ac.COMPLETE_ATTRIBUTES) + self.assertLess(len(small), len(large)) + if __main__.__file__ != ac.__file__: + self.assertNotIn('AutoComplete', small) # See issue 36405. def test_get_entity(self): # Test that a name is in the namespace of sys.modules and # __main__.__dict__ - pass + self.assertEqual(self.autocomplete.get_entity('int'), int) if __name__ == '__main__': |