82 lines
2.8 KiB
Python
82 lines
2.8 KiB
Python
import ast
|
|
from pathlib import Path
|
|
from types import SimpleNamespace
|
|
from typing import Callable, cast
|
|
|
|
import pytest
|
|
|
|
|
|
def _load_strip_keyword_function():
|
|
module_path = Path(__file__).resolve().parent / "__init__.py"
|
|
source = module_path.read_text(encoding="utf-8")
|
|
tree = ast.parse(source, filename=str(module_path))
|
|
|
|
function_node = next(
|
|
node
|
|
for node in tree.body
|
|
if isinstance(node, ast.FunctionDef) and node.name == "strip_keyword_from_disambiguation"
|
|
)
|
|
|
|
isolated_module = ast.Module(
|
|
body=[
|
|
ast.Import(names=[ast.alias(name="re")]),
|
|
function_node,
|
|
],
|
|
type_ignores=[],
|
|
)
|
|
ast.fix_missing_locations(isolated_module)
|
|
|
|
namespace: dict[str, object] = {
|
|
"log": SimpleNamespace(debug=lambda *args, **kwargs: None),
|
|
}
|
|
exec(compile(isolated_module, str(module_path), "exec"), namespace)
|
|
return cast(Callable[[str, str], str], namespace["strip_keyword_from_disambiguation"])
|
|
|
|
|
|
strip_keyword_from_disambiguation = _load_strip_keyword_function()
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"disambiguation, keyword, expected",
|
|
[
|
|
("explicit", "explicit", ""),
|
|
("original mix, explicit", "explicit", "original mix"),
|
|
("original mix explicit", "explicit", "original mix"),
|
|
("explicit, original mix", "explicit", "original mix"),
|
|
("explicit album version", "explicit", "album version"),
|
|
("explicit - original mix", "explicit", "original mix"),
|
|
("original mix,explicit", "explicit", "original mix"),
|
|
("original mix - explicit", "explicit", "original mix"),
|
|
("original mix (explicit)", "explicit", "original mix"),
|
|
("original mix ( explicit )", "explicit", "original mix"),
|
|
("original explicit mix", "explicit", "original mix"),
|
|
("album version, explicit, remix", "explicit", "album version, remix"),
|
|
("album version - explicit - remix", "explicit", "album version - remix"),
|
|
("album version | explicit | remix", "explicit", "album version | remix"),
|
|
],
|
|
)
|
|
def test_strip_keyword_supported_patterns(disambiguation, keyword, expected):
|
|
assert strip_keyword_from_disambiguation(disambiguation, keyword) == expected
|
|
|
|
|
|
def test_strip_keyword_is_case_insensitive():
|
|
result = strip_keyword_from_disambiguation("Original Mix, EXPLICIT", "explicit")
|
|
assert result == "Original Mix"
|
|
|
|
|
|
def test_strip_keyword_returns_original_when_not_found():
|
|
original = "original mix, clean"
|
|
assert strip_keyword_from_disambiguation(original, "explicit") == original
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"disambiguation, keyword",
|
|
[
|
|
("", "explicit"),
|
|
("original mix", ""),
|
|
("", ""),
|
|
],
|
|
)
|
|
def test_strip_keyword_handles_empty_inputs(disambiguation, keyword):
|
|
assert strip_keyword_from_disambiguation(disambiguation, keyword) == disambiguation
|