Add tests - part 1
This commit is contained in:
139
tests/test_detectors.py
Normal file
139
tests/test_detectors.py
Normal 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
|
||||
Reference in New Issue
Block a user