[3.14] idlelib tests: Fix refleak testing of test_zzdummy (GH-155720)

zware <[email protected]>
Newsgroups gmane.comp.python.cvs
Message-ID <[email protected]>
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]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.