Add tests - part 2
This commit is contained in:
116
tests/test_diff.py
Normal file
116
tests/test_diff.py
Normal file
@@ -0,0 +1,116 @@
|
||||
"""Tests for diff generation."""
|
||||
|
||||
|
||||
from i18n_guardian.diff.diff_generator import DiffGenerator, DiffChange, DiffResult
|
||||
|
||||
|
||||
class TestDiffGenerator:
|
||||
"""Tests for DiffGenerator."""
|
||||
|
||||
def test_generate_diff_basic(self, temp_dir):
|
||||
"""Test basic diff generation."""
|
||||
file_path = temp_dir / "test.py"
|
||||
old_content = 'message = "Hello"'
|
||||
new_content = 'message = t("Hello")'
|
||||
|
||||
generator = DiffGenerator()
|
||||
diff = generator.generate_diff(file_path, old_content, new_content)
|
||||
|
||||
assert isinstance(diff, str)
|
||||
assert len(diff) > 0
|
||||
assert "---" in diff
|
||||
assert "+++" in diff
|
||||
assert "-" in diff
|
||||
assert "+" in diff
|
||||
|
||||
def test_generate_diff_multiple_lines(self, temp_dir):
|
||||
"""Test diff generation for multiple lines."""
|
||||
file_path = temp_dir / "test.py"
|
||||
old_content = '''def greet():
|
||||
return "Hello"
|
||||
'''
|
||||
new_content = '''def greet():
|
||||
return t("Hello")
|
||||
'''
|
||||
|
||||
generator = DiffGenerator()
|
||||
diff = generator.generate_diff(file_path, old_content, new_content)
|
||||
|
||||
assert "Hello" in diff
|
||||
|
||||
def test_create_replacement(self):
|
||||
"""Test creating replacement string with i18n function."""
|
||||
generator = DiffGenerator()
|
||||
replacement = generator.create_replacement("Hello World", "t")
|
||||
|
||||
assert 't("Hello World")' in replacement
|
||||
assert "\\n" not in replacement or replacement.count('\\n') == 0
|
||||
|
||||
def test_create_replacement_escaping(self):
|
||||
"""Test that special characters are escaped."""
|
||||
generator = DiffGenerator()
|
||||
replacement = generator.create_replacement('Hello "World"', "t")
|
||||
|
||||
assert '\\"' in replacement
|
||||
|
||||
def test_diff_result_structure(self):
|
||||
"""Test DiffResult has correct structure."""
|
||||
result = DiffResult()
|
||||
assert hasattr(result, "changes")
|
||||
assert hasattr(result, "files_modified")
|
||||
assert hasattr(result, "total_changes")
|
||||
assert result.changes == []
|
||||
|
||||
def test_diff_change_structure(self, temp_dir):
|
||||
"""Test DiffChange has correct structure."""
|
||||
change = DiffChange(
|
||||
file_path=temp_dir / "test.py",
|
||||
original_line=1,
|
||||
original_text='"Hello"',
|
||||
new_text='t("Hello")',
|
||||
)
|
||||
|
||||
assert hasattr(change, "file_path")
|
||||
assert hasattr(change, "original_line")
|
||||
assert hasattr(change, "original_text")
|
||||
assert hasattr(change, "new_text")
|
||||
|
||||
def test_empty_diff(self, temp_dir):
|
||||
"""Test diff with no changes."""
|
||||
file_path = temp_dir / "test.py"
|
||||
content = 'message = "Hello"'
|
||||
|
||||
generator = DiffGenerator()
|
||||
diff = generator.generate_diff(file_path, content, content)
|
||||
|
||||
assert isinstance(diff, str)
|
||||
|
||||
def test_apply_diff_creates_backup(self, temp_dir):
|
||||
"""Test that applying diff creates backup."""
|
||||
file_path = temp_dir / "test.py"
|
||||
file_path.write_text('message = "Hello"', encoding="utf-8")
|
||||
|
||||
old_content = file_path.read_text(encoding="utf-8")
|
||||
new_content = 'message = t("Hello")'
|
||||
|
||||
generator = DiffGenerator()
|
||||
diff = generator.generate_diff(file_path, old_content, new_content)
|
||||
result = generator.apply_diff(file_path, diff, backup=True)
|
||||
|
||||
assert result
|
||||
assert file_path.with_suffix(".bak").exists()
|
||||
|
||||
def test_apply_diff_modifies_file(self, temp_dir):
|
||||
"""Test that applying diff modifies file."""
|
||||
file_path = temp_dir / "test.py"
|
||||
file_path.write_text('message = "Hello"', encoding="utf-8")
|
||||
|
||||
old_content = file_path.read_text(encoding="utf-8")
|
||||
new_content = 'message = t("Hello")'
|
||||
|
||||
generator = DiffGenerator()
|
||||
diff = generator.generate_diff(file_path, old_content, new_content)
|
||||
generator.apply_diff(file_path, diff, backup=False)
|
||||
|
||||
content = file_path.read_text(encoding="utf-8")
|
||||
assert 't("Hello")' in content
|
||||
Reference in New Issue
Block a user