import pytest from lxml import etree from modules.ssml_parser.SSMLParser import ( create_ssml_parser, SSMLSegment, SSMLBreak, SSMLContext, ) @pytest.fixture def parser(): return create_ssml_parser() @pytest.mark.ssml_parser def test_speak_tag(parser): ssml = """ <speak version="0.1"> <voice spk="xiaoyan" style="news"> <prosody rate="fast">你好</prosody> <break time="500ms"/> <prosody rate="slow">你好</prosody> </voice> </speak> """ segments = parser.parse(ssml) assert len(segments) == 3 assert isinstance(segments[0], SSMLSegment) assert segments[0].text == "你好" assert segments[0].params.rate == "fast" assert isinstance(segments[1], SSMLBreak) assert segments[1].duration == 500 assert isinstance(segments[2], SSMLSegment) assert segments[2].text == "你好" assert segments[2].params.rate == "slow" @pytest.mark.ssml_parser def test_voice_tag(parser): ssml = """ <speak version="0.1"> <voice spk="xiaoyan" style="news">你好</voice> </speak> """ segments = parser.parse(ssml) assert len(segments) == 1 assert isinstance(segments[0], SSMLSegment) assert segments[0].text == "你好" assert segments[0].params.spk == "xiaoyan" assert segments[0].params.style == "news" @pytest.mark.ssml_parser def test_break_tag(parser): ssml = """ <speak version="0.1"> <break time="500ms"/> </speak> """ segments = parser.parse(ssml) assert len(segments) == 1 assert isinstance(segments[0], SSMLBreak) assert segments[0].duration == 500 @pytest.mark.ssml_parser def test_prosody_tag(parser): ssml = """ <speak version="0.1"> <prosody rate="fast">你好</prosody> </speak> """ segments = parser.parse(ssml) assert len(segments) == 1 assert isinstance(segments[0], SSMLSegment) assert segments[0].text == "你好" assert segments[0].params.rate == "fast" @pytest.mark.ssml_parser def test_unsupported_version(parser): ssml = """ <speak version="0.2"> <voice spk="xiaoyan" style="news">你好</voice> </speak> """ with pytest.raises(ValueError, match=r"Unsupported SSML version 0.2"): parser.parse(ssml) @pytest.mark.ssml_parser def test_unsupported_tag(parser): ssml = """ <speak version="0.1"> <unsupported>你好</unsupported> </speak> """ with pytest.raises(NotImplementedError, match=r"Tag unsupported not supported."): parser.parse(ssml) if __name__ == "__main__": pytest.main()