[Python-Dev] cpython (2.7): Issue #18441: Make test.support.requires('gui') skip when it should. (original) (raw)
Terry Reedy tjreedy at udel.edu
Wed Jul 31 02:52:27 CEST 2013
- Previous message: [Python-Dev] [Python-checkins] cpython (2.7): Issue #18441: Make test.support.requires('gui') skip when it should.
- Next message: [Python-Dev] cpython (2.7): Issue #18441: Make test.support.requires('gui') skip when it should.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 7/30/2013 1:31 PM, R. David Murray wrote:
On Sun, 28 Jul 2013 01:09:43 +0200, terry.reedy <python-checkins at 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.testsupport import importmodule, useresources +importmodule('threading') # imported by idlelib.PyShell, imports thread +tk = importmodule('Tkinter') idletest = importmodule('idlelib.idletest')
+# If buildbot improperly sets gui resource (#18365, #18441), remove it +# so requires('gui') tests are skipped while non-gui tests still run. +if useresources and 'gui' in useresources: + try: + root = tk.Tk() + root.destroy() + except TclError: + while True: + useresources.delete('gui') + if 'gui' not in useresources: + 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 isguiavailable 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 checktkavailability to test.support, and call it from isguiavailable.
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
- Previous message: [Python-Dev] [Python-checkins] cpython (2.7): Issue #18441: Make test.support.requires('gui') skip when it should.
- Next message: [Python-Dev] cpython (2.7): Issue #18441: Make test.support.requires('gui') skip when it should.
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]