Add tests - part 2
This commit is contained in:
127
tests/test_keygen.py
Normal file
127
tests/test_keygen.py
Normal 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 == []
|
||||
Reference in New Issue
Block a user