| | 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() |
| |
|