summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/support/__init__.py24
1 files changed, 9 insertions, 15 deletions
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 72ce5da..d768bea 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -253,22 +253,16 @@ def _is_gui_available():
# process not running under the same user id as the current console
# user. To avoid that, raise an exception if the window manager
# connection is not available.
- from ctypes import cdll, c_int, pointer, Structure
- from ctypes.util import find_library
-
- app_services = cdll.LoadLibrary(find_library("ApplicationServices"))
-
- if app_services.CGMainDisplayID() == 0:
- reason = "gui tests cannot run without OS X window manager"
+ import subprocess
+ try:
+ rc = subprocess.run(["launchctl", "managername"],
+ capture_output=True, check=True)
+ managername = rc.stdout.decode("utf-8").strip()
+ except subprocess.CalledProcessError:
+ reason = "unable to detect macOS launchd job manager"
else:
- class ProcessSerialNumber(Structure):
- _fields_ = [("highLongOfPSN", c_int),
- ("lowLongOfPSN", c_int)]
- psn = ProcessSerialNumber()
- psn_p = pointer(psn)
- if ( (app_services.GetCurrentProcess(psn_p) < 0) or
- (app_services.SetFrontProcess(psn_p) < 0) ):
- reason = "cannot run without OS X gui process"
+ if managername != "Aqua":
+ reason = f"{managername=} -- can only run in a macOS GUI session"
# check on every platform whether tkinter can actually do anything
if not reason: