aboutsummaryrefslogtreecommitdiff
path: root/bundle/scripts/smoke-package.py
diff options
context:
space:
mode:
author_ov4 <ov4@ov4.org>2026-10-22 11:46:32 +0000
committer_ov4 <ov4@ov4.org>2026-10-22 11:46:32 +0000
commit4494b54d0e4b0b1564a7c66391216b98c8523b0e (patch)
tree6ed15f551e826b8623581292c4cdab2f05fbf9b9 /bundle/scripts/smoke-package.py
parent8d82bcba8f24a1ee30d4dee8a2ba19d2b58e7f4f (diff)
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 <noreply@anthropic.com>
Diffstat (limited to 'bundle/scripts/smoke-package.py')
-rw-r--r--bundle/scripts/smoke-package.py50
1 files changed, 0 insertions, 50 deletions
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.")