oficina / docs Public

Clone
git clone https://amadan.net/oficina/docs

Plain git — no account needed to clone.

Download

Download this file

1#!/usr/bin/env python3
2"""Exercise the real SwiftUI window on a logged-in Mac using only a local fixture."""
3import http.server
4import json
5import os
6from pathlib import Path
7import subprocess
8import sys
9import threading
10import time
11
12root = Path(__file__).resolve().parents[2]
13fixture_name = os.environ.get("DOCS_SMOKE_FIXTURE", "letter")
14assert fixture_name in {"letter", "documentation"}
15fixture = 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()
16
17draft = os.environ.get("DOCS_SMOKE_DRAFT") == "1"
18
19class Handler(http.server.BaseHTTPRequestHandler):
20 def do_GET(self):
21 if self.path.endswith("/stream"):
22 self.send_response(200)
23 self.send_header("Content-Type", "text/event-stream")
24 self.end_headers()
25 self.wfile.write(b"data: 0\n\n")
26 self.wfile.flush()
27 time.sleep(20)
28 return
29 if "/updates" in self.path:
30 data = b"" if draft else fixture
31 else:
32 time.sleep(0.3) # Include loading -> editor layout transition.
33 data = json.dumps(dict(sqid="fixture", title="Window smoke fixture", guid="window-smoke",
34 can_write=True, can_share=False)).encode()
35 self.send_response(200)
36 self.send_header("Docs-Seq", "0")
37 self.send_header("Content-Length", str(len(data)))
38 self.end_headers()
39 self.wfile.write(data)
40
41 def do_POST(self):
42 self.rfile.read(int(self.headers.get("Content-Length", "0")))
43 if self.path == "/documents":
44 time.sleep(2)
45 data = json.dumps(dict(sqid="fixture", title="Window smoke fixture")).encode()
46 self.send_response(201); self.send_header("Content-Length", str(len(data))); self.end_headers(); self.wfile.write(data)
47 else:
48 self.send_response(204)
49 self.end_headers()
50
51 def log_message(self, *_):
52 pass
53
54with http.server.ThreadingHTTPServer(("127.0.0.1", 0), Handler) as server:
55 threading.Thread(target=server.serve_forever, daemon=True).start()
56 env = dict(os.environ, DOCS_SMOKE_ORIGIN=f"http://127.0.0.1:{server.server_port}")
57 result = subprocess.run(["swift", "run", "--package-path", str(root / "native/smoke/document-window")],
58 env=env, timeout=180, stdout=subprocess.PIPE, text=True)
59 print(result.stdout, end="")
60 server.shutdown()
61 if result.returncode == 0 and "PASS: document loads," not in result.stdout:
62 sys.exit("Smoke process exited before completing its assertions")
63 raise SystemExit(result.returncode)
64