mirror of https://github.com/python/cpython.git
gh-61698: Use launchctl to detect macOS window manager in tests (#118390)
This commit is contained in:
parent
4197a796ec
commit
ce740d4624
|
@ -253,22 +253,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:
|
||||
|
|
Loading…
Reference in New Issue