diff --git a/test/unit/user_dict/test_user_dict_model.py b/test/unit/user_dict/test_user_dict_model.py index b843407c2..5c9b4753a 100644 --- a/test/unit/user_dict/test_user_dict_model.py +++ b/test/unit/user_dict/test_user_dict_model.py @@ -1,3 +1,5 @@ +"""UserDictWord のテスト""" + from typing import TypedDict import pytest @@ -7,7 +9,7 @@ from voicevox_engine.user_dict.model import UserDictWord -class _TestModel(TypedDict): +class UserDictWordInputs(TypedDict): surface: str priority: int part_of_speech: str @@ -24,7 +26,8 @@ class _TestModel(TypedDict): accent_associative_rule: str -def generate_model() -> _TestModel: +def generate_model() -> UserDictWordInputs: + """テスト用に UserDictWord の要素を生成する。""" return { "surface": "テスト", "priority": 0, @@ -44,19 +47,39 @@ def generate_model() -> _TestModel: def test_valid_word() -> None: - test_value = generate_model() - UserDictWord(**test_value) + """generate_model 関数は UserDictWord の要素を生成する。""" + # Outputs + args = generate_model() + + # Test + UserDictWord(**args) def test_convert_to_zenkaku() -> None: + """UserDictWord は surface を全角にする。""" + # Inputs test_value = generate_model() test_value["surface"] = "test" - assert UserDictWord(**test_value).surface == "test" + # Expects + true_surface = "test" + # Outputs + surface = UserDictWord(**test_value).surface + + # Test + assert surface == true_surface def test_count_mora() -> None: + """UserDictWord は mora_count=None を上書きする。""" + # Inputs test_value = generate_model() - assert UserDictWord(**test_value).mora_count == 3 + # Expects + true_mora_count = 3 + # Outputs + mora_count = UserDictWord(**test_value).mora_count + + # Test + assert mora_count == true_mora_count def test_count_mora_x() -> None: @@ -75,52 +98,87 @@ def test_count_mora_x() -> None: def test_count_mora_xwa() -> None: + """「ヮ」を含む発音のモーラ数が適切にカウントされる。""" + # Inputs test_value = generate_model() test_value["pronunciation"] = "クヮンセイ" - expected_count = 0 + # Expects + true_mora_count = 0 for accent_phrase in parse_kana( test_value["pronunciation"] + "'", ): - expected_count += len(accent_phrase.moras) - assert UserDictWord(**test_value).mora_count == expected_count + true_mora_count += len(accent_phrase.moras) + # Outputs + mora_rount = UserDictWord(**test_value).mora_count + + # Test + assert mora_rount == true_mora_count def test_invalid_pronunciation_not_katakana() -> None: + """UserDictWord はカタカナでない pronunciation をエラーとする。""" + # Inputs test_value = generate_model() test_value["pronunciation"] = "ぼいぼ" + + # Test with pytest.raises(ValidationError): UserDictWord(**test_value) def test_invalid_pronunciation_invalid_sutegana() -> None: + """UserDictWord は無効な pronunciation をエラーとする。""" + # Inputs test_value = generate_model() test_value["pronunciation"] = "アィウェォ" + + # Test with pytest.raises(ValidationError): UserDictWord(**test_value) def test_invalid_pronunciation_invalid_xwa() -> None: + """UserDictWord は無効な pronunciation をエラーとする。""" + # Inputs test_value = generate_model() test_value["pronunciation"] = "アヮ" + + # Test with pytest.raises(ValidationError): UserDictWord(**test_value) def test_count_mora_voiced_sound() -> None: + """UserDictWord はモーラ数を正しくカウントして上書きする。""" + # Inputs test_value = generate_model() test_value["pronunciation"] = "ボイボ" - assert UserDictWord(**test_value).mora_count == 3 + # Expects + true_mora_count = 3 + # Outputs + mora_count = UserDictWord(**test_value).mora_count + # Test + assert mora_count == true_mora_count -def test_invalid_accent_type() -> None: + +def test_word_accent_type_too_big() -> None: + """UserDictWord はモーラ数を超えた accent_type をエラーとする。""" + # Inputs test_value = generate_model() test_value["accent_type"] = 4 + + # Test with pytest.raises(ValidationError): UserDictWord(**test_value) -def test_invalid_accent_type_2() -> None: +def test_word_accent_type_negative() -> None: + """UserDictWord は負の accent_type をエラーとする。""" + # Inputs test_value = generate_model() test_value["accent_type"] = -1 + + # Test with pytest.raises(ValidationError): UserDictWord(**test_value)