|
| 1 | +import pytest # type: ignore[import] |
| 2 | + |
| 3 | +from src.engine.openvino.qwen3_asr.qwen3_asr_utils import ( |
| 4 | + LANGUAGE_CODE_TO_NAME, |
| 5 | + SUPPORTED_LANGUAGES, |
| 6 | + resolve_language_name, |
| 7 | + validate_language, |
| 8 | +) |
| 9 | + |
| 10 | + |
| 11 | +def test_resolve_language_name_maps_iso_639_1_code() -> None: |
| 12 | + assert resolve_language_name("en") == "English" |
| 13 | + assert resolve_language_name("zh") == "Chinese" |
| 14 | + |
| 15 | + |
| 16 | +def test_resolve_language_name_code_is_case_insensitive_and_trimmed() -> None: |
| 17 | + assert resolve_language_name("ZH") == "Chinese" |
| 18 | + assert resolve_language_name(" ja ") == "Japanese" |
| 19 | + |
| 20 | + |
| 21 | +def test_resolve_language_name_passes_through_full_names() -> None: |
| 22 | + assert resolve_language_name("english") == "English" |
| 23 | + assert resolve_language_name("cHINese") == "Chinese" |
| 24 | + |
| 25 | + |
| 26 | +def test_resolve_language_name_handles_non_iso_639_1_special_cases() -> None: |
| 27 | + # Cantonese has no ISO-639-1 code; Filipino accepts both 639-1 (tl) and 639-3 (fil). |
| 28 | + assert resolve_language_name("yue") == "Cantonese" |
| 29 | + assert resolve_language_name("tl") == "Filipino" |
| 30 | + assert resolve_language_name("fil") == "Filipino" |
| 31 | + |
| 32 | + |
| 33 | +@pytest.mark.parametrize("value", [None, "", " "]) |
| 34 | +def test_resolve_language_name_rejects_empty(value) -> None: |
| 35 | + with pytest.raises(ValueError): |
| 36 | + resolve_language_name(value) |
| 37 | + |
| 38 | + |
| 39 | +def test_every_mapped_code_resolves_to_a_supported_language() -> None: |
| 40 | + # Guards against drift if SUPPORTED_LANGUAGES is edited without updating the map. |
| 41 | + for code, name in LANGUAGE_CODE_TO_NAME.items(): |
| 42 | + assert name in SUPPORTED_LANGUAGES, f"{code} -> {name} not in SUPPORTED_LANGUAGES" |
| 43 | + # Resolved canonical names must pass validation. |
| 44 | + validate_language(resolve_language_name(code)) |
0 commit comments