study-buddy / tests /test_tts_text.py
GitHub Actions
deploy d092bea3608b7a29952f16357fda39b7a29e399b
2e818da
Raw
History Blame Contribute Delete
1.87 kB
from app.services import tts_text
from app.services.tts_text import StableSentenceStream, normalize_for_speech
def test_sentence_stream_waits_for_stable_boundary_across_tokens():
stream = StableSentenceStream()
assert stream.feed("The first sen") == []
assert stream.feed("tence is ready. The second") == ["The first sentence is ready."]
assert stream.finish() == ["The second"]
def test_sentence_stream_does_not_emit_fenced_code_or_table_rows():
stream = StableSentenceStream()
markdown = (
"Read this sentence.\n\n"
"```python\nprint('Do not read me.')\n```\n\n"
"| Model | Score |\n| --- | --- |\n| A | 1.0 |\n\n"
"Read the final sentence."
)
sentences = stream.feed(markdown) + stream.finish()
assert sentences == ["Read this sentence.", "Read the final sentence."]
def test_normalization_reads_prose_and_removes_markup_urls_and_citations():
text = (
"## Result\n"
"See **the main finding** at https://example.com/a and [the appendix](https://example.com/b). "
"It is grounded [Source: chunk 4] [12]."
)
assert normalize_for_speech(text) == (
"Result See the main finding at and the appendix. It is grounded."
)
def test_normalization_skips_tables_and_code_without_summarizing_them():
text = (
"Before.\n\n"
"```python\nprint('hidden')\n```\n\n"
"| A | B |\n| - | - |\n| 1 | 2 |\n\n"
"- After."
)
assert normalize_for_speech(text) == "Before. After."
def test_synthesis_notation_verbalizes_numbers_percentages_and_scientific_symbols():
assert tts_text.normalize_synthesis_notation(
"The value is 3.5%, the result is 42, x² + 2, and H₂O."
) == (
"The value is three point five percent, the result is forty-two, "
"x squared plus two, and H two O."
)