diff --git a/tests/cases/cases.toml b/tests/cases/cases.toml index 710bbffd..88ea4e3d 100644 --- a/tests/cases/cases.toml +++ b/tests/cases/cases.toml @@ -162,6 +162,7 @@ executor = "wasm" runner = "ubuntu-24.04" ci_group = "wasm" target = "wasm32-unknown-unknown" +exclude = ["shared/test1.wave", "shared/test2.wave", "shared/test3.wave", "shared/test4.wave", "shared/test5.wave", "shared/test6.wave", "shared/test7.wave", "shared/test8.wave", "shared/test9.wave", "shared/test10.wave"] [[target]] id = "wasm-wasi" @@ -171,6 +172,7 @@ executor = "wasm" runner = "ubuntu-24.04" ci_group = "wasm" target = "wasm32-wasip1" +exclude = ["shared/test1.wave", "shared/test2.wave", "shared/test3.wave", "shared/test4.wave", "shared/test5.wave", "shared/test6.wave", "shared/test7.wave", "shared/test8.wave", "shared/test9.wave", "shared/test10.wave"] [[target]] id = "wasm64-unknown" @@ -180,3 +182,4 @@ executor = "wasm" runner = "ubuntu-24.04" ci_group = "wasm" target = "wasm64-unknown-unknown" +exclude = ["shared/test1.wave", "shared/test2.wave", "shared/test3.wave", "shared/test4.wave", "shared/test5.wave", "shared/test6.wave", "shared/test7.wave", "shared/test8.wave", "shared/test9.wave", "shared/test10.wave"] diff --git a/tools/case_manifest.py b/tools/case_manifest.py index 147e1f42..5cb2ec58 100644 --- a/tools/case_manifest.py +++ b/tools/case_manifest.py @@ -141,7 +141,7 @@ def sources(self): def runtime_sources(self, target_id: str): target = self.target(target_id) paths = [] - for suite in (f"shared/{target.arch}", target.suite): + for suite in target.suites: directory = CASES_ROOT / suite entries = list(directory.glob("test*.wave")) entries.extend(directory.glob("test*/main.wave")) diff --git a/tools/test_case_manifest.py b/tools/test_case_manifest.py index 9b47d2fd..4ff95008 100644 --- a/tools/test_case_manifest.py +++ b/tools/test_case_manifest.py @@ -19,7 +19,9 @@ from tools import case_manifest from tools.case_manifest import ( MIN_CASES_PER_SUITE, + CaseManifest, CaseManifestError, + CaseTarget, _validate_case_layout, load_case_manifest, ) @@ -225,6 +227,82 @@ def test_manifest_accepts_non_ascii_utf8_comments(self): ) self.assertEqual(load_case_manifest(manifest), self.manifest) + def test_runtime_sources_include_eligible_generic_shared_cases(self): + eligible = "fun main() {}\n" + included = ( + "shared/test1.wave", + "shared/test10.wave", + "shared/amd64/test1.wave", + "linux/amd64/test3.wave", + ) + omitted = { + "shared/test2.wave": "// wave-test: mode=check\nfun main() {}\n", + "shared/test3.wave": "// wave-test: runner=server\nfun main() {}\n", + "shared/test4.wave": "// wave-test: stdin=hello\nfun main() {}\n", + "shared/test5.wave": "// wave-test: udp-input=true\nfun main() {}\n", + "shared/test6.wave": "// wave-test: expected-exit=1\nfun main() {}\n", + "shared/test7.wave": eligible, + } + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + for relative in (*included, *omitted): + path = root / relative + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(omitted.get(relative, eligible), encoding="utf-8") + + target = CaseTarget( + id="linux-amd64", + os="linux", + arch="amd64", + suite="linux/amd64", + status="supported", + enabled=True, + ci=True, + executor="native", + suites=("shared", "shared/amd64", "linux/amd64"), + exclude=("shared/test7.wave",), + ) + manifest = CaseManifest(version=2, targets=(target,)) + with patch.object(case_manifest, "CASES_ROOT", root): + sources = manifest.runtime_sources("linux-amd64") + + self.assertEqual(sources, included) + self.assertEqual(len(sources), len(set(sources))) + + def test_runtime_sources_respect_wasm_shared_exclusions(self): + eligible = "fun main() {}\n" + with tempfile.TemporaryDirectory() as temporary: + root = Path(temporary) + for relative in ( + "shared/test1.wave", + "shared/wasm32/test1.wave", + "wasm/wasm32/test1.wave", + ): + path = root / relative + path.parent.mkdir(parents=True, exist_ok=True) + path.write_text(eligible, encoding="utf-8") + + target = CaseTarget( + id="wasm-unknown", + os="wasm", + arch="wasm32", + suite="wasm/wasm32", + status="supported", + enabled=True, + ci=True, + executor="wasm", + suites=("shared", "shared/wasm32", "wasm/wasm32"), + exclude=("shared/test1.wave",), + ) + manifest = CaseManifest(version=2, targets=(target,)) + with patch.object(case_manifest, "CASES_ROOT", root): + sources = manifest.runtime_sources("wasm-unknown") + + self.assertEqual( + sources, + ("shared/wasm32/test1.wave", "wasm/wasm32/test1.wave"), + ) + def test_invalid_utf8_manifest_reports_path_in_case_manifest_error(self): with tempfile.TemporaryDirectory() as temporary: manifest = Path(temporary) / "cases.toml"