fix(test): use real _strip_markdown_for_tts instead of duplicated copy

- Import from tools.tts_tool instead of reimplementing the logic
- Fix test_truncates_long_text: truncation is the caller's job, not the function's
- Remove unused re import
This commit is contained in:
0xbyt4 2026-03-11 23:25:27 +03:00
parent 86ddaaee9c
commit 34c324ff59

View file

@ -4,7 +4,6 @@ state management, streaming TTS activation, voice message prefix, _vprint."""
import ast import ast
import os import os
import queue import queue
import re
import threading import threading
from types import SimpleNamespace from types import SimpleNamespace
from unittest.mock import MagicMock, patch from unittest.mock import MagicMock, patch
@ -40,23 +39,10 @@ def _make_voice_cli(**overrides):
# ============================================================================ # ============================================================================
# Markdown stripping (same logic as _voice_speak_response) # Markdown stripping — import real function from tts_tool
# ============================================================================ # ============================================================================
def _strip_markdown_for_tts(text: str) -> str: from tools.tts_tool import _strip_markdown_for_tts
"""Replicate the markdown stripping logic from cli._voice_speak_response."""
tts_text = text[:4000] if len(text) > 4000 else text
tts_text = re.sub(r'```[\s\S]*?```', ' ', tts_text) # fenced code blocks
tts_text = re.sub(r'\[([^\]]+)\]\([^)]+\)', r'\1', tts_text) # [text](url) -> text
tts_text = re.sub(r'https?://\S+', '', tts_text) # URLs
tts_text = re.sub(r'\*\*(.+?)\*\*', r'\1', tts_text) # bold
tts_text = re.sub(r'\*(.+?)\*', r'\1', tts_text) # italic
tts_text = re.sub(r'`(.+?)`', r'\1', tts_text) # inline code
tts_text = re.sub(r'^#+\s*', '', tts_text, flags=re.MULTILINE) # headers
tts_text = re.sub(r'^\s*[-*]\s+', '', tts_text, flags=re.MULTILINE) # list items
tts_text = re.sub(r'---+', '', tts_text) # horizontal rules
tts_text = re.sub(r'\n{3,}', '\n\n', tts_text) # excessive newlines
return tts_text.strip()
class TestMarkdownStripping: class TestMarkdownStripping:
@ -110,10 +96,11 @@ class TestMarkdownStripping:
result = _strip_markdown_for_tts(text) result = _strip_markdown_for_tts(text)
assert result == "" assert result == ""
def test_truncates_long_text(self): def test_long_text_not_truncated(self):
"""_strip_markdown_for_tts does NOT truncate — that's the caller's job."""
text = "a" * 5000 text = "a" * 5000
result = _strip_markdown_for_tts(text) result = _strip_markdown_for_tts(text)
assert len(result) <= 4000 assert len(result) == 5000
def test_complex_response(self): def test_complex_response(self):
text = ( text = (