Skip to content

Commit

Permalink
pythongh-61698: Use launchctl to detect macOS window manager in tests (
Browse files Browse the repository at this point in the history
…pythonGH-118390)

(cherry picked from commit ce740d4)

Co-authored-by: Erlend E. Aasland <erlend@python.org>
  • Loading branch information
erlend-aasland authored and miss-islington committed Oct 13, 2024
1 parent afddaeb commit 3c1efa7
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 @@ -250,22 +250,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 3c1efa7

Please sign in to comment.