https://github.com/python/cpython/commit/8fbae38b198fb15a6421a6d4613b28ed700c26f2 commit: 8fbae38b198fb15a6421a6d4613b28ed700c26f2 branch: 3.15 author: Miss Islington (bot) <[email protected]> committer: hugovk <[email protected]> date: 2026-08-14T17:44:05+09:00 summary:
[3.15] idlelib tests: Fix refleak testing of test_zzdummy (GH-155393) (#155718) idlelib tests: Fix refleak testing of test_zzdummy (GH-155393) Revert test changes from commit 208195dff4cd19dfd4aeb0eed8a133f2b1a66ec1 by request of IDLE maintainer Terry Reedy. (cherry picked from commit fa90680a1ddabd0dcc2901ea16fd04354d8bfc3c) Co-authored-by: Zachary Ware <[email protected]> files: D Lib/idlelib/idle_test/test_zzdummy_user.py M Lib/idlelib/idle_test/test_zzdummy.py diff --git a/Lib/idlelib/idle_test/test_zzdummy.py b/Lib/idlelib/idle_test/test_zzdummy.py index c8e7dd6941b5899..209d8564da06641 100644 --- a/Lib/idlelib/idle_test/test_zzdummy.py +++ b/Lib/idlelib/idle_test/test_zzdummy.py @@ -38,8 +38,38 @@ def __init__(self, root, text): self.text.undo_block_stop = mock.Mock() -class ZZDummyMixin: - """Shared tests for ZzDummy with default and user configs.""" +class ZZDummyTest(unittest.TestCase): + + @classmethod + def setUpClass(cls): + requires('gui') + root = cls.root = Tk() + root.withdraw() + text = cls.text = Text(cls.root) + cls.editor = DummyEditwin(root, text) + zzdummy.idleConf.userCfg = testcfg + + @classmethod + def tearDownClass(cls): + zzdummy.idleConf.userCfg = usercfg + del cls.editor, cls.text + cls.root.update_idletasks() + for id in cls.root.tk.call('after', 'info'): + cls.root.after_cancel(id) # Need for EditorWindow. + cls.root.destroy() + del cls.root + + def setUp(self): + text = self.text + text.insert('1.0', code_sample) + text.undo_block_start.reset_mock() + text.undo_block_stop.reset_mock() + zz = self.zz = zzdummy.ZzDummy(self.editor) + zzdummy.ZzDummy.ztext = '# ignore #' + + def tearDown(self): + self.text.delete('1.0', 'end') + del self.zz def checklines(self, text, value): # Verify that there are lines being checked. @@ -59,8 +89,7 @@ def test_init(self): def test_reload(self): self.assertEqual(self.zz.ztext, '# ignore #') - zzdummy.idleConf.userCfg['extensions'].SetOption( - 'ZzDummy', 'z-text', 'spam') + testcfg['extensions'].SetOption('ZzDummy', 'z-text', 'spam') zzdummy.ZzDummy.reload() self.assertEqual(self.zz.ztext, 'spam') @@ -119,75 +148,5 @@ def test_roundtrip(self): self.assertEqual(text.get('1.0', 'end-1c'), code_sample) -class ZZDummyTest(ZZDummyMixin, unittest.TestCase): - - @classmethod - def setUpClass(cls): - requires('gui') - root = cls.root = Tk() - root.withdraw() - text = cls.text = Text(cls.root) - cls.editor = DummyEditwin(root, text) - zzdummy.idleConf.userCfg = testcfg - - @classmethod - def tearDownClass(cls): - zzdummy.idleConf.userCfg = usercfg - del cls.editor, cls.text - cls.root.update_idletasks() - for id in cls.root.after_info(): - cls.root.after_cancel(id) # Need for EditorWindow. - cls.root.destroy() - del cls.root - - def setUp(self): - text = self.text - text.insert('1.0', code_sample) - text.undo_block_start.reset_mock() - text.undo_block_stop.reset_mock() - zz = self.zz = zzdummy.ZzDummy(self.editor) - zzdummy.ZzDummy.ztext = '# ignore #' - - def tearDown(self): - self.text.delete('1.0', 'end') - del self.zz - - def test_exists(self): - conf = zzdummy.idleConf - self.assertEqual( - conf.GetSectionList('user', 'extensions'), []) - self.assertEqual( - conf.GetSectionList('default', 'extensions'), - ['AutoComplete', 'CodeContext', 'FormatParagraph', - 'ParenMatch', 'ZzDummy', 'ZzDummy_cfgBindings', - 'ZzDummy_bindings']) - self.assertIn("ZzDummy", conf.GetExtensions(False)) - self.assertNotIn("ZzDummy", conf.GetExtensions()) - self.assertEqual( - conf.GetExtensionKeys("ZzDummy"), {}) - self.assertEqual( - conf.GetExtensionBindings("ZzDummy"), - {'<<z-out>>': ['<Control-Shift-KeyRelease-Delete>']}) - - def test_exists_user(self): - conf = zzdummy.idleConf - conf.userCfg["extensions"].read_dict({ - "ZzDummy": {'enable': 'True'} - }) - self.assertEqual( - conf.GetSectionList('user', 'extensions'), - ["ZzDummy"]) - self.assertIn("ZzDummy", conf.GetExtensions()) - self.assertEqual( - conf.GetExtensionKeys("ZzDummy"), - {'<<z-in>>': ['<Control-Shift-KeyRelease-Insert>']}) - self.assertEqual( - conf.GetExtensionBindings("ZzDummy"), - {'<<z-in>>': ['<Control-Shift-KeyRelease-Insert>'], - '<<z-out>>': ['<Control-Shift-KeyRelease-Delete>']}) - # Restore - conf.userCfg["extensions"].remove_section("ZzDummy") - - if __name__ == '__main__': unittest.main(verbosity=2) diff --git a/Lib/idlelib/idle_test/test_zzdummy_user.py b/Lib/idlelib/idle_test/test_zzdummy_user.py deleted file mode 100644 index a3476bf52bc5882..000000000000000 --- a/Lib/idlelib/idle_test/test_zzdummy_user.py +++ /dev/null @@ -1,108 +0,0 @@ -"Test zzdummy with user config, coverage 100%." - -from idlelib import zzdummy -import unittest -from test.support import requires -from tkinter import Tk, Text -from idlelib import config - -from idlelib.idle_test.test_zzdummy import ( - ZZDummyMixin, DummyEditwin, code_sample, -) - - -real_usercfg = zzdummy.idleConf.userCfg -test_usercfg = { - 'main': config.IdleUserConfParser(''), - 'highlight': config.IdleUserConfParser(''), - 'keys': config.IdleUserConfParser(''), - 'extensions': config.IdleUserConfParser(''), -} -test_usercfg["extensions"].read_dict({ - "ZzDummy": {'enable': 'True', 'enable_shell': 'False', - 'enable_editor': 'True', 'z-text': 'Z'}, - "ZzDummy_cfgBindings": { - 'z-in': '<Control-Shift-KeyRelease-Insert>'}, - "ZzDummy_bindings": { - 'z-out': '<Control-Shift-KeyRelease-Delete>'}, -}) -real_defaultcfg = zzdummy.idleConf.defaultCfg -test_defaultcfg = { - 'main': config.IdleUserConfParser(''), - 'highlight': config.IdleUserConfParser(''), - 'keys': config.IdleUserConfParser(''), - 'extensions': config.IdleUserConfParser(''), -} -test_defaultcfg["extensions"].read_dict({ - "AutoComplete": {'popupwait': '2000'}, - "CodeContext": {'maxlines': '15'}, - "FormatParagraph": {'max-width': '72'}, - "ParenMatch": {'style': 'expression', - 'flash-delay': '500', 'bell': 'True'}, -}) -test_defaultcfg["main"].read_dict({ - "Theme": {"default": 1, "name": "IDLE Classic", "name2": ""}, - "Keys": {"default": 1, "name": "IDLE Classic", "name2": ""}, -}) -for key in ("keys",): - real_default = real_defaultcfg[key] - value = {name: dict(real_default[name]) for name in real_default} - test_defaultcfg[key].read_dict(value) - - -class ZZDummyTest(ZZDummyMixin, unittest.TestCase): - - @classmethod - def setUpClass(cls): - requires('gui') - root = cls.root = Tk() - root.withdraw() - text = cls.text = Text(cls.root) - cls.editor = DummyEditwin(root, text) - zzdummy.idleConf.userCfg = test_usercfg - zzdummy.idleConf.defaultCfg = test_defaultcfg - - @classmethod - def tearDownClass(cls): - zzdummy.idleConf.defaultCfg = real_defaultcfg - zzdummy.idleConf.userCfg = real_usercfg - del cls.editor, cls.text - cls.root.update_idletasks() - for id in cls.root.after_info(): - cls.root.after_cancel(id) # Need for EditorWindow. - cls.root.destroy() - del cls.root - - def setUp(self): - text = self.text - text.insert('1.0', code_sample) - text.undo_block_start.reset_mock() - text.undo_block_stop.reset_mock() - zz = self.zz = zzdummy.ZzDummy(self.editor) - zzdummy.ZzDummy.ztext = '# ignore #' - - def tearDown(self): - self.text.delete('1.0', 'end') - del self.zz - - def test_exists(self): - self.assertEqual( - zzdummy.idleConf.GetSectionList('user', 'extensions'), - ['ZzDummy', 'ZzDummy_cfgBindings', 'ZzDummy_bindings']) - self.assertEqual( - zzdummy.idleConf.GetSectionList('default', 'extensions'), - ['AutoComplete', 'CodeContext', 'FormatParagraph', - 'ParenMatch']) - self.assertIn("ZzDummy", - zzdummy.idleConf.GetExtensions()) - self.assertEqual( - zzdummy.idleConf.GetExtensionKeys("ZzDummy"), - {'<<z-in>>': ['<Control-Shift-KeyRelease-Insert>']}) - self.assertEqual( - zzdummy.idleConf.GetExtensionBindings("ZzDummy"), - {'<<z-in>>': ['<Control-Shift-KeyRelease-Insert>'], - '<<z-out>>': ['<Control-Shift-KeyRelease-Delete>']}) - - -if __name__ == '__main__': - unittest.main(verbosity=2) _______________________________________________ Python-checkins mailing list -- [email protected] To unsubscribe send an email to [email protected] https://mail.python.org/mailman3//lists/python-checkins.python.org Member address: [email protected]
