[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