Spaces:
Running
Running
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) | |