"""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