update
This commit is contained in:
@@ -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"]
|
||||
|
||||
Reference in New Issue
Block a user