Initial LinuxCNC WebAssembly workspace snapshot

This commit is contained in:
2026-08-20 18:21:15 +08:00
commit 5dd614c335
92 changed files with 200203 additions and 0 deletions

View File

@@ -0,0 +1,65 @@
#!/usr/bin/env python3
import json
import sys
import unittest
from pathlib import Path
from tempfile import TemporaryDirectory
sys.path.insert(0, str(Path(__file__).resolve().parent))
from generate_test_entries import generate
class TestEntriesTests(unittest.TestCase):
def create_tree(self):
directory = TemporaryDirectory()
root = Path(directory.name)
test_dir = root / "linuxcnc/tests/demo"
unit_dir = root / "linuxcnc/unit_tests/tp"
test_dir.mkdir(parents=True)
unit_dir.mkdir(parents=True)
(test_dir / "test.sh").write_text("#!/bin/sh\nlinuxcnc demo.ini\n", encoding="utf-8")
(test_dir / "demo.ini").write_text("[EMC]\nMACHINE = demo\n", encoding="utf-8")
(test_dir / "expected.txt").write_text("ok\n", encoding="utf-8")
(test_dir / "checkresult").write_text("#!/bin/sh\nexit 0\n", encoding="utf-8")
(unit_dir / "meson.build").write_text("test('blendmath', executable('test_blendmath', 'test_blendmath.c'))\n", encoding="utf-8")
(unit_dir / "test_blendmath.c").write_text("int main(void) { return 0; }\n", encoding="utf-8")
(root / "linuxcnc/meson.build").write_text("test('top', executable('test_top', 'x.c'))\n", encoding="utf-8")
return directory, root
def test_entries_contain_contract_fields(self):
directory, root = self.create_tree()
self.addCleanup(directory.cleanup)
output = root / "coverage/test-entries.jsonl"
count, _ = generate(root, output, root / "coverage/report.json")
self.assertGreaterEqual(count, 4)
rows = [json.loads(line) for line in output.read_text(encoding="utf-8").splitlines()]
shell = next(row for row in rows if row["path"].endswith("/test.sh"))
self.assertEqual(shell["parse_status"], "parsed")
self.assertIn("linuxcnc/tests/demo/demo.ini", shell["inputs"])
self.assertIn("linuxcnc/tests/demo/expected.txt", shell["expected"])
self.assertEqual(shell["portability"], "portable_candidate")
def test_hardware_is_real_excluded(self):
directory, root = self.create_tree()
self.addCleanup(directory.cleanup)
test_path = root / "linuxcnc/tests/demo/test.sh"
test_path.write_text("#!/bin/sh\nloadrt hostmot2\n", encoding="utf-8")
generate(root, root / "out.jsonl", root / "report.json")
rows = [json.loads(line) for line in (root / "out.jsonl").read_text(encoding="utf-8").splitlines()]
shell = next(row for row in rows if row["path"].endswith("/test.sh"))
self.assertEqual(shell["portability"], "REAL-EXCLUDED")
def test_generation_is_deterministic(self):
directory, root = self.create_tree()
self.addCleanup(directory.cleanup)
first, digest_one = root / "one.jsonl", None
_, digest_one = generate(root, first, root / "report.json")
second, digest_two = root / "two.jsonl", None
_, digest_two = generate(root, second, root / "report.json")
self.assertEqual(digest_one, digest_two)
self.assertEqual(first.read_bytes(), second.read_bytes())
if __name__ == "__main__":
unittest.main()