Add tests - part 2
Some checks failed
CI / test (3.10) (push) Has been cancelled
CI / test (3.11) (push) Failing after 18s
CI / test (3.12) (push) Failing after 16s
CI / lint (push) Successful in 16s
CI / build (push) Successful in 20s

This commit is contained in:
2026-02-02 17:24:41 +00:00
parent 7370ee901c
commit 8300894b33

127
tests/test_keygen.py Normal file
View File

@@ -0,0 +1,127 @@
"""Tests for key generation."""
from pathlib import Path
from i18n_guardian.keygen.key_generator import KeyGenerator, analyze_existing_keys
class TestKeyGenerator:
"""Tests for KeyGenerator."""
def test_snake_case_conversion(self):
"""Test snake_case key generation."""
generator = KeyGenerator(style="snake_case")
key = generator.generate_key("Hello World")
assert key == "hello_world"
def test_kebab_case_conversion(self):
"""Test kebab-case key generation."""
generator = KeyGenerator(style="kebab-case")
key = generator.generate_key("Hello World")
assert key == "hello-world"
def test_camel_case_conversion(self):
"""Test camelCase key generation."""
generator = KeyGenerator(style="camelCase")
key = generator.generate_key("Hello World")
assert key == "helloWorld"
def test_pascal_case_conversion(self):
"""Test PascalCase key generation."""
generator = KeyGenerator(style="PascalCase")
key = generator.generate_key("hello world")
assert key == "HelloWorld"
def test_prefix_support(self):
"""Test key prefix."""
generator = KeyGenerator(prefix="common")
key = generator.generate_key("Hello")
assert key.startswith("common_")
def test_max_length(self):
"""Test max length constraint."""
generator = KeyGenerator(max_length=10)
key = generator.generate_key("This is a very long text that should be truncated")
assert len(key) <= 10
def test_special_characters(self):
"""Test handling of special characters."""
generator = KeyGenerator(style="snake_case")
key = generator.generate_key("Hello! @#$ World")
assert "!" not in key
assert "@" not in key
assert "#" not in key
assert "$" not in key
def test_duplicate_key_handling(self):
"""Test that duplicate keys get unique suffixes."""
generator = KeyGenerator(style="snake_case")
generator.set_existing_keys(["hello_world"])
key1 = generator.generate_key("Hello World")
key2 = generator.generate_key("Hello World")
assert key1 != key2
assert "hello_world" in key1 or "hello_world" in key2
def test_path_prefix(self, temp_dir):
"""Test path-based prefix generation."""
generator = KeyGenerator(style="snake_case")
file_path = temp_dir / "components" / "Button.tsx"
key = generator.generate_key("Submit", file_path=file_path)
assert "button" in key.lower() or "submit" in key.lower()
def test_context_adding(self):
"""Test context-based key generation."""
generator = KeyGenerator(style="snake_case")
key = generator.generate_key("Submit", context="button")
assert "submit" in key.lower()
assert "button" in key.lower()
def test_numeric_exclusion(self):
"""Test that numeric-only strings are handled."""
generator = KeyGenerator(style="snake_case")
key = generator.generate_key("12345")
assert key.isdigit() or key == ""
def test_whitespace_handling(self):
"""Test handling of whitespace."""
generator = KeyGenerator(style="snake_case")
key = generator.generate_key(" Hello World ")
assert " " not in key
assert key == "hello_world"
class TestAnalyzeExistingKeys:
"""Tests for analyzing existing translation keys."""
def test_analyze_json_keys(self, temp_dir):
"""Test analyzing JSON translation files."""
locales_dir = temp_dir / "locales"
locales_dir.mkdir()
en_json = locales_dir / "en.json"
en_json.write_text('{"greeting": "Hello", "farewell": "Goodbye"}', encoding="utf-8")
keys = analyze_existing_keys(en_json)
assert "greeting" in keys
assert "farewell" in keys
def test_analyze_nested_json_keys(self, temp_dir):
"""Test analyzing nested JSON translation files."""
locales_dir = temp_dir / "locales"
locales_dir.mkdir()
en_json = locales_dir / "en.json"
en_json.write_text(
'{"buttons": {"submit": "Submit", "cancel": "Cancel"}}', encoding="utf-8"
)
keys = analyze_existing_keys(en_json)
assert any("buttons" in k for k in keys)
def test_missing_file(self):
"""Test handling of missing files."""
keys = analyze_existing_keys(Path("/nonexistent/file.json"))
assert keys == []