]> granicus.if.org Git - python/commitdiff
bpo-36405: IDLE - Restore __main__ and add tests (#12518)
authorTerry Jan Reedy <tjreedy@udel.edu>
Sun, 24 Mar 2019 21:12:28 +0000 (17:12 -0400)
committerGitHub <noreply@github.com>
Sun, 24 Mar 2019 21:12:28 +0000 (17:12 -0400)
Fix error in commit 2b75155 noticed by Serhiy Storchaka.

Lib/idlelib/NEWS.txt
Lib/idlelib/autocomplete.py
Lib/idlelib/calltip.py
Lib/idlelib/idle_test/test_autocomplete.py
Misc/NEWS.d/next/IDLE/2019-03-23-01-45-56.bpo-36405.m7Wv1F.rst

index d31ca83b0aac5452c72f0f3e8442cb55b301bdab..dbb3653bb4f4264deccdd6053c50483f93f21410 100644 (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().
 This param was only used twice and changed the return type.
index 6751928f045024ca8966ffd7b3bfffbfd3490b1c..d57e9c9000fad3cad7f8bffa1f7de7d77db14901 100644 (file)
@@ -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()
index 4b78917d7d98c11746e1abbe66183834f0ef0cf4..b013a7f6ec0fc901d645b1a49953439ef4e27b35 100644 (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
 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:
index d7ee00af94b4daa82b79f65735851386ff62c938..89a9ed11df40c14c91208f3b36b98b1e36cf3b51 100644 (file)
@@ -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__':
index 619ab6af80c94baa3f157691e32ea1825cb726fc..bef438d5a5a7e41edce893efbbe5352bd28563c2 100644 (file)
@@ -1 +1 @@
-Use dict unpacking in idlelib and remove unneeded __main__ imports.
+Use dict unpacking in idlelib.