Skip to content

Commit

Permalink
gh-61698: Use launchctl to detect macOS window manager in tests
Browse files Browse the repository at this point in the history
  • Loading branch information
erlend-aasland committed Apr 29, 2024
1 parent c7e7bfc commit 37eec0b
Showing 1 changed file with 9 additions and 15 deletions.
24 changes: 9 additions & 15 deletions Lib/test/support/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -251,22 +251,16 @@ class USEROBJECTFLAGS(ctypes.Structure):
# 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:
Expand Down

0 comments on commit 37eec0b

Please sign in to comment.