Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

整理: metas テストを pytest 化 #1271

Merged
merged 1 commit into from
May 23, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
145 changes: 69 additions & 76 deletions test/test_metas_store.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import uuid
from unittest import TestCase

from voicevox_engine.metas.Metas import Speaker, SpeakerStyle, StyleId, StyleType
from voicevox_engine.metas.MetasStore import filter_speakers_and_styles
Expand Down Expand Up @@ -29,79 +28,73 @@ def _equal_speakers(a: list[Speaker], b: list[Speaker]) -> bool:
return True


class TestMetasStore(TestCase):
def test_filter_speakers_and_styles_with_speaker(self) -> None:
# Inputs
speaker_talk_only = _gen_speaker(["talk"])
speaker_singing_teacher_only = _gen_speaker(["singing_teacher"])
speaker_frame_decode_only = _gen_speaker(["frame_decode"])
speaker_sing_only = _gen_speaker(["sing"])
speaker_allstyle = _gen_speaker(
["talk", "singing_teacher", "frame_decode", "sing"]
)

# Outputs
result = filter_speakers_and_styles(
[
speaker_talk_only,
speaker_singing_teacher_only,
speaker_frame_decode_only,
speaker_sing_only,
speaker_allstyle,
],
"speaker",
)

# Tests
self.assertEqual(len(result), 2)

# 話者だけになっている
self.assertTrue(_equal_speakers(result, [speaker_talk_only, speaker_allstyle]))

# スタイルがフィルタリングされている
for speaker in result:
for style in speaker.styles:
self.assertEqual(style.type, "talk")

def test_filter_speakers_and_styles_with_singer(self) -> None:
# Inputs
speaker_talk_only = _gen_speaker(["talk"])
speaker_singing_teacher_only = _gen_speaker(["singing_teacher"])
speaker_frame_decode_only = _gen_speaker(["frame_decode"])
speaker_sing_only = _gen_speaker(["sing"])
speaker_allstyle = _gen_speaker(
["talk", "singing_teacher", "frame_decode", "sing"]
)

# Outputs
result = filter_speakers_and_styles(
[
speaker_talk_only,
speaker_singing_teacher_only,
speaker_frame_decode_only,
speaker_sing_only,
speaker_allstyle,
],
"singer",
)

# Tests
self.assertEqual(len(result), 4)

# 歌手だけになっている
self.assertTrue(
_equal_speakers(
result,
[
speaker_singing_teacher_only,
speaker_frame_decode_only,
speaker_sing_only,
speaker_allstyle,
],
)
)
def test_filter_speakers_and_styles_with_speaker() -> None:
# Inputs
speaker_talk_only = _gen_speaker(["talk"])
speaker_singing_teacher_only = _gen_speaker(["singing_teacher"])
speaker_frame_decode_only = _gen_speaker(["frame_decode"])
speaker_sing_only = _gen_speaker(["sing"])
speaker_allstyle = _gen_speaker(["talk", "singing_teacher", "frame_decode", "sing"])

# Outputs
result = filter_speakers_and_styles(
[
speaker_talk_only,
speaker_singing_teacher_only,
speaker_frame_decode_only,
speaker_sing_only,
speaker_allstyle,
],
"speaker",
)

# Tests
assert len(result) == 2

# 話者だけになっている
assert _equal_speakers(result, [speaker_talk_only, speaker_allstyle])

# スタイルがフィルタリングされている
for speaker in result:
for style in speaker.styles:
assert style.type == "talk"


def test_filter_speakers_and_styles_with_singer() -> None:
# Inputs
speaker_talk_only = _gen_speaker(["talk"])
speaker_singing_teacher_only = _gen_speaker(["singing_teacher"])
speaker_frame_decode_only = _gen_speaker(["frame_decode"])
speaker_sing_only = _gen_speaker(["sing"])
speaker_allstyle = _gen_speaker(["talk", "singing_teacher", "frame_decode", "sing"])

# Outputs
result = filter_speakers_and_styles(
[
speaker_talk_only,
speaker_singing_teacher_only,
speaker_frame_decode_only,
speaker_sing_only,
speaker_allstyle,
],
"singer",
)

# Tests
assert len(result) == 4

# 歌手だけになっている
assert _equal_speakers(
result,
[
speaker_singing_teacher_only,
speaker_frame_decode_only,
speaker_sing_only,
speaker_allstyle,
],
)

# スタイルがフィルタリングされている
for speaker in result:
for style in speaker.styles:
self.assertIn(style.type, ["singing_teacher", "frame_decode", "sing"])
# スタイルがフィルタリングされている
for speaker in result:
for style in speaker.styles:
assert style.type in ["singing_teacher", "frame_decode", "sing"]