73 lines
2.5 KiB
Python
73 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
"""Ad-hoc test harness (not part of the shipped installer): applies various
|
|
plugin subsets against a fresh copy of the crosspoint-reader source and
|
|
reports success/failure per combination. Requires a pristine repo template
|
|
directory and a scratch working directory as arguments.
|
|
"""
|
|
import itertools
|
|
import os
|
|
import shutil
|
|
import sys
|
|
|
|
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
|
|
from framework.discovery import discover_all, build_selected
|
|
from framework.engine import apply, Context, PatchError
|
|
|
|
PLUGINS_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "plugins")
|
|
|
|
|
|
def run_case(template_dir, scratch_dir, names):
|
|
if os.path.exists(scratch_dir):
|
|
shutil.rmtree(scratch_dir)
|
|
shutil.copytree(template_dir, scratch_dir)
|
|
ctx = Context(repo_dir=scratch_dir, yes_all=True, prompt=False)
|
|
selected = build_selected(names, PLUGINS_DIR, ctx)
|
|
apply(ctx, selected)
|
|
|
|
|
|
def main():
|
|
template_dir = sys.argv[1]
|
|
scratch_root = sys.argv[2]
|
|
cases_arg = sys.argv[3] if len(sys.argv) > 3 else "all"
|
|
|
|
all_names = sorted(discover_all(PLUGINS_DIR).keys())
|
|
print(f"Discovered plugins: {all_names}")
|
|
|
|
if cases_arg == "all":
|
|
cases = [[n] for n in all_names]
|
|
cases.append(all_names)
|
|
cases.append(["darkmode", "smallerfonts"])
|
|
cases.append(["bookerly", "smallerfonts"])
|
|
cases.append(["bookerly"])
|
|
cases.append(["githubsync"])
|
|
cases.append(["hardcover", "pong"])
|
|
cases.append(["lockscreen", "darkmode", "pong"])
|
|
else:
|
|
cases = [cases_arg.split(",")]
|
|
|
|
results = []
|
|
for names in cases:
|
|
label = "+".join(names)
|
|
scratch_dir = os.path.join(scratch_root, label.replace("/", "_"))
|
|
try:
|
|
run_case(template_dir, scratch_dir, names)
|
|
print(f"OK {label}")
|
|
results.append((label, True, ""))
|
|
except PatchError as e:
|
|
print(f"FAIL {label}: {e}")
|
|
results.append((label, False, str(e)))
|
|
except Exception as e:
|
|
print(f"ERROR {label}: {type(e).__name__}: {e}")
|
|
results.append((label, False, f"{type(e).__name__}: {e}"))
|
|
|
|
print("\n=== Summary ===")
|
|
n_ok = sum(1 for _, ok, _ in results if ok)
|
|
for label, ok, msg in results:
|
|
print(f"{'OK' if ok else 'FAIL'} {label}" + (f" -- {msg}" if not ok else ""))
|
|
print(f"\n{n_ok}/{len(results)} passed")
|
|
sys.exit(0 if n_ok == len(results) else 1)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|