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