voicevox / test /test_user_dict_model.py
2ndelement's picture
init
f1f433f
from copy import deepcopy
from unittest import TestCase
from pydantic import ValidationError
from voicevox_engine.kana_parser import parse_kana
from voicevox_engine.model import UserDictWord
class TestUserDictWords(TestCase):
def setUp(self):
self.test_model = {
"surface": "テスト",
"priority": 0,
"part_of_speech": "名詞",
"part_of_speech_detail_1": "固有名詞",
"part_of_speech_detail_2": "一般",
"part_of_speech_detail_3": "*",
"inflectional_type": "*",
"inflectional_form": "*",
"stem": "*",
"yomi": "テスト",
"pronunciation": "テスト",
"accent_type": 0,
"accent_associative_rule": "*",
}
def test_valid_word(self):
test_value = deepcopy(self.test_model)
try:
UserDictWord(**test_value)
except ValidationError as e:
self.fail(f"Unexpected Validation Error\n{str(e)}")
def test_convert_to_zenkaku(self):
test_value = deepcopy(self.test_model)
test_value["surface"] = "test"
self.assertEqual(UserDictWord(**test_value).surface, "test")
def test_count_mora(self):
test_value = deepcopy(self.test_model)
self.assertEqual(UserDictWord(**test_value).mora_count, 3)
def test_count_mora_x(self):
test_value = deepcopy(self.test_model)
for s in [chr(i) for i in range(12449, 12533)]:
if s in ["ァ", "ィ", "ゥ", "ェ", "ォ", "ッ", "ャ", "ュ", "ョ", "ヮ"]:
continue
for x in "ァィゥェォャュョ":
expected_count = 0
test_value["pronunciation"] = s + x
for accent_phrase in parse_kana(
test_value["pronunciation"] + "'",
):
expected_count += len(accent_phrase.moras)
with self.subTest(s=s, x=x):
self.assertEqual(
UserDictWord(**test_value).mora_count,
expected_count,
)
def test_count_mora_xwa(self):
test_value = deepcopy(self.test_model)
test_value["pronunciation"] = "クヮンセイ"
expected_count = 0
for accent_phrase in parse_kana(
test_value["pronunciation"] + "'",
):
expected_count += len(accent_phrase.moras)
self.assertEqual(
UserDictWord(**test_value).mora_count,
expected_count,
)
def test_invalid_pronunciation_not_katakana(self):
test_value = deepcopy(self.test_model)
test_value["pronunciation"] = "ぼいぼ"
with self.assertRaises(ValidationError):
UserDictWord(**test_value)
def test_invalid_pronunciation_invalid_sutegana(self):
test_value = deepcopy(self.test_model)
test_value["pronunciation"] = "アィウェォ"
with self.assertRaises(ValidationError):
UserDictWord(**test_value)
def test_invalid_pronunciation_invalid_xwa(self):
test_value = deepcopy(self.test_model)
test_value["pronunciation"] = "アヮ"
with self.assertRaises(ValidationError):
UserDictWord(**test_value)
def test_count_mora_voiced_sound(self):
test_value = deepcopy(self.test_model)
test_value["pronunciation"] = "ボイボ"
self.assertEqual(UserDictWord(**test_value).mora_count, 3)
def test_invalid_accent_type(self):
test_value = deepcopy(self.test_model)
test_value["accent_type"] = 4
with self.assertRaises(ValidationError):
UserDictWord(**test_value)
def test_invalid_accent_type_2(self):
test_value = deepcopy(self.test_model)
test_value["accent_type"] = -1
with self.assertRaises(ValidationError):
UserDictWord(**test_value)