| import pytest |
|
|
| from server.dialog import DialogParseError, DialogTurn, parse_dialog |
|
|
|
|
| def test_simple_a_b_alternation(): |
| text = "SPEAKER A: hi\nSPEAKER B: hello" |
| turns = parse_dialog(text) |
| assert turns == [ |
| DialogTurn(speaker="A", text="hi"), |
| DialogTurn(speaker="B", text="hello"), |
| ] |
|
|
|
|
| def test_multi_line_turn(): |
| text = "SPEAKER A: line one\nstill A\nSPEAKER B: end." |
| turns = parse_dialog(text) |
| assert turns[0].speaker == "A" |
| assert turns[0].text == "line one\nstill A" |
| assert turns[1].speaker == "B" |
| assert turns[1].text == "end." |
|
|
|
|
| def test_leading_whitespace_tolerated(): |
| text = " SPEAKER A: hi\n SPEAKER B: hello" |
| turns = parse_dialog(text) |
| assert [t.speaker for t in turns] == ["A", "B"] |
|
|
|
|
| def test_missing_prefix_raises(): |
| with pytest.raises(DialogParseError): |
| parse_dialog("plain text with no speakers") |
|
|
|
|
| def test_unknown_letter_is_ignored_so_no_match_raises(): |
| |
| with pytest.raises(DialogParseError): |
| parse_dialog("SPEAKER E: nope") |
|
|
|
|
| def test_three_consecutive_a_turns(): |
| text = "SPEAKER A: one\nSPEAKER A: two\nSPEAKER A: three" |
| turns = parse_dialog(text) |
| assert [t.text for t in turns] == ["one", "two", "three"] |
|
|
|
|
| def test_empty_turn_is_dropped(): |
| text = "SPEAKER A: hi\nSPEAKER B:\nSPEAKER C: bye" |
| turns = parse_dialog(text) |
| assert [t.speaker for t in turns] == ["A", "C"] |
|
|