Add tests - part 1
Some checks failed
CI / test (3.10) (push) Failing after 16s
CI / test (3.11) (push) Failing after 15s
CI / lint (push) Has been cancelled
CI / build (push) Has been cancelled
CI / test (3.12) (push) Has been cancelled

This commit is contained in:
2026-02-02 17:23:54 +00:00
parent 0714f5eaa9
commit 7370ee901c

139
tests/test_detectors.py Normal file
View File

@@ -0,0 +1,139 @@
"""Tests for detectors."""
from i18n_guardian.detectors.base import get_default_registry
class TestReactIntlDetector:
"""Tests for React Intl detector."""
def test_detect_react_intl_in_package_json(self, temp_dir):
"""Test detection of react-intl in package.json."""
package_json = temp_dir / "package.json"
package_json.write_text('{"dependencies": {"react-intl": "^5.0.0"}}', encoding="utf-8")
registry = get_default_registry()
detector = registry.get("react-intl")
assert detector is not None
assert detector.detect(temp_dir) == "react-intl"
def test_detect_react_intl_in_imports(self, temp_dir):
"""Test detection of react-intl in source imports."""
js_file = temp_dir / "App.js"
js_file.write_text("import { defineMessages } from 'react-intl'", encoding="utf-8")
registry = get_default_registry()
detector = registry.get("react-intl")
assert detector is not None
assert detector.detect(temp_dir) == "react-intl"
def test_get_react_intl_functions(self, temp_dir):
"""Test getting react-intl function names."""
registry = get_default_registry()
detector = registry.get("react-intl")
assert detector is not None
functions = detector.get_i18n_functions()
assert "formatMessage" in functions
assert "defineMessages" in functions
class TestI18NextDetector:
"""Tests for i18next detector."""
def test_detect_i18next_in_package_json(self, temp_dir):
"""Test detection of i18next in package.json."""
package_json = temp_dir / "package.json"
package_json.write_text('{"dependencies": {"i18next": "^21.0.0"}}', encoding="utf-8")
registry = get_default_registry()
detector = registry.get("i18next")
assert detector is not None
assert detector.detect(temp_dir) == "i18next"
def test_detect_i18next_in_locales(self, temp_dir):
"""Test detection of i18next via locale files."""
locales_dir = temp_dir / "locales"
locales_dir.mkdir()
en_json = locales_dir / "en.json"
en_json.write_text('{"greeting": "Hello"}', encoding="utf-8")
registry = get_default_registry()
detector = registry.get("i18next")
assert detector is not None
result = detector.detect(temp_dir)
assert result == "i18next"
class TestVueI18nDetector:
"""Tests for Vue I18n detector."""
def test_detect_vue_i18n_in_package_json(self, temp_dir):
"""Test detection of vue-i18n in package.json."""
package_json = temp_dir / "package.json"
package_json.write_text('{"dependencies": {"vue-i18n": "^8.0.0"}}', encoding="utf-8")
registry = get_default_registry()
detector = registry.get("vue-i18n")
assert detector is not None
assert detector.detect(temp_dir) == "vue-i18n"
class TestGettextDetector:
"""Tests for Gettext detector."""
def test_detect_gettext_po_files(self, temp_dir):
"""Test detection of gettext via .po files."""
po_file = temp_dir / "messages.po"
po_file.write_text('msgid "Hello"\nmsgstr "Hallo"', encoding="utf-8")
registry = get_default_registry()
detector = registry.get("gettext")
assert detector is not None
assert detector.detect(temp_dir) == "gettext"
class TestPythonGettextDetector:
"""Tests for Python gettext detector."""
def test_detect_python_gettext_imports(self, temp_dir):
"""Test detection of Python gettext via imports."""
py_file = temp_dir / "app.py"
py_file.write_text("import gettext\n_ = gettext.gettext", encoding="utf-8")
registry = get_default_registry()
detector = registry.get("python-gettext")
assert detector is not None
assert detector.detect(temp_dir) == "python-gettext"
class TestDetectorRegistry:
"""Tests for detector registry."""
def test_list_detectors(self):
"""Test listing all detectors."""
registry = get_default_registry()
detectors = registry.list_detectors()
assert "react-intl" in detectors
assert "i18next" in detectors
assert "vue-i18n" in detectors
assert "gettext" in detectors
assert "python-gettext" in detectors
def test_detect_library_auto(self, temp_dir):
"""Test auto-detection of i18n library."""
package_json = temp_dir / "package.json"
package_json.write_text('{"dependencies": {"i18next": "^21.0.0"}}', encoding="utf-8")
registry = get_default_registry()
detected = registry.detect_library(temp_dir)
assert detected == "i18next"
def test_detect_no_library(self, temp_dir):
"""Test when no i18n library is found."""
py_file = temp_dir / "app.py"
py_file.write_text("print('Hello')", encoding="utf-8")
registry = get_default_registry()
detected = registry.detect_library(temp_dir)
assert detected is None