Skip to content

Commit

Permalink
テストをコピペで実装
Browse files Browse the repository at this point in the history
  • Loading branch information
qryxip committed Dec 8, 2023
1 parent 16b8428 commit 9c99edc
Show file tree
Hide file tree
Showing 6 changed files with 183 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# ユーザー辞書の単語が反映されるかをテストする。
"""
ユーザー辞書の単語が反映されるかをテストする。
``test_pseudo_raii_for_blocking_synthesizer`` と対になる。
"""

# AudioQueryのkanaを比較して変化するかどうかで判断する。

from uuid import UUID
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,9 @@
# ユーザー辞書の操作をテストする。
"""
ユーザー辞書の操作をテストする。
``test_blocking_user_dict_manipulate`` と対になる。
"""

# どのコードがどの操作を行っているかはコメントを参照。

import os
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
"""
ユーザー辞書の単語が反映されるかをテストする。
``test_pseudo_raii_for_asyncio_synthesizer`` と対になる。
"""

# AudioQueryのkanaを比較して変化するかどうかで判断する。

from uuid import UUID

import conftest
import voicevox_core


def test_user_dict_load() -> None:
open_jtalk = voicevox_core.blocking.OpenJtalk(conftest.open_jtalk_dic_dir)
model = voicevox_core.blocking.VoiceModel.from_path(conftest.model_dir)
synthesizer = voicevox_core.blocking.Synthesizer(open_jtalk)

synthesizer.load_voice_model(model)

audio_query_without_dict = synthesizer.audio_query(
"this_word_should_not_exist_in_default_dictionary", style_id=0
)

temp_dict = voicevox_core.blocking.UserDict()
uuid = temp_dict.add_word(
voicevox_core.UserDictWord(
surface="this_word_should_not_exist_in_default_dictionary",
pronunciation="アイウエオ",
)
)
assert isinstance(uuid, UUID)

open_jtalk.use_user_dict(temp_dict)

audio_query_with_dict = synthesizer.audio_query(
"this_word_should_not_exist_in_default_dictionary", style_id=0
)
assert audio_query_without_dict != audio_query_with_dict
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
"""
ユーザー辞書の操作をテストする。
``test_asyncio_user_dict_manipulate`` と対になる。
"""

# どのコードがどの操作を行っているかはコメントを参照。

import os
import tempfile
from uuid import UUID

import pydantic
import pytest
import voicevox_core


def test_user_dict_load() -> None:
dict_a = voicevox_core.blocking.UserDict()

# 単語の追加
uuid_a = dict_a.add_word(
voicevox_core.UserDictWord(
surface="hoge",
pronunciation="ホゲ",
)
)
assert isinstance(uuid_a, UUID)
assert dict_a.words[uuid_a].surface == "hoge"
assert dict_a.words[uuid_a].pronunciation == "ホゲ"

# 単語の更新
dict_a.update_word(
uuid_a,
voicevox_core.UserDictWord(
surface="fuga",
pronunciation="フガ",
),
)

assert dict_a.words[uuid_a].surface == "fuga"
assert dict_a.words[uuid_a].pronunciation == "フガ"

# ユーザー辞書のインポート
dict_b = voicevox_core.blocking.UserDict()
uuid_b = dict_b.add_word(
voicevox_core.UserDictWord(
surface="foo",
pronunciation="フー",
)
)

dict_a.import_dict(dict_b)
assert uuid_b in dict_a.words

# ユーザー辞書のエクスポート
dict_c = voicevox_core.blocking.UserDict()
uuid_c = dict_c.add_word(
voicevox_core.UserDictWord(
surface="bar",
pronunciation="バー",
)
)
temp_path_fd, temp_path = tempfile.mkstemp()
os.close(temp_path_fd)
dict_c.save(temp_path)
dict_a.load(temp_path)
assert uuid_a in dict_a.words
assert uuid_c in dict_a.words

# 単語の削除
dict_a.remove_word(uuid_a)
assert uuid_a not in dict_a.words
assert uuid_c in dict_a.words

# 単語のバリデーション
with pytest.raises(pydantic.ValidationError):
dict_a.add_word(
voicevox_core.UserDictWord(
surface="",
pronunciation="カタカナ以外の文字",
)
)
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
"""
``Synthesizer`` について、(広義の)RAIIができることをテストする。
``test_pseudo_raii_for_blocking_synthesizer`` と対になる。
"""

import conftest
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"""
``Synthesizer`` について、(広義の)RAIIができることをテストする。
``test_pseudo_raii_for_asyncio_synthesizer`` と対になる。
"""

import conftest
import pytest
from voicevox_core.blocking import OpenJtalk, Synthesizer


def test_enter_returns_workable_self(synthesizer: Synthesizer) -> None:
with synthesizer as ctx:
assert ctx is synthesizer
_ = synthesizer.metas


def test_closing_multiple_times_is_allowed(synthesizer: Synthesizer) -> None:
with synthesizer:
with synthesizer:
pass
synthesizer.close()
synthesizer.close()


def test_access_after_close_denied(synthesizer: Synthesizer) -> None:
synthesizer.close()
with pytest.raises(ValueError, match="^The `Synthesizer` is closed$"):
_ = synthesizer.metas


def test_access_after_exit_denied(synthesizer: Synthesizer) -> None:
with synthesizer:
pass
with pytest.raises(ValueError, match="^The `Synthesizer` is closed$"):
_ = synthesizer.metas


@pytest.fixture
def synthesizer(open_jtalk: OpenJtalk) -> Synthesizer:
return Synthesizer(open_jtalk)


@pytest.fixture(scope="session")
def open_jtalk() -> OpenJtalk:
return OpenJtalk(conftest.open_jtalk_dic_dir)

0 comments on commit 9c99edc

Please sign in to comment.