[Python-checkins] bpo-30853: IDLE - touch-up configdialog.VarTrace and tests. (#2936)

Terry Jan Reedy webhook-mailer at python.org
Fri Jul 28 17:00:05 EDT 2017


https://github.com/python/cpython/commit/5d0f30aae5fccc99690923fc5c7cb58de8ad7eec
commit: 5d0f30aae5fccc99690923fc5c7cb58de8ad7eec
branch: master
author: Terry Jan Reedy <tjreedy at udel.edu>
committer: GitHub <noreply at github.com>
date: 2017-07-28T17:00:02-04:00
summary:

bpo-30853: IDLE - touch-up configdialog.VarTrace and tests. (#2936)

Add clear method for tests.  Adjust tests to use global instance.
Remove unneeded ConfigDialog method.

files:
M Lib/idlelib/configdialog.py
M Lib/idlelib/idle_test/test_configdialog.py

diff --git a/Lib/idlelib/configdialog.py b/Lib/idlelib/configdialog.py
index 92155e3726c..87e0d685b77 100644
--- a/Lib/idlelib/configdialog.py
+++ b/Lib/idlelib/configdialog.py
@@ -99,7 +99,6 @@ def create_widgets(self):
             create_page_extensions
             create_action_buttons
             load_configs: Load pages except for extensions.
-            remove_var_callbacks
             activate_config_changes: Tell editors to reload.
         """
         self.tab_pages = TabbedPageSet(self,
@@ -133,10 +132,6 @@ def load_configs(self):
         self.load_general_cfg()
         # note: extension page handled separately
 
-    def remove_var_callbacks(self):
-        "Remove callbacks to prevent memory leaks."
-        tracers.detach()
-
     def create_action_buttons(self):
         """Return frame of action buttons for dialog.
 
@@ -1846,6 +1841,11 @@ def __init__(self):
         self.untraced = []
         self.traced = []
 
+    def clear(self):
+        "Clear lists (for tests)."
+        self.untraced.clear()
+        self.traced.clear()
+
     def add(self, var, callback):
         """Add (var, callback) tuple to untraced list.
 
diff --git a/Lib/idlelib/idle_test/test_configdialog.py b/Lib/idlelib/idle_test/test_configdialog.py
index 7296075fbec..cf6c3b31ed5 100644
--- a/Lib/idlelib/idle_test/test_configdialog.py
+++ b/Lib/idlelib/idle_test/test_configdialog.py
@@ -11,7 +11,7 @@
 from idlelib.idle_test.mock_idle import Func
 from tkinter import Tk, IntVar, BooleanVar, DISABLED, NORMAL
 from idlelib import config
-from idlelib.configdialog import ConfigDialog, idleConf, changes, VarTrace
+from idlelib.configdialog import idleConf, changes, tracers
 
 # Tests should not depend on fortuitous user configurations.
 # They must not affect actual user .cfg files.
@@ -35,12 +35,12 @@ def setUpModule():
     idleConf.userCfg = testcfg
     root = Tk()
     # root.withdraw()    # Comment out, see issue 30870
-    dialog = ConfigDialog(root, 'Test', _utest=True)
+    dialog = configdialog.ConfigDialog(root, 'Test', _utest=True)
 
 def tearDownModule():
     global root, dialog
     idleConf.userCfg = usercfg
-    dialog.remove_var_callbacks()
+    tracers.detach()
     del dialog
     root.update_idletasks()
     root.destroy()
@@ -423,14 +423,14 @@ def test_update_help_changes(self):
         d.update_help_changes = Func()
 
 
-class TestVarTrace(unittest.TestCase):
+class VarTraceTest(unittest.TestCase):
 
     def setUp(self):
         changes.clear()
+        tracers.clear()
         self.v1 = IntVar(root)
         self.v2 = BooleanVar(root)
         self.called = 0
-        self.tracers = VarTrace()
 
     def tearDown(self):
         del self.v1, self.v2
@@ -442,11 +442,19 @@ def var_changed_boolean(self, *params):
         pass
 
     def test_init(self):
-        self.assertEqual(self.tracers.untraced, [])
-        self.assertEqual(self.tracers.traced, [])
+        tracers.__init__()
+        self.assertEqual(tracers.untraced, [])
+        self.assertEqual(tracers.traced, [])
+
+    def test_clear(self):
+        tracers.untraced.append(0)
+        tracers.traced.append(1)
+        tracers.clear()
+        self.assertEqual(tracers.untraced, [])
+        self.assertEqual(tracers.traced, [])
 
     def test_add(self):
-        tr = self.tracers
+        tr = tracers
         func = Func()
         cb = tr.make_callback = mock.Mock(return_value=func)
 
@@ -469,8 +477,7 @@ def test_add(self):
         del tr.make_callback
 
     def test_make_callback(self):
-        tr = self.tracers
-        cb = tr.make_callback(self.v1, ('main', 'section', 'option'))
+        cb = tracers.make_callback(self.v1, ('main', 'section', 'option'))
         self.assertTrue(callable(cb))
         self.v1.set(42)
         # Not attached, so set didn't invoke the callback.
@@ -481,7 +488,7 @@ def test_make_callback(self):
         self.assertEqual(changes['main']['section']['option'], '42')
 
     def test_attach_detach(self):
-        tr = self.tracers
+        tr = tracers
         v1 = tr.add(self.v1, self.var_changed_increment)
         v2 = tr.add(self.v2, self.var_changed_boolean)
         expected = [(v1, self.var_changed_increment),



More information about the Python-checkins mailing list