"""Standalone test for windows/webview2_runtime.py — no Kivy, no player. Checks the runtime-detection logic and (optionally) a real silent install. Run: windows\\venv\\Scripts\\python.exe windows\\test_webview2_runtime.py windows\\venv\\Scripts\\python.exe windows\\test_webview2_runtime.py --install Without --install this is read-only: it reports the detected version and which installer would be used. With --install it forces the installer path to run (useful on a machine that genuinely lacks the Runtime). Exit code 0 = checks passed. """ import os import sys from pathlib import Path sys.path.insert(0, str(Path(__file__).resolve().parent)) import webview2_runtime as w # noqa: E402 def main(): force_install = '--install' in sys.argv print('=' * 68) print(' WebView2 Runtime detection test') print('=' * 68) version = w.get_runtime_version() installed = w.is_runtime_installed() print(f'registry/SDK version : {version or "(none)"}') print(f'is_runtime_installed : {installed}') installer, kind = w.find_installer() print(f'installer : {installer}') print(f'installer kind : {kind}') print(f'describe() : {w.describe()}') ok = True # Version parsing must be comparable and tolerant of junk. cases = { '152.0.4191.66': (152, 0, 4191, 66), '1.2': (1, 2, 0, 0), '': (0, 0, 0, 0), None: (0, 0, 0, 0), } for raw, expected in cases.items(): got = w._parse_version(raw) flag = 'ok' if got == expected else 'FAIL' if got != expected: ok = False print(f' parse({raw!r:16}) -> {got} [{flag}]') # An installer must be discoverable: without one, a Runtime-less machine # has no way to recover. if installer is None: print('\nWARNING: no installer found — a machine without the Runtime ' 'cannot self-heal.') print('Run: .\\webview2_runtime\\download_runtime_installers.ps1') else: sig_status = 'n/a' try: import subprocess out = subprocess.run( ['powershell', '-NoProfile', '-Command', f'(Get-AuthenticodeSignature -LiteralPath "{installer}").Status'], capture_output=True, text=True, timeout=60, ) sig_status = (out.stdout or '').strip() or 'unknown' except Exception as exc: sig_status = f'check failed: {exc}' print(f'signature : {sig_status}') if force_install: print('\n--install given: running the silent installer path...') result = w.ensure_runtime(timeout=600) print(f'ensure_runtime() -> {result}') if not result.get('installed'): ok = False else: # Read-only path: ensure_runtime must be a no-op that reports presence. result = w.ensure_runtime(timeout=60) print(f'\nensure_runtime() (read-only) -> {result}') if installed and not result.get('installed'): print('FAIL: Runtime present but ensure_runtime() disagreed') ok = False if result.get('action') not in ('already-present', 'installer-missing', 'skipped-recent-failure', 'installed-standalone', 'installed-bootstrapper', 'attempted-standalone', 'attempted-bootstrapper'): print(f'FAIL: unexpected action {result.get("action")!r}') ok = False print('=' * 68) print(' RESULT:', 'PASS' if ok else 'FAIL') print('=' * 68) return 0 if ok else 1 if __name__ == '__main__': sys.exit(main())