https://github.com/python/cpython/commit/8ad95575d66c3edac36b5521fd243565abdafae4
commit: 8ad95575d66c3edac36b5521fd243565abdafae4
branch: 3.14
author: Zachary Ware <[email protected]>
committer: zware <[email protected]>
date: 2026-08-13T15:31:47Z
summary:
[3.14] idlelib tests: Fix refleak testing of test_zzdummy (GH-155720)
Revert test changes from commit 208195dff4cd19dfd4aeb0eed8a133f2b1a66ec1 by
request of IDLE maintainer Terry Reedy.
(cherry picked from commit fa90680a1ddabd0dcc2901ea16fd04354d8bfc3c)
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 14c343cf9b30872..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.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 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 1d3f2ac3096fb0e..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.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 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]