[Python-Dev] cpython (2.7): Issue #18441: Make test.support.requires('gui') skip when it should.
Terry Reedy
tjreedy at udel.edu
Wed Jul 31 02:52:27 CEST 2013
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.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
More information about the Python-Dev
mailing list