from __future__ import annotations import unittest from moss_transcribe_diarize.transcript_parser import ( TranscriptSegment, TranscriptStreamParser, iter_transcript_segments, parse_transcript, ) class TranscriptParserTest(unittest.TestCase): def test_parse_compact_transcript(self): text = "[0.48][S01]Welcome[1.66][12.26][S02]Ready[13.81]" self.assertEqual( parse_transcript(text), [ TranscriptSegment(0.48, 1.66, "S01", "Welcome"), TranscriptSegment(12.26, 13.81, "S02", "Ready"), ], ) def test_streaming_with_single_character_chunks(self): text = "[0.48][S01]你好[1.66][12.26][S02]可以开始[13.81]" parser = TranscriptStreamParser() segments = [] for ch in text: segments.extend(parser.feed(ch)) segments.extend(parser.close()) self.assertEqual( segments, [ TranscriptSegment(0.48, 1.66, "S01", "你好"), TranscriptSegment(12.26, 13.81, "S02", "可以开始"), ], ) def test_iter_transcript_segments_accepts_arbitrary_chunks(self): chunks = ["[0", ".48][", "S01]", "hello[", "1.66]", "[2.0][S02]", "bye", "[3.0]"] self.assertEqual( list(iter_transcript_segments(chunks)), [ TranscriptSegment(0.48, 1.66, "S01", "hello"), TranscriptSegment(2.0, 3.0, "S02", "bye"), ], ) def test_numeric_brackets_inside_text_are_preserved(self): text = "[0][S01]第[2024]年,编号[001]继续[4]" self.assertEqual( parse_transcript(text), [TranscriptSegment(0.0, 4.0, "S01", "第[2024]年,编号[001]继续")], ) def test_noise_before_first_segment_is_ignored(self): text = "noise [bad][0.1][S01]hello[0.9]" self.assertEqual( parse_transcript(text), [TranscriptSegment(0.1, 0.9, "S01", "hello")], ) def test_whitespace_between_segments_is_ignored(self): text = "[0][S01]a[1]\n [2][S02]b[3]" self.assertEqual( parse_transcript(text), [ TranscriptSegment(0.0, 1.0, "S01", "a"), TranscriptSegment(2.0, 3.0, "S02", "b"), ], ) if __name__ == "__main__": unittest.main()