#!/usr/bin/env python3 """Exercise the real SwiftUI window on a logged-in Mac using only a local fixture.""" import http.server import json import os from pathlib import Path import subprocess import sys import threading import time root = Path(__file__).resolve().parents[2] fixture_name = os.environ.get("DOCS_SMOKE_FIXTURE", "letter") assert fixture_name in {"letter", "documentation"} fixture = Path(os.environ["DOCS_SMOKE_UPDATE"]).read_bytes() if "DOCS_SMOKE_UPDATE" in os.environ else (root / "internal/docs/seeddata" / (fixture_name + ".update.bin")).read_bytes() draft = os.environ.get("DOCS_SMOKE_DRAFT") == "1" class Handler(http.server.BaseHTTPRequestHandler): def do_GET(self): if self.path.endswith("/stream"): self.send_response(200) self.send_header("Content-Type", "text/event-stream") self.end_headers() self.wfile.write(b"data: 0\n\n") self.wfile.flush() time.sleep(20) return if "/updates" in self.path: data = b"" if draft else fixture else: time.sleep(0.3) # Include loading -> editor layout transition. data = json.dumps(dict(sqid="fixture", title="Window smoke fixture", guid="window-smoke", can_write=True, can_share=False)).encode() self.send_response(200) self.send_header("Docs-Seq", "0") self.send_header("Content-Length", str(len(data))) self.end_headers() self.wfile.write(data) def do_POST(self): self.rfile.read(int(self.headers.get("Content-Length", "0"))) if self.path == "/documents": time.sleep(2) data = json.dumps(dict(sqid="fixture", title="Window smoke fixture")).encode() self.send_response(201); self.send_header("Content-Length", str(len(data))); self.end_headers(); self.wfile.write(data) else: self.send_response(204) self.end_headers() def log_message(self, *_): pass with http.server.ThreadingHTTPServer(("127.0.0.1", 0), Handler) as server: threading.Thread(target=server.serve_forever, daemon=True).start() env = dict(os.environ, DOCS_SMOKE_ORIGIN=f"http://127.0.0.1:{server.server_port}") result = subprocess.run(["swift", "run", "--package-path", str(root / "native/smoke/document-window")], env=env, timeout=180, stdout=subprocess.PIPE, text=True) print(result.stdout, end="") server.shutdown() if result.returncode == 0 and "PASS: document loads," not in result.stdout: sys.exit("Smoke process exited before completing its assertions") raise SystemExit(result.returncode)