update
This commit is contained in:
57
backend/tests/test_textkit.py
Normal file
57
backend/tests/test_textkit.py
Normal file
@@ -0,0 +1,57 @@
|
||||
"""Titel-Hygiene: klammer-bewusster Split + Dash-Normalisierung (M1.1).
|
||||
|
||||
Reale aak-Schadensfälle: ein en-Dash mit einseitigem Space INNERHALB eines Titels
|
||||
wurde zum Separator → Split mitten im Titel („Aε-Algorithmus (Güte 1+ε, Laufzeit O(n3").
|
||||
"""
|
||||
|
||||
from textkit import _norm_dash, _title, _split_top, _unclosed, _parse_selection
|
||||
|
||||
|
||||
def test_norm_dash_top_level_only():
|
||||
# einseitiger Space am Dash → Separator (Modelle liefern das so)
|
||||
assert _norm_dash("Titel –Beschreibung") == "Titel — Beschreibung"
|
||||
assert _norm_dash("Titel— Beschreibung") == "Titel — Beschreibung"
|
||||
# Dash INNERHALB offener Klammer bleibt unangetastet (kein Separator)
|
||||
assert _norm_dash("f (a – b) — Rest") == "f (a – b) — Rest"
|
||||
# ASCII-Hyphen und geklebte/rangebasierte Dashes sind nie Separatoren
|
||||
assert _norm_dash("3-SAT") == "3-SAT"
|
||||
assert _norm_dash("12–15") == "12–15"
|
||||
|
||||
|
||||
def test_split_top_bracket_aware():
|
||||
assert _split_top("a (b — c) — d", " — ") == "a (b — c)"
|
||||
assert _split_top("a — b", " — ") == "a"
|
||||
assert _split_top("kein Separator hier", " — ") == "kein Separator hier"
|
||||
|
||||
|
||||
def test_unclosed_bracket_detection():
|
||||
assert _unclosed("a (b") is True
|
||||
assert _unclosed("a [b {c") is True
|
||||
assert _unclosed("a (b) c") is False
|
||||
assert _unclosed("a) b") is False # überzähliger Schließer ist kein Abschnitt
|
||||
|
||||
|
||||
def test_title_keeps_bracketed_dash():
|
||||
"""Der Separator innerhalb der Klammer zerschneidet den Titel nicht mehr."""
|
||||
t = _title("Aε-Algorithmus (Güte 1+ε – Laufzeit O(n³)) — der Approx-Algorithmus")
|
||||
assert t == "Aε-Algorithmus (Güte 1+ε – Laufzeit O(n³))"
|
||||
|
||||
|
||||
def test_title_plain_split_unchanged():
|
||||
assert _title("Vertex Cover — minimale Knotenüberdeckung") == "Vertex Cover"
|
||||
assert _title("Ohne Separator bleibt ganz") == "Ohne Separator bleibt ganz"
|
||||
|
||||
|
||||
def test_title_unclosed_bracket_keeps_entry():
|
||||
"""Malformed: offene Klammer nie geschlossen → keinen abgeschnittenen Titel ausgeben,
|
||||
stattdessen den ganzen Eintrag behalten (Repair = Split rückgängig)."""
|
||||
e = "N P via Turingmaschine (Definition 6.19 — Rest"
|
||||
assert _title(e) == e
|
||||
|
||||
|
||||
def test_parse_selection_then_title_regression():
|
||||
"""End-to-end der Parse-Kette (wie in der Pipeline): _norm_dash + _title lassen den
|
||||
Klammer-Inhalt intakt statt mitten im Titel zu splitten (der reale aak-Bug)."""
|
||||
line = "1. Aε-Algorithmus (Güte 1+ε – Laufzeit O(n³)) — der Approximations-Algorithmus"
|
||||
entries = _parse_selection(line)
|
||||
assert _title(entries[1]) == "Aε-Algorithmus (Güte 1+ε – Laufzeit O(n³))"
|
||||
Reference in New Issue
Block a user