#!/usr/bin/env python3 """Phase-4-Hilfe: Chat-/Kontakte-Singleton zaehlen und pruefen (Win32, keine Patientendaten).""" from __future__ import annotations import argparse import sys import time from _test_chat_singleton_count import count_azA_chat_windows def _print_result(r: dict) -> tuple[int, int]: ec = int(r.get("empfang_count", 0)) kc = int(r.get("kontakt_count", 0)) print(f"empfang_count={ec}") print(f"kontakt_count={kc}") for label, items in (("Empfang", r.get("empfang", [])), ("Kontakt", r.get("kontakt", []))): for hwnd, pid, title in items: print(f" {label}: HWND={hwnd} PID={pid} title={title!r}") return ec, kc def main() -> int: ap = argparse.ArgumentParser(description="AzA Chat-Singleton Phase-4 Zaehler") ap.add_argument( "--check", action="store_true", help="Exit 1 wenn nicht genau 1 Huelle und 1 Kontakte-Fenster", ) ap.add_argument( "--expect-empfang", type=int, default=1, help="Erwartete Empfang-Huellen (Default: 1)", ) ap.add_argument( "--expect-kontakt", type=int, default=1, help="Erwartete Kontakte-Fenster (Default: 1)", ) ap.add_argument( "--watch", type=float, default=0.0, metavar="SEC", help="Alle SEC Sekunden erneut zaehlen (Strg+C beenden)", ) args = ap.parse_args() if sys.platform != "win32": print("ERROR: nur Windows") return 2 def _once() -> int: r = count_azA_chat_windows() if "error" in r: print(f"ERROR: {r['error']}") return 2 ec, kc = _print_result(r) if args.check: ok = ec == args.expect_empfang and kc == args.expect_kontakt if ok: print("SINGLETON_OK") return 0 print( f"SINGLETON_FAIL expected empfang={args.expect_empfang} " f"kontakt={args.expect_kontakt}" ) return 1 return 0 if args.watch and args.watch > 0: try: while True: print("---") code = _once() if args.check and code != 0: return code time.sleep(args.watch) except KeyboardInterrupt: return 0 return _once() if __name__ == "__main__": raise SystemExit(main())