"""Integration checks against an isolated checkout; run python3 tooling/format/test.py.""" from pathlib import Path import shutil import subprocess import tempfile root = Path(__file__).resolve().parents[2] with tempfile.TemporaryDirectory(prefix="palantir-test-") as temporary: fixture = Path(temporary) for name in ("pom.xml", ".mvn", "tooling/format"): source = root / name destination = fixture / name if source.is_dir(): shutil.copytree(source, destination) else: shutil.copy2(source, destination) for name in ("agiledancers-be/src/main/java", "agiledancers-be/src/test/java", "ci/runner"): (fixture / name).mkdir(parents=True) source = fixture / "ci/runner/Example.java" original = "import java.util.List;\nclass Example{String text=\"héllo\";int value(){return 1;}}\n" source.write_text(original) def run(mode, success=True): result = subprocess.run( ["mvn", "-N", "-B", "-ntp", "exec:exec@format", "-Dformat.mode=" + mode], cwd=fixture, text=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) assert (result.returncode == 0) == success, result.stdout return result.stdout output = run("check", False) assert "ci/runner/Example.java" in output and "mvn -N exec:exec@format" in output assert source.read_text() == original run("apply") formatted = source.read_text() assert "import java.util.List" not in formatted and "héllo" in formatted run("check") run("apply") assert source.read_text() == formatted # Force a full (uncached) second pass to prove engine idempotence. (fixture / "target/palantir-cache.properties").unlink() run("check") source.write_text(formatted + "class Broken { ??? }\n") invalid = source.read_bytes() output = run("apply", False) assert "ci/runner/Example.java" in output assert source.read_bytes() == invalid # A new file is discovered even after a successful cached check. source.write_text(formatted) extra = fixture / "ci/New.java" extra.write_text("class New{}") run("check", False) assert extra.read_text() == "class New{}" print("PASS: check is read-only, apply/check agree, imports, UTF-8, idempotence, parser errors, new files")