Skip to content

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

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jul 28, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions Lib/idlelib/configdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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.

Expand Down Expand Up @@ -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.

Expand Down
29 changes: 18 additions & 11 deletions Lib/idlelib/idle_test/test_configdialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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()
Expand Down Expand Up @@ -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
Expand All @@ -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)

Expand All @@ -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.
Expand All @@ -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),
Expand Down