summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTerry Jan Reedy <tjreedy@udel.edu>2019-03-24 17:12:28 -0400
committerGitHub <noreply@github.com>2019-03-24 17:12:28 -0400
commit0fe4513d9a5510ae91c0da7eb0433f79a6d4dda9 (patch)
treecf882c27dc64daf2d58af7a67a5adc2e5559129c
parent6661c1720ebd322e2cb6995a243e8dc6e588d931 (diff)
downloadcpython-git-0fe4513d9a5510ae91c0da7eb0433f79a6d4dda9.tar.gz
bpo-36405: IDLE - Restore __main__ and add tests (#12518)
Fix error in commit 2b75155 noticed by Serhiy Storchaka.
-rw-r--r--Lib/idlelib/NEWS.txt2
-rw-r--r--Lib/idlelib/autocomplete.py8
-rw-r--r--Lib/idlelib/calltip.py5
-rw-r--r--Lib/idlelib/idle_test/test_autocomplete.py11
-rw-r--r--Misc/NEWS.d/next/IDLE/2019-03-23-01-45-56.bpo-36405.m7Wv1F.rst2
5 files changed, 18 insertions, 10 deletions
diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt
index d31ca83b0a..dbb3653bb4 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 6751928f04..d57e9c9000 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 4b78917d7d..b013a7f6ec 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 d7ee00af94..89a9ed11df 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__':
diff --git a/Misc/NEWS.d/next/IDLE/2019-03-23-01-45-56.bpo-36405.m7Wv1F.rst b/Misc/NEWS.d/next/IDLE/2019-03-23-01-45-56.bpo-36405.m7Wv1F.rst
index 619ab6af80..bef438d5a5 100644
--- a/Misc/NEWS.d/next/IDLE/2019-03-23-01-45-56.bpo-36405.m7Wv1F.rst
+++ b/Misc/NEWS.d/next/IDLE/2019-03-23-01-45-56.bpo-36405.m7Wv1F.rst
@@ -1 +1 @@
-Use dict unpacking in idlelib and remove unneeded __main__ imports.
+Use dict unpacking in idlelib.