From 6047b5537226efdcd2e3b460957fb44388ec2e99 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Fri, 3 Jun 2016 23:53:56 -0400 Subject: [PATCH] Issue #27196: Stop 'application destroyed' warnings when running IDLE tests. The update_idletasks solution was provided by Serhiy Storchaka. --- Lib/idlelib/idle_test/README.txt | 6 ++++++ Lib/idlelib/idle_test/test_configdialog.py | 9 +++++---- Lib/idlelib/idle_test/test_parenmatch.py | 9 ++++++--- Lib/idlelib/idle_test/test_textview.py | 3 ++- Lib/idlelib/idle_test/test_widgetredir.py | 5 +++-- 5 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Lib/idlelib/idle_test/README.txt b/Lib/idlelib/idle_test/README.txt index 39a19d0bd0c..01b31f696b7 100644 --- a/Lib/idlelib/idle_test/README.txt +++ b/Lib/idlelib/idle_test/README.txt @@ -71,9 +71,15 @@ deleted BEFORE root is destroyed. See https://bugs.python.org/issue20567. @classmethod def tearDownClass(cls): del cls.text + cls.root.update_idletasks() cls.root.destroy() del cls.root +The update_idletasks call is sometimes needed to prevent the following warning +either when running a test alone or as part of the test suite (#27196). + can't invoke "event" command: application has been destroyed + ... + "ttk::ThemeChanged" Requires('gui') causes the test(s) it guards to be skipped if any of these conditions are met: diff --git a/Lib/idlelib/idle_test/test_configdialog.py b/Lib/idlelib/idle_test/test_configdialog.py index fab860b4390..4b413e22ee0 100644 --- a/Lib/idlelib/idle_test/test_configdialog.py +++ b/Lib/idlelib/idle_test/test_configdialog.py @@ -1,7 +1,7 @@ -'''Unittests for idlelib/configHandler.py - -Coverage: 46% just by creating dialog. The other half is change code. +'''Test idlelib.configHandler. +Coverage: 46% just by creating dialog. +The other half is code for working with user customizations. ''' import unittest from test.support import requires @@ -20,11 +20,12 @@ class ConfigDialogTest(unittest.TestCase): @classmethod def tearDownClass(cls): + cls.root.update_idletasks() cls.root.destroy() del cls.root def test_dialog(self): - d=ConfigDialog(self.root, 'Test', _utest=True) + d = ConfigDialog(self.root, 'Test', _utest=True) d.remove_var_callbacks() d.destroy() diff --git a/Lib/idlelib/idle_test/test_parenmatch.py b/Lib/idlelib/idle_test/test_parenmatch.py index e1539526184..95cc22cf68c 100644 --- a/Lib/idlelib/idle_test/test_parenmatch.py +++ b/Lib/idlelib/idle_test/test_parenmatch.py @@ -1,6 +1,8 @@ -"""Test idlelib.ParenMatch.""" -# This must currently be a gui test because ParenMatch methods use -# several text methods not defined on idlelib.idle_test.mock_tk.Text. +'''Test idlelib.ParenMatch. + +This must currently be a gui test because ParenMatch methods use +several text methods not defined on idlelib.idle_test.mock_tk.Text. +''' from test.support import requires requires('gui') @@ -29,6 +31,7 @@ class ParenMatchTest(unittest.TestCase): @classmethod def tearDownClass(cls): del cls.text, cls.editwin + cls.root.update_idletasks() cls.root.destroy() del cls.root diff --git a/Lib/idlelib/idle_test/test_textview.py b/Lib/idlelib/idle_test/test_textview.py index 1a75e95769e..02d1472240e 100644 --- a/Lib/idlelib/idle_test/test_textview.py +++ b/Lib/idlelib/idle_test/test_textview.py @@ -1,4 +1,4 @@ -'''Test the functions and main class method of textView.py. +'''Test idlelib.textView. Since all methods and functions create (or destroy) a TextViewer, which is a widget containing multiple widgets, all tests must be gui tests. @@ -24,6 +24,7 @@ def setUpModule(): def tearDownModule(): global root, TV del TV + root.update_idletasks() root.destroy() # pyflakes falsely sees root as undefined del root diff --git a/Lib/idlelib/idle_test/test_widgetredir.py b/Lib/idlelib/idle_test/test_widgetredir.py index eeec3ea34b1..c68dfcc4124 100644 --- a/Lib/idlelib/idle_test/test_widgetredir.py +++ b/Lib/idlelib/idle_test/test_widgetredir.py @@ -1,7 +1,7 @@ -"""Unittest for idlelib.WidgetRedirector +'''Test idlelib.WidgetRedirector. 100% coverage -""" +''' from test.support import requires import unittest from idlelib.idle_test.mock_idle import Func @@ -49,6 +49,7 @@ class WidgetRedirectorTest(unittest.TestCase): @classmethod def tearDownClass(cls): del cls.text + cls.root.update_idletasks() cls.root.destroy() del cls.root