@@ -233,6 +233,36 @@ def forget(modname):
233233 unlink (imp .cache_from_source (source , debug_override = True ))
234234 unlink (imp .cache_from_source (source , debug_override = False ))
235235
236+ # On some platforms, should not run gui test even if it is allowed
237+ # in `use_resources'.
238+ if sys .platform .startswith ('win' ):
239+ import ctypes
240+ import ctypes .wintypes
241+ def _is_gui_available ():
242+ UOI_FLAGS = 1
243+ WSF_VISIBLE = 0x0001
244+ class USEROBJECTFLAGS (ctypes .Structure ):
245+ _fields_ = [("fInherit" , ctypes .wintypes .BOOL ),
246+ ("fReserved" , ctypes .wintypes .BOOL ),
247+ ("dwFlags" , ctypes .wintypes .DWORD )]
248+ dll = ctypes .windll .user32
249+ h = dll .GetProcessWindowStation ()
250+ if not h :
251+ raise ctypes .WinError ()
252+ uof = USEROBJECTFLAGS ()
253+ needed = ctypes .wintypes .DWORD ()
254+ res = dll .GetUserObjectInformationW (h ,
255+ UOI_FLAGS ,
256+ ctypes .byref (uof ),
257+ ctypes .sizeof (uof ),
258+ ctypes .byref (needed ))
259+ if not res :
260+ raise ctypes .WinError ()
261+ return bool (uof .dwFlags & WSF_VISIBLE )
262+ else :
263+ def _is_gui_available ():
264+ return True
265+
236266def is_resource_enabled (resource ):
237267 """Test whether a resource is enabled. Known resources are set by
238268 regrtest.py."""
@@ -245,6 +275,8 @@ def requires(resource, msg=None):
245275 possibility of False being returned occurs when regrtest.py is
246276 executing.
247277 """
278+ if resource == 'gui' and not _is_gui_available ():
279+ raise unittest .SkipTest ("Cannot use the 'gui' resource" )
248280 # see if the caller's module is __main__ - if so, treat as if
249281 # the resource was set
250282 if sys ._getframe (1 ).f_globals .get ("__name__" ) == "__main__" :
@@ -1063,6 +1095,8 @@ def _id(obj):
10631095 return obj
10641096
10651097def requires_resource (resource ):
1098+ if resource == 'gui' and not _is_gui_available ():
1099+ return unittest .skip ("resource 'gui' is not available" )
10661100 if is_resource_enabled (resource ):
10671101 return _id
10681102 else :
0 commit comments