On 7/30/2013 1:31 PM, R. David Murray wrote:
On Sun, 28 Jul 2013 01:09:43 +0200, terry.reedy <python-check...@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
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
http://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to