From 4494b54d0e4b0b1564a7c66391216b98c8523b0e Mon Sep 17 00:00:00 2001 From: _ov4 Date: Thu, 22 Oct 2026 11:46:32 +0000 Subject: build(bundle): port the package smoke test to Perl Replace bundle/scripts/smoke-package.py with smoke-package.pl, which uses only core modules like the other build and test scripts. Windows runs it with native Strawberry Perl. Co-Authored-By: Claude Opus 5.5 --- bundle/scripts/smoke-package.py | 50 ----------------------------------------- 1 file changed, 50 deletions(-) delete mode 100644 bundle/scripts/smoke-package.py (limited to 'bundle/scripts/smoke-package.py') diff --git a/bundle/scripts/smoke-package.py b/bundle/scripts/smoke-package.py deleted file mode 100644 index 44f885f..0000000 --- a/bundle/scripts/smoke-package.py +++ /dev/null @@ -1,50 +0,0 @@ -"""Check a portable desktop package without relying on an installed toolchain.""" - -from pathlib import Path -import os -import subprocess -import sys -import tempfile -import time - -root = Path(sys.argv[1]).resolve() -environment = os.environ.copy() -if sys.platform == "win32": - # Windows environ lookups ignore case; the copied dict has uppercase keys. - system_root = os.environ["SystemRoot"] - environment["PATH"] = os.pathsep.join((os.path.join(system_root, "System32"), system_root)) -else: - environment["PATH"] = "/nonexistent" -with tempfile.TemporaryDirectory(prefix="cpsc bundle smoke ") as directory: - work = Path(directory) - if sys.platform == "win32": - assert root.is_file() and root.suffix == ".exe", "Expected a single portable .exe" - # Extraction happens before WebView startup and publishes a complete file by rename. - desktop = subprocess.Popen([str(root)], cwd=work, env=environment) - compiler = work / "cpsc.exe" - try: - deadline = time.monotonic() + 30 - while not compiler.is_file(): - assert desktop.poll() is None, "Desktop exited before extracting its compiler" - assert time.monotonic() < deadline, "Compiler extraction timed out" - time.sleep(0.1) - finally: - if desktop.poll() is None: - desktop.terminate() - desktop.wait(timeout=10) - else: - compilers = list(root.rglob("cpsc")) - assert len(compilers) == 1, f"Expected one packaged compiler, found {compilers}" - compiler = compilers[0] - assert compiler.with_name("cpsc-bundle").is_file(), "Missing desktop executable" - resources = compiler.parent.parent / "Resources" if sys.platform == "darwin" else compiler.parent - for filename in ("LICENSE", "ThirdPartyNotices.md", "licenses/vscode.txt", "licenses/plugin.md"): - assert (resources / filename).is_file(), f"Missing {filename}" - (work / "data.txt").write_text("relative file\n", encoding="utf-8") - source = work / "source file.cps" - source.write_text('DECLARE N : INTEGER\nINPUT N\nOUTPUT N\nDECLARE S : STRING\nOPENFILE "data.txt" FOR READ\nREADFILE "data.txt", S\nCLOSEFILE "data.txt"\nOUTPUT S\n', encoding="utf-8") - result = subprocess.run([str(compiler), str(source), "-r"], input=b"17\n", capture_output=True, cwd=work, env=environment, timeout=30) - assert result.returncode == 0, result.stderr - assert result.stdout.replace(b"\r\n", b"\n") == b"17\nrelative file\n", result.stdout - assert result.stderr == b"", result.stderr -print("Desktop package smoke passed: portable application, compiler, stdin and relative files.") -- cgit v1.3.1-4-g156e