[真实流程命令]:完成完整链路自测入口,包含真实Provider CLI、播放验收和文档测试
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
|
||||
from owner_voice_pet.models import AudioFrame, AudioSegment, PlaybackResult, TransportHealth
|
||||
from owner_voice_pet.real_live_check import FixtureLiveAudioTransport
|
||||
|
||||
|
||||
def frame(idx: int) -> AudioFrame:
|
||||
return AudioFrame(b"\x00\x00", 16000, 1, idx * 20, idx, {"duration_ms": 20})
|
||||
|
||||
|
||||
class FakeOutputTransport:
|
||||
def __init__(self) -> None:
|
||||
self.played: list[AudioSegment] = []
|
||||
|
||||
def play_pcm(self, segment: AudioSegment, interrupt: bool = False) -> PlaybackResult:
|
||||
self.played.append(segment)
|
||||
return PlaybackResult(True, segment.duration_ms)
|
||||
|
||||
def health(self) -> TransportHealth:
|
||||
return TransportHealth(True, True, "fake")
|
||||
|
||||
|
||||
class RealLiveCheckTests(unittest.TestCase):
|
||||
def test_fixture_transport_flush_preserves_generated_future_frames(self) -> None:
|
||||
transport = FixtureLiveAudioTransport([frame(1), frame(2)], play_audio=False)
|
||||
transport.start_input()
|
||||
|
||||
self.assertEqual(transport.flush_input(), 0)
|
||||
self.assertEqual(transport.flush_count, 1)
|
||||
self.assertEqual([item.frame_id for item in transport.read_frames(10)], [1])
|
||||
|
||||
def test_fixture_transport_can_delegate_real_playback(self) -> None:
|
||||
output = FakeOutputTransport()
|
||||
transport = FixtureLiveAudioTransport([], play_audio=True, output_transport=output)
|
||||
segment = AudioSegment(b"\x00\x00", 16000, 1, 0, 20)
|
||||
|
||||
result = transport.play_pcm(segment)
|
||||
|
||||
self.assertTrue(result.played)
|
||||
self.assertEqual(output.played, [segment])
|
||||
self.assertEqual(transport.played_segments, [segment])
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user