from pathlib import Path # The demo pages are not regression suites, but every one of them must at # least compile and render: a preprocessor or runtime change that breaks a # demo page (e.g. literal text that looks like an entry point) should fail CI. ERROR_MARKERS = [ "uce compile error", "fatal signal during request", "uncaught exception during request", ] def _repo_root(): return Path(__file__).resolve().parents[2] def _make_demo_case(page_path): def run(context): response = context.expect_status(page_path, 200) body_lower = response.text.lower() for marker in ERROR_MARKERS: if marker in body_lower: raise Exception("response body contained error marker %r for %s" % (marker, page_path)) return "HTTP 200 without error markers for %s" % page_path return run def register(registry): demo_dir = _repo_root() / "site" / "demo" for path in sorted(demo_dir.glob("*.uce")): registry.case( "demo page " + path.name, _make_demo_case("/demo/" + path.name), tags=["http", "smoke", "uce", "demo", "public"], )