]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-61698: Use launchctl to detect macOS window manager in tests (#118390)
authorErlend E. Aasland <erlend@python.org>
Sun, 13 Oct 2024 08:22:31 +0000 (10:22 +0200)
committerGitHub <noreply@github.com>
Sun, 13 Oct 2024 08:22:31 +0000 (10:22 +0200)
Lib/test/support/__init__.py

index 72ce5dacd1be4ce530d0580316b7b2540fd194f6..d768bead7120c7224ddec8a4c585d3214542c9af 100644 (file)
@@ -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: