From d072d124b6db71d0c482f652c94eeeb3cc2fc8b4 Mon Sep 17 00:00:00 2001 From: Chanakan Moongthin Date: Thu, 17 Sep 2026 06:10:35 +0700 Subject: [PATCH] fix: preserve equal rows from patches --- .../github/difflib/text/DiffRowGenerator.java | 6 ++++ .../text/DiffRowGeneratorEqualitiesTest.java | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/java-diff-utils/src/main/java/com/github/difflib/text/DiffRowGenerator.java b/java-diff-utils/src/main/java/com/github/difflib/text/DiffRowGenerator.java index 82a5b94..14c69db 100644 --- a/java-diff-utils/src/main/java/com/github/difflib/text/DiffRowGenerator.java +++ b/java-diff-utils/src/main/java/com/github/difflib/text/DiffRowGenerator.java @@ -285,6 +285,12 @@ private int transformDeltaIntoDiffRow( } switch (delta.getType()) { + case EQUAL: + for (String line : orig.getLines()) { + String processed = processEqualities(line); + diffRows.add(buildDiffRow(Tag.EQUAL, processed, processed)); + } + break; case INSERT: for (String line : rev.getLines()) { diffRows.add(buildDiffRow(Tag.INSERT, "", line)); diff --git a/java-diff-utils/src/test/java/com/github/difflib/text/DiffRowGeneratorEqualitiesTest.java b/java-diff-utils/src/test/java/com/github/difflib/text/DiffRowGeneratorEqualitiesTest.java index c71f455..6c91228 100644 --- a/java-diff-utils/src/test/java/com/github/difflib/text/DiffRowGeneratorEqualitiesTest.java +++ b/java-diff-utils/src/test/java/com/github/difflib/text/DiffRowGeneratorEqualitiesTest.java @@ -3,6 +3,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; +import com.github.difflib.DiffUtils; +import com.github.difflib.patch.Patch; import java.util.Arrays; import java.util.List; import org.junit.jupiter.api.Test; @@ -89,4 +91,34 @@ public void testEqualitiesProcessedButInlineDiffStillPresent() { // Option 3 does NOT modify inline equalities assertTrue(row.getOldLine().startsWith("hello "), "Equal (unchanged) inline segment should remain unchanged"); } + + @Test + public void testEqualDeltaIsReportedAsEqualWithoutInlineDiffs() { + List original = Arrays.asList("same", "before"); + List revised = Arrays.asList("same", "after"); + Patch patch = DiffUtils.diff(original, revised, true); + + List rows = + DiffRowGenerator.create().showInlineDiffs(false).build().generateDiffRows(original, patch); + + assertEquals(2, rows.size()); + assertEquals(DiffRow.Tag.EQUAL, rows.get(0).getTag()); + assertEquals("same", rows.get(0).getOldLine()); + assertEquals(DiffRow.Tag.CHANGE, rows.get(1).getTag()); + } + + @Test + public void testEqualDeltaIsReportedAsEqualWithInlineDiffs() { + List original = Arrays.asList("same", "before"); + List revised = Arrays.asList("same", "after"); + Patch patch = DiffUtils.diff(original, revised, true); + + List rows = + DiffRowGenerator.create().showInlineDiffs(true).build().generateDiffRows(original, patch); + + assertEquals(2, rows.size()); + assertEquals(DiffRow.Tag.EQUAL, rows.get(0).getTag()); + assertEquals("same", rows.get(0).getNewLine()); + assertEquals(DiffRow.Tag.CHANGE, rows.get(1).getTag()); + } }