bpo-36405: IDLE - Restore __main__ and add tests (#12518)

Fix error in commit 2b75155 noticed by Serhiy Storchaka.
This commit is contained in:
Terry Jan Reedy 2019-03-24 17:12:28 -04:00 committed by GitHub
parent 6661c1720e
commit 0fe4513d9a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 18 additions and 10 deletions

View file

@ -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(). bpo-36396: Remove fgBg param of idlelib.config.GetHighlight().
This param was only used twice and changed the return type. This param was only used twice and changed the return type.

View file

@ -3,6 +3,7 @@
Either on demand or after a user-selected delay after a key character, Either on demand or after a user-selected delay after a key character,
pop up a list of candidates. pop up a list of candidates.
""" """
import __main__
import os import os
import string import string
import sys import sys
@ -181,7 +182,8 @@ class AutoComplete:
else: else:
if mode == COMPLETE_ATTRIBUTES: if mode == COMPLETE_ATTRIBUTES:
if what == "": if what == "":
namespace = {**__builtins__.__dict__, **globals()} namespace = {**__main__.__builtins__.__dict__,
**__main__.__dict__}
bigl = eval("dir()", namespace) bigl = eval("dir()", namespace)
bigl.sort() bigl.sort()
if "__all__" in bigl: if "__all__" in bigl:
@ -216,8 +218,8 @@ class AutoComplete:
return smalll, bigl return smalll, bigl
def get_entity(self, name): def get_entity(self, name):
"Lookup name in a namespace spanning sys.modules and globals()." "Lookup name in a namespace spanning sys.modules and __main.dict__."
return eval(name, {**sys.modules, **globals()}) return eval(name, {**sys.modules, **__main__.__dict__})
AutoComplete.reload() AutoComplete.reload()

View file

@ -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 parameter and docstring information when you type an opening parenthesis, and
which disappear when you type a closing parenthesis. which disappear when you type a closing parenthesis.
""" """
import __main__
import inspect import inspect
import re import re
import sys import sys
@ -99,10 +100,10 @@ class Calltip:
def get_entity(expression): def get_entity(expression):
"""Return the object corresponding to expression evaluated """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: if expression:
namespace = {**sys.modules, **globals()} namespace = {**sys.modules, **__main__.__dict__}
try: try:
return eval(expression, namespace) # Only protect user code. return eval(expression, namespace) # Only protect user code.
except BaseException: except BaseException:

View file

@ -3,6 +3,7 @@
import unittest import unittest
from test.support import requires from test.support import requires
from tkinter import Tk, Text from tkinter import Tk, Text
import __main__
import idlelib.autocomplete as ac import idlelib.autocomplete as ac
import idlelib.autocomplete_w as acw import idlelib.autocomplete_w as acw
@ -35,7 +36,7 @@ class AutoCompleteTest(unittest.TestCase):
del cls.root del cls.root
def setUp(self): def setUp(self):
self.editor.text.delete('1.0', 'end') self.text.delete('1.0', 'end')
self.autocomplete = ac.AutoComplete(self.editor) self.autocomplete = ac.AutoComplete(self.editor)
def test_init(self): def test_init(self):
@ -132,12 +133,16 @@ class AutoCompleteTest(unittest.TestCase):
# a small list containing non-private variables. # a small list containing non-private variables.
# For file completion, a large list containing all files in the path, # For file completion, a large list containing all files in the path,
# and a small list containing files that do not start with '.' # 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): def test_get_entity(self):
# Test that a name is in the namespace of sys.modules and # Test that a name is in the namespace of sys.modules and
# __main__.__dict__ # __main__.__dict__
pass self.assertEqual(self.autocomplete.get_entity('int'), int)
if __name__ == '__main__': if __name__ == '__main__':

View file

@ -1 +1 @@
Use dict unpacking in idlelib and remove unneeded __main__ imports. Use dict unpacking in idlelib.