Moonlock lockscreen scaffolding: PAM auth (ctypes), fprintd D-Bus listener, i18n (DE/EN), user detection, power actions. 33 tests passing.
68 lines
2.3 KiB
Python
68 lines
2.3 KiB
Python
# ABOUTME: Tests for locale detection and string lookup.
|
|
# ABOUTME: Verifies correct language detection from env vars and /etc/locale.conf.
|
|
|
|
import os
|
|
from pathlib import Path
|
|
from unittest.mock import patch
|
|
|
|
from moonlock.i18n import Strings, detect_locale, load_strings
|
|
|
|
|
|
class TestDetectLocale:
|
|
"""Tests for locale detection."""
|
|
|
|
@patch.dict(os.environ, {"LANG": "de_DE.UTF-8"})
|
|
def test_detects_german_from_env(self):
|
|
assert detect_locale() == "de"
|
|
|
|
@patch.dict(os.environ, {"LANG": "en_US.UTF-8"})
|
|
def test_detects_english_from_env(self):
|
|
assert detect_locale() == "en"
|
|
|
|
@patch.dict(os.environ, {"LANG": ""}, clear=False)
|
|
def test_reads_locale_conf_when_env_empty(self, tmp_path: Path):
|
|
locale_conf = tmp_path / "locale.conf"
|
|
locale_conf.write_text("LANG=de_DE.UTF-8\n")
|
|
assert detect_locale(locale_conf_path=locale_conf) == "de"
|
|
|
|
@patch.dict(os.environ, {"LANG": "C"})
|
|
def test_c_locale_defaults_to_english(self):
|
|
assert detect_locale() == "en"
|
|
|
|
@patch.dict(os.environ, {"LANG": "POSIX"})
|
|
def test_posix_locale_defaults_to_english(self):
|
|
assert detect_locale() == "en"
|
|
|
|
@patch.dict(os.environ, {}, clear=True)
|
|
def test_missing_env_and_no_file_defaults_to_english(self, tmp_path: Path):
|
|
nonexistent = tmp_path / "nonexistent"
|
|
assert detect_locale(locale_conf_path=nonexistent) == "en"
|
|
|
|
|
|
class TestLoadStrings:
|
|
"""Tests for string table loading."""
|
|
|
|
def test_german_strings(self):
|
|
strings = load_strings("de")
|
|
assert isinstance(strings, Strings)
|
|
assert strings.password_placeholder == "Passwort"
|
|
|
|
def test_english_strings(self):
|
|
strings = load_strings("en")
|
|
assert strings.password_placeholder == "Password"
|
|
|
|
def test_unknown_locale_falls_back_to_english(self):
|
|
strings = load_strings("fr")
|
|
assert strings.password_placeholder == "Password"
|
|
|
|
def test_lockscreen_specific_strings_exist(self):
|
|
strings = load_strings("de")
|
|
assert strings.unlock_button is not None
|
|
assert strings.fingerprint_prompt is not None
|
|
assert strings.fingerprint_success is not None
|
|
|
|
def test_faillock_template_strings(self):
|
|
strings = load_strings("de")
|
|
msg = strings.faillock_attempts_remaining.format(n=2)
|
|
assert "2" in msg
|