35 lines
1.7 KiB
Python
35 lines
1.7 KiB
Python
"""Focused attribution parser regressions."""
|
||
from __future__ import annotations
|
||
|
||
import os
|
||
import tempfile
|
||
import unittest
|
||
|
||
os.environ.setdefault("CONFIG_DIR", tempfile.mkdtemp(prefix="ttvc-conversation-test-config-"))
|
||
|
||
from routes.conversation import _attribution_parse, _fallback_attribute_response
|
||
|
||
|
||
class AttributionParserTests(unittest.TestCase):
|
||
def test_fallback_accepts_mixed_guillemets(self):
|
||
result = _fallback_attribute_response("Intro. »Ein langer Satz endet hier.‹ Danach.")
|
||
self.assertEqual([segment["type"] for segment in result["segments"]], ["narration", "dialogue", "narration"])
|
||
self.assertIn("Ein langer Satz endet hier.", result["segments"][1]["text"])
|
||
|
||
def test_repairs_epigraph_split_before_mixed_guillemet_close(self):
|
||
raw = '{"segments":[' \
|
||
'{"speaker":"Schwester Larissa","type":"dialogue","text":"»Von dem Windhager Felsgesteyn bis zur Kueste von Mendena ziehet es sich hin, von Ifirns Eisgebirg bis zu dem dampfenden Waldt der Mohas, und"},' \
|
||
'{"speaker":"Narrator","type":"narration","text":"fürwahr, es ist ein seltsam Land. Lieblich bisweilen, mild und voll der guten Menschen. ‹ Zitiert aus dem Buch."}' \
|
||
']}'
|
||
result = _attribution_parse(raw, "unused")
|
||
self.assertEqual(len(result["segments"]), 2)
|
||
dialogue, narration = result["segments"]
|
||
self.assertEqual(dialogue["speaker"], "Schwester Larissa")
|
||
self.assertEqual(dialogue["type"], "dialogue")
|
||
self.assertTrue(dialogue["text"].endswith("Land. Lieblich bisweilen, mild und voll der guten Menschen. ‹"))
|
||
self.assertEqual(narration["text"], "Zitiert aus dem Buch.")
|
||
|
||
|
||
if __name__ == "__main__":
|
||
unittest.main()
|