update
This commit is contained in:
58
backend/tests/test_inhalt.py
Normal file
58
backend/tests/test_inhalt.py
Normal file
@@ -0,0 +1,58 @@
|
||||
import inhalt
|
||||
import quellcode
|
||||
|
||||
|
||||
def test_unformatierte_prompts_ohne_doppelklammern():
|
||||
"""Was nicht durch .format() geht, darf keine Escape-Klammern tragen —
|
||||
das Modell schrieb sie sonst wörtlich in die Antwort und das JSON war kaputt."""
|
||||
for name in ("ABDECKUNG_SYSTEM",):
|
||||
text = getattr(inhalt, name)
|
||||
assert "{{" not in text and "}}" not in text, name
|
||||
|
||||
|
||||
def test_formatierte_prompts_ueberstehen_format():
|
||||
punkt = {"art": "Bedienung", "datei": "a.vue", "zeile": 1,
|
||||
"umfeld": "x", "rumpf": ""}
|
||||
fertig = inhalt.ABDECKUNG.format(funktionen="—", **punkt)
|
||||
assert '{"abgedeckt": true' in fertig
|
||||
assert "{{" not in fertig
|
||||
|
||||
|
||||
def test_beleg_muss_woertlich_dastehen():
|
||||
quelle = {"a.py": "def eins():\n return 1\n"}
|
||||
assert quellcode.belegt(quelle, "a.py", "def eins():")
|
||||
assert quellcode.belegt(quelle, "a.py", " def eins(): ") # Einrückung egal
|
||||
assert quellcode.belegt(quelle, "a.py", "def eins():\nreturn 1")
|
||||
assert not quellcode.belegt(quelle, "a.py", "def zwei():")
|
||||
assert not quellcode.belegt(quelle, "b.py", "def eins():")
|
||||
assert not quellcode.belegt(quelle, "a.py", "")
|
||||
|
||||
|
||||
def test_interaktionen_sind_deterministisch():
|
||||
quelle = {
|
||||
"frontend/src/X.vue": (
|
||||
'<button @click="starte(\'ziel\')">a</button>\n'
|
||||
'<button @click="starte(\'regeln\')">b</button>\n'
|
||||
'<div @contextmenu="menue">c</div>\n'
|
||||
'<input @blur="fertig" @keydown.esc="abbrechen">\n'
|
||||
'<span @click="offen = false">zu</span>\n'
|
||||
),
|
||||
"backend/routes.py": '@router.get("/projekte")\n@router.post("/projekte")\n',
|
||||
"frontend/src/m.js": " { text: '+ Projekt erstellen', aktion: () => x() },\n",
|
||||
}
|
||||
schluessel = [p["schluessel"] for p in quellcode.interaktionen(quelle)]
|
||||
# Zwölf Aufrufe von starte() sind eine Fähigkeit, nicht zwölf
|
||||
assert schluessel.count("bedienen:starte") == 1
|
||||
assert "bedienen:menue" in schluessel
|
||||
assert not any(s.startswith("route:") for s in schluessel) # Verdrahtung, keine Bedienung
|
||||
assert "menue:+ Projekt erstellen" in schluessel
|
||||
# Technische Aufhänger und Zuweisungen sind keine Fähigkeiten
|
||||
assert not any(s.startswith("bedienen:fertig") for s in schluessel)
|
||||
assert not any(s.startswith("bedienen:abbrechen") for s in schluessel)
|
||||
assert not any(s.startswith("bedienen:offen") for s in schluessel)
|
||||
# Zweiter Aufruf liefert exakt dasselbe
|
||||
assert schluessel == [p["schluessel"] for p in quellcode.interaktionen(quelle)]
|
||||
|
||||
|
||||
def test_tests_sind_kein_quelltext():
|
||||
assert not any("tests/" in p for p in quellcode.dateien())
|
||||
Reference in New Issue
Block a user