This commit is contained in:
team3
2026-09-07 07:44:00 +02:00
parent 5d42b4cfc5
commit c6bbed4049
250 changed files with 13372 additions and 6203 deletions

View File

@@ -103,7 +103,8 @@ async def test_messung_ist_auftrag_und_tuersteher(datenordner, monkeypatch):
f = features.anlegen(
"Test",
"<!-- titel -->\nLogin\n<!-- funktion -->\nAnmelden\n"
"<!-- regeln -->\n- Auch Passwort prüfen.\n",
"<!-- regeln -->\n- Auch Passwort prüfen.\n"
"<!-- testen -->\n- Anmelden\n- Angemeldet\n",
)
gesehen = []
# Jede Stimme liefert erst einen halbherzigen Vorschlag: Punkt weg, Füllwort bleibt
@@ -141,7 +142,8 @@ async def test_gemessener_verstoss_wird_notfalls_selbst_behoben(datenordner, mon
f = features.anlegen(
"Test",
"<!-- titel -->\nLogin\n<!-- funktion -->\nAnmelden\n"
"<!-- regeln -->\n- Auch Passwort prüfen.\n",
"<!-- regeln -->\n- Auch Passwort prüfen.\n"
"<!-- testen -->\n- Anmelden\n- Angemeldet\n",
)
async def sturr(system, inhalt, temperatur=0.0):
@@ -226,18 +228,24 @@ def test_zeilenfehler_haben_vorrang():
== ["Satzzeichen am Zeilenende, Füllwort „auch“"]
def test_funktion_ohne_jedes_feld_ist_leer():
"""Ein bloßer Titel beschreibt nichts — der Prüfer stülpt ihn über alles."""
def test_funktion_ohne_testschritte():
"""Ohne Ablauf ist der Titel eine Behauptung — der Prüfer stülpt ihn über alles."""
b = struktur.befunde("funktion", {"titel": "Modal steuern", "ziel": "",
"regeln": "", "testen": ""})
assert _probleme(b) == ["Funktion ohne Ziel, Regeln und Testen"]
assert _probleme(b) == ["Funktion ohne Testschritte"]
def test_ein_einziges_feld_genuegt():
for feld in ("ziel", "regeln", "testen"):
def test_ziel_und_regeln_ersetzen_die_testschritte_nicht():
for feld in ("ziel", "regeln"):
felder = {"titel": "Modal steuern", "ziel": "", "regeln": "", "testen": ""}
felder[feld] = "Etwas tun" if feld == "ziel" else "- Etwas tun"
assert struktur.befunde("funktion", felder) == [], feld
assert _probleme(struktur.befunde("funktion", felder)) \
== ["Funktion ohne Testschritte"], feld
def test_testschritte_genuegen():
assert struktur.befunde("funktion", {"titel": "Modal steuern", "ziel": "",
"regeln": "", "testen": "- Etwas tun"}) == []
def test_einzelnes_feld_loest_nichts_aus():
@@ -259,3 +267,59 @@ def test_platzhalter_ist_kein_inhalt():
def test_kleiner_als_ist_kein_platzhalter():
assert not struktur._umschreiben("funktion", "regeln", "Wert 3 < 5")
def test_kommando_als_testschritt():
"""Ein Setup wird über die Kommandozeile bedient — das muss zulässig sein."""
assert _pruefe("funktion", "testen", '- Befehl "make install" ausführen') == []
assert _pruefe("funktion", "titel", "Anwendung installieren") == []
def test_zitat_zaehlt_als_ein_wort():
"""Sonst sprengt jedes Kommando die Wortgrenze."""
lang = '- Befehl "uv run python -m tft.cli refresh" ausführen'
assert _pruefe("funktion", "testen", lang) == []
# Ohne Zitat greift die Grenze weiter
assert _probleme(_pruefe("funktion", "testen",
"- Ein sehr langer Schritt mit deutlich zu vielen Wörtern")) \
== ["Mehr als 8 Wörter"]
def test_schraegstrich_im_zitat_ist_erlaubt():
assert _pruefe("funktion", "testen", '- Befehl "npm run build/dev" ausführen') == []
assert _probleme(_pruefe("funktion", "regeln", "- Gilt für Bank und/oder Brett")) \
== ["Klammer oder Schrägstrich"]
def test_fuellwort_im_zitat_bleibt_stehen():
"""Der Menüeintrag heißt so — gestrichen zeigte der Schritt auf nichts."""
assert _pruefe("funktion", "testen", '- Klick auf "Auch Vorlagen zeigen"') == []
def test_kommandoschritt_ist_eine_handlung():
"""Nach dem Ergebnis darf keine Handlung mehr stehen — auch keine mit Kommando."""
zwei = ('- Befehl "make install" ausführen\n- Anwendung installiert\n'
'- Befehl "make test" ausführen')
assert _probleme(_pruefe("funktion", "testen", zwei)) == \
["Zweiter Ablauf in einer Funktion"]
def test_ausloeser_ist_kein_funktionstitel():
"""Der Titel nennt die Wirkung; der Griff steht in den Testschritten."""
for titel in ('Befehl "make install" ausführen', "LMB auf Speichern drücken",
"Klick auf Anlegen ausführen"):
assert "Auslöser statt Wirkung im Titel" in _probleme(
_pruefe("funktion", "titel", titel)), titel
assert _pruefe("funktion", "titel", "Anwendung installieren") == []
def test_vorbedingung_ist_kein_zweiter_ablauf():
"""Der Katalog erlaubt eine Vorbedingung zuerst — sie ist kein Endzustand."""
text = "- Badge ist sichtbar\n- RMB auf Badge\n- Text ändern\n- Neuer Text sichtbar"
assert _pruefe("funktion", "testen", text) == []
def test_zweiter_ablauf_faellt_weiter_auf():
text = "- Karte öffnen\n- Karte sichtbar\n- Karte schließen"
assert _probleme(_pruefe("funktion", "testen", text)) \
== ["Zweiter Ablauf in einer Funktion"]