Re: [Python-Dev] [Python-checkins] cpython (2.7): Issue #18441: Make test.support.requires('gui') skip when it should.

On Sun, 28 Jul 2013 01:09:43 +0200, terry.reedy <python-checkins@python.org> wrote:
http://hg.python.org/cpython/rev/dd9941f5fcda changeset: 84870:dd9941f5fcda branch: 2.7 parent: 84865:c0788ee86a65 user: Terry Jan Reedy <tjreedy@udel.edu> date: Sun Jul 21 20:13:24 2013 -0400 summary: Issue #18441: Make test.support.requires('gui') skip when it should. (Consolidating this check and various checks in tkinter files and moving them to test.support and test.regrtest will be another issue.)
files: Lib/idlelib/idle_test/test_text.py | 5 +--- Lib/test/test_idle.py | 20 ++++++++++++++--- 2 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/Lib/idlelib/idle_test/test_text.py b/Lib/idlelib/idle_test/test_text.py --- a/Lib/idlelib/idle_test/test_text.py +++ b/Lib/idlelib/idle_test/test_text.py @@ -216,10 +216,7 @@ requires('gui') from Tkinter import Tk, Text cls.Text = Text - try: - cls.root = Tk() - except TclError as msg: - raise unittest.SkipTest('TclError: %s' % msg) + cls.root = Tk()
@classmethod def tearDownClass(cls): diff --git a/Lib/test/test_idle.py b/Lib/test/test_idle.py --- a/Lib/test/test_idle.py +++ b/Lib/test/test_idle.py @@ -1,9 +1,21 @@ -# Skip test if _tkinter or _thread wasn't built or idlelib was deleted. -from test.test_support import import_module -import_module('Tkinter') -import_module('threading') # imported by PyShell, imports _thread +# Skip test if _thread or _tkinter wasn't built or idlelib was deleted. +from test.test_support import import_module, use_resources +import_module('threading') # imported by idlelib.PyShell, imports _thread +tk = import_module('Tkinter') idletest = import_module('idlelib.idle_test')
+# If buildbot improperly sets gui resource (#18365, #18441), remove it +# so requires('gui') tests are skipped while non-gui tests still run. +if use_resources and 'gui' in use_resources: + try: + root = tk.Tk() + root.destroy() + except TclError: + while True: + use_resources.delete('gui') + if 'gui' not in use_resources: + break
I believe that this logic is incorrect. If regrtest is run with "-u gui", given this code the skip message will be "requires gui resource"...but the caller specified the gui resource, which will make the skip message completely confusing. Instead, if it is true that 'gui' always means 'tk must work', then the _is_gui_available function should do the Tk() check. Currently as far as I can see it is indeed the case that requires('gui') always means tk must work. So, I believe that the correct fix is to move check_tk_availability to test.support, and call it from _is_gui_available. If we ever add another gui toolkit, we can deal with moving the tk check out into a separate 'tk' resource at that time.
+ # Without test_main present, regrtest.runtest_inner (line1219) calls # unittest.TestLoader().loadTestsFromModule(this_module) which calls # load_tests() if it finds it. (Unittest.main does the same.)
-- Repository URL: http://hg.python.org/cpython _______________________________________________ Python-checkins mailing list Python-checkins@python.org http://mail.python.org/mailman/listinfo/python-checkins

On 7/30/2013 1:31 PM, R. David Murray wrote:
On Sun, 28 Jul 2013 01:09:43 +0200, terry.reedy <python-checkins@python.org> wrote:
Issue #18441: Make test.support.requires('gui') skip when it should. (Consolidating this check and various checks in tkinter files and moving them to test.support and test.regrtest will be another issue.)
+# Skip test if _thread or _tkinter wasn't built or idlelib was deleted. +from test.test_support import import_module, use_resources +import_module('threading') # imported by idlelib.PyShell, imports _thread +tk = import_module('Tkinter') idletest = import_module('idlelib.idle_test')
+# If buildbot improperly sets gui resource (#18365, #18441), remove it +# so requires('gui') tests are skipped while non-gui tests still run. +if use_resources and 'gui' in use_resources: + try: + root = tk.Tk() + root.destroy() + except TclError: + while True: + use_resources.delete('gui') + if 'gui' not in use_resources: + break
I believe that this logic is incorrect.
It works for the intended purpose.
If regrtest is run with "-u gui", given this code the skip message will be "requires gui resource" but the caller specified the gui resource, which will make the skip message completely confusing.
The message is accurate; string 'gui' does not create or enable the required physical graphics subsystem. Anyway, the message is not in any of the current buildbot reports I looked at. This patch has no effect on normal machines with graphics and nor on most of the buildbots (at least the stable one). On the 3 stable buildbots it is written for, the message will only appear if test_idle fails (in one of the text tests that do run) and is rerun or displayed in verbose mode. I doubt that such a rare occurrence will seriously confuse any of the few developers who will read the verbose idle_test output.
Instead, if it is true that 'gui' always means 'tk must work', then the _is_gui_available function should do the Tk() check. Currently as far as I can see it is indeed the case that requires('gui') always means tk must work. So, I believe that the correct fix is to move check_tk_availability to test.support, and call it from _is_gui_available.
Ned and I agreed in the issue discussion that gui checks (also in tkinter files) should be consolidated into test.support. See http://bugs.python.org/issue18604 The check in this patch will be modified or simply removed once that is done. But I need it here now to continue pushing new idle tests. A consolidated gui check could report to the user something like "'gui' is being ignored because graphics are not usable".
If we ever add another gui toolkit, we can deal with moving the tk check out into a separate 'tk' resource at that time.
The above check is intended mostly as a gui check, not a tk check, because it is only performed after successfully importing tkinter, which imports _tkinter, which initializes tcl/tk. -- Terry Jan Reedy

On Tue, 30 Jul 2013 20:52:27 -0400, Terry Reedy <tjreedy@udel.edu> wrote:
On 7/30/2013 1:31 PM, R. David Murray wrote:
On Sun, 28 Jul 2013 01:09:43 +0200, terry.reedy <python-checkins@python.org> wrote: I believe that this logic is incorrect.
It works for the intended purpose.
If regrtest is run with "-u gui", given this code the skip message will be "requires gui resource" but the caller specified the gui resource, which will make the skip message completely confusing.
The message is accurate; string 'gui' does not create or enable the required physical graphics subsystem. Anyway, the message is not in any of the current buildbot reports I looked at. This patch has no effect on normal machines with graphics and nor on most of the buildbots (at least the stable one). On the 3 stable buildbots it is written for, the message will only appear if test_idle fails (in one of the text tests that do run) and is rerun or displayed in verbose mode. I doubt that such a rare occurrence will seriously confuse any of the few developers who will read the verbose idle_test output.
OK, I see what you are saying, but I really do think the skip message should differentiate between the flag not being specified and the physical resource not existing.
Instead, if it is true that 'gui' always means 'tk must work', then the _is_gui_available function should do the Tk() check. Currently as far as I can see it is indeed the case that requires('gui') always means tk must work. So, I believe that the correct fix is to move check_tk_availability to test.support, and call it from _is_gui_available.
Ned and I agreed in the issue discussion that gui checks (also in tkinter files) should be consolidated into test.support. See http://bugs.python.org/issue18604 The check in this patch will be modified or simply removed once that is done. But I need it here now to continue pushing new idle tests.
A consolidated gui check could report to the user something like "'gui' is being ignored because graphics are not usable".
As long as this is the end result, I'm fine with it. --David
participants (2)
-
R. David Murray
-
Terry Reedy