mirror of
https://github.com/unshackle-dl/unshackle.git
synced 2026-06-10 03:02:09 +00:00
Missing requested subtitle and audio languages now warn and continue when --best-available is set instead of hard-exiting. Without the flag, missing languages still produce an error and exit, matching the prior strict behavior. Audio missing-lang detection is now symmetric with subtitles. - add find_missing_langs helper in core/utilities for reuse between s_lang and a_lang paths (skips all/best/orig sentinels) - refactor dl.py s_lang/a_lang checks to share the helper - add tests/lang_selection covering match primitives, helper output, and tricky langcodes corners (zh-Hans/zh-Hant/zh-CN/zh-TW/zh-HK, cmn/yue, fil/tl/tgl) - clean up unused-var ruff F841 in tests/remote/unit/
79 lines
2.3 KiB
Python
79 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from unshackle.core.utilities import is_close_match, is_exact_match
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"needle,haystack,expected",
|
|
[
|
|
("en", ["en"], True),
|
|
("fr", ["en", "de"], False),
|
|
("es", ["es-419"], True),
|
|
("es", ["es-ES"], True),
|
|
("es-419", ["es"], True),
|
|
("en", ["en-US"], True),
|
|
("en-US", ["en-GB"], True),
|
|
("EN", ["en"], True),
|
|
("en", ["EN"], True),
|
|
("ja", ["ko"], False),
|
|
("fil", ["en", "fr", "de"], False),
|
|
("en", [], False),
|
|
("en", [None, "en"], True),
|
|
("en", [None], False),
|
|
("zh", ["zh-Hans"], True),
|
|
("zh-CN", ["zh-Hans"], True),
|
|
("zh-Hans", ["zh-CN"], True),
|
|
("zh-TW", ["zh-Hant"], True),
|
|
("zh-Hant", ["zh-TW"], True),
|
|
("zh", ["zh-Hant"], False),
|
|
("zh-Hans", ["zh-Hant"], False),
|
|
("zh-CN", ["zh-TW"], False),
|
|
("zh-HK", ["zh-Hant"], True),
|
|
("zh", ["cmn"], True),
|
|
("cmn", ["zh"], True),
|
|
("zh", ["yue"], False),
|
|
("yue", ["zh-HK"], False),
|
|
("fil", ["tl"], True),
|
|
("tl", ["fil"], True),
|
|
("fil", ["tgl"], True),
|
|
("tgl", ["fil"], True),
|
|
("fil", ["fil-PH"], True),
|
|
("tl", ["fil-PH"], True),
|
|
],
|
|
)
|
|
def test_is_close_match(needle, haystack, expected):
|
|
assert is_close_match(needle, haystack) is expected
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"needle,haystack,expected",
|
|
[
|
|
("es", ["es-419"], False),
|
|
("es-419", ["es"], False),
|
|
("es-419", ["es-419"], True),
|
|
("en-US", ["en-GB"], False),
|
|
("en-US", ["en-US"], True),
|
|
("en", ["en"], True),
|
|
("EN", ["en"], True),
|
|
("fr", ["de"], False),
|
|
("fil", ["en"], False),
|
|
("en", [], False),
|
|
("zh", ["zh-Hans"], True),
|
|
("zh-CN", ["zh-Hans"], True),
|
|
("zh-TW", ["zh-Hant"], True),
|
|
("zh", ["cmn"], True),
|
|
("zh-HK", ["zh-Hant"], False),
|
|
("zh-Hans", ["zh-Hant"], False),
|
|
("zh-CN", ["zh-TW"], False),
|
|
("fil", ["tl"], True),
|
|
("tl", ["fil"], True),
|
|
("fil", ["tgl"], True),
|
|
("fil", ["fil-PH"], True),
|
|
("tl", ["fil-PH"], True),
|
|
],
|
|
)
|
|
def test_is_exact_match(needle, haystack, expected):
|
|
assert is_exact_match(needle, haystack) is expected
|