| """PR-style patch export for generated tests.""" |
|
|
| from __future__ import annotations |
|
|
| import difflib |
| from pathlib import Path |
|
|
| from generator import GeneratedSuite |
|
|
|
|
| def make_pr_patch(suite: GeneratedSuite) -> str: |
| """Return a unified diff that adds the generated tests and a CI hint.""" |
| sections: list[str] = [] |
| for relative, content in sorted(suite.files.items()): |
| new_lines = content.splitlines(keepends=True) |
| diff = difflib.unified_diff( |
| [], |
| new_lines, |
| fromfile="/dev/null", |
| tofile=f"b/{relative}", |
| lineterm="", |
| ) |
| sections.append("\n".join(diff)) |
|
|
| ci_hint = "pytest tests -q\n" |
| sections.append( |
| "\n".join( |
| difflib.unified_diff( |
| [], |
| [ci_hint], |
| fromfile="/dev/null", |
| tofile="b/TESTFORGE_CI_HINT.txt", |
| lineterm="", |
| ) |
| ) |
| ) |
| return "\n\n".join(sections) + "\n" |
|
|
|
|
| def write_patch(suite: GeneratedSuite, path: str | Path) -> Path: |
| output = Path(path) |
| output.parent.mkdir(parents=True, exist_ok=True) |
| output.write_text(make_pr_patch(suite), encoding="utf-8") |
| return output |
|
|
|
|