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