from parser import zerlege VOLL = """ Login ---------------------------------------- kern ---------------------------------------- Nutzer können sich anmelden. ---------------------------------------- Anmeldung mit E-Mail - Passwort nie loggen - Sperre nach 5 Fehlversuchen - Formular öffnen - Daten eingeben Abmeldung """ def test_alle_sektionen(): s = zerlege(VOLL) assert s["titel"] == "Login" assert s["art"] == "kern" assert s["ziel"] == "Nutzer können sich anmelden." assert s["funktionen"] == [ { "text": "Anmeldung mit E-Mail", "ziel": "", "regeln": "- Passwort nie loggen\n- Sperre nach 5 Fehlversuchen", "testen": "- Formular öffnen\n- Daten eingeben", }, {"text": "Abmeldung", "ziel": "", "regeln": "", "testen": ""}, ] def test_ziel_nach_funktion_gehoert_zur_funktion(): s = zerlege("\nKarte\n\nX\n\nFunktion\n") assert s["ziel"] == "Karte" assert s["funktionen"][0]["ziel"] == "Funktion" def test_mehrere_testen_bloecke_werden_verbunden(): s = zerlege("\nX\n\n- a\n\n- b\n") assert s["funktionen"][0]["testen"] == "- a\n- b" def test_alter_flow_marker_wird_gelesen(): s = zerlege("\nX\n\n- a\n") assert s["funktionen"][0]["testen"] == "- a" def test_alte_regel_bloecke_werden_zusammengefuehrt(): s = zerlege("\nX\n\na\n\nb\n") assert s["funktionen"][0]["regeln"] == "a\nb" def test_trenner_zeilen_werden_ignoriert(): s = zerlege("\nText\n-----\n") assert s["ziel"] == "Text" def test_praeambel_landet_in_sonstiges(): s = zerlege("Vorspann ohne Marker\n\nX\n") assert s["titel"] == "X" assert s["sonstiges"] == "Vorspann ohne Marker" def test_unbekannter_marker_landet_in_sonstiges(): s = zerlege("\nX\n\nGeheim\n") assert s["sonstiges"] == "Geheim" def test_regeln_vor_erster_funktion_gehoeren_zur_karte(): s = zerlege("\n- karte\n\nX\n\n- funktion\n") assert s["regeln"] == "- karte" assert s["funktionen"][0]["regeln"] == "- funktion" def test_testen_ohne_funktion_landet_in_sonstiges(): s = zerlege("\n- verwaist\n") assert s["funktionen"] == [] assert s["sonstiges"] == "- verwaist" def test_doppelter_marker_wird_konkateniert(): s = zerlege("\na\n\nX\n\nb\n") assert s["ziel"] == "a\n\nb" def test_leerer_text(): s = zerlege("") assert s == {"titel": "", "art": "kern", "ziel": "", "regeln": "", "funktionen": [], "sonstiges": ""} def test_art_optional(): assert zerlege("\nOptional\n")["art"] == "optional" def test_art_default_und_unbekannter_wert(): assert zerlege("\nX\n")["art"] == "kern" assert zerlege("\nquatsch\n")["art"] == "kern" def test_marker_mit_leerraum(): s = zerlege("\nX\n") assert s["titel"] == "X" def test_titel_erste_nicht_leere_zeile(): s = zerlege("\n\nErste\nZweite\n") assert s["titel"] == "Erste"