This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Run the same @Test method bodies offline, omitting only JUnit/Kotlin runner annotations."""
|
||||
from pathlib import Path
|
||||
import re
|
||||
import shutil
|
||||
root = Path(__file__).resolve().parent.parent
|
||||
out = root / "out/offline-tests/generated"
|
||||
shutil.rmtree(out, ignore_errors=True)
|
||||
out.mkdir(parents=True)
|
||||
cases = []
|
||||
for source in sorted(list((root / "core/src/commonTest").rglob("*Tests.kt")) + list((root / "platform-jvm/src/test").rglob("*Tests.kt"))):
|
||||
text = source.read_text()
|
||||
package = re.search(r"^package ([\w.]+)", text, re.M).group(1)
|
||||
cls = re.search(r"^class (\w+Tests)", text, re.M).group(1)
|
||||
for method in re.findall(r"@Test\s+fun (\w+)\(", text):
|
||||
cases.append((f"{cls}.{method}", f"{package}.{cls}().{method}()"))
|
||||
text = re.sub(r"^import (?:kotlin\.test|org\.junit)\.Test\s*$", "", text, flags=re.M).replace("@Test ", "")
|
||||
(out / source.name).write_text(text)
|
||||
runner = """package dev.fileworkbench.testing
|
||||
fun main() {
|
||||
val cases: List<Pair<String, () -> Unit>> = listOf(
|
||||
"""
|
||||
runner += ",\n".join(f' "{name}" to {{ {call} }}' for name, call in cases)
|
||||
runner += """
|
||||
)
|
||||
var failed = 0
|
||||
for ((name, run) in cases) {
|
||||
try { run(); println("PASS $name") }
|
||||
catch (e: Throwable) { failed++; println("FAIL $name: ${e.message}"); e.printStackTrace() }
|
||||
}
|
||||
println("RESULT: ${cases.size - failed}/${cases.size} checks passed")
|
||||
check(failed == 0) { "$failed checks failed" }
|
||||
}
|
||||
"""
|
||||
(out / "OfflineRunner.kt").write_text(runner)
|
||||
print(f"Prepared {len(cases)} production-core/JVM checks.")
|
||||
Reference in New Issue
Block a user