S19: establish engineering repository
This commit is contained in:
51
tests/format_integration.py
Normal file
51
tests/format_integration.py
Normal file
@@ -0,0 +1,51 @@
|
||||
"""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[1]
|
||||
with tempfile.TemporaryDirectory(prefix="palantir-test-") as temporary:
|
||||
fixture = Path(temporary)
|
||||
pom = (root / "templates/common/pom.xml").read_text().replace("@PROJECT@", "format-fixture").replace("@MODULES@", "")
|
||||
(fixture / "pom.xml").write_text(pom)
|
||||
(fixture / "generated/tooling").mkdir(parents=True)
|
||||
shutil.copytree(root / "resources/tooling/format", fixture / "generated/tooling/format")
|
||||
(fixture / "engineering.properties").write_text("FORMAT_DIRECTORIES=backend/src,ci\n")
|
||||
for name in ("backend/src/main/java", "backend/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")
|
||||
Reference in New Issue
Block a user