Skip to content

Commit ef6bdc0

Browse files
[BAEL-9236] by sgrverma23: Comparing text using java-diff-utils (#18549)
* [BAEL-9236] by sgrverma23: comparing text using java-diff-utils * fixing package name * removing util package from module * refactoring test files * making method static and refactoring Junits accordingly --------- Co-authored-by: sverma1-godaddy <[email protected]>
1 parent 5518bd4 commit ef6bdc0

File tree

9 files changed

+140
-0
lines changed

9 files changed

+140
-0
lines changed

libraries-5/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,11 @@
219219
<artifactId>restfb</artifactId>
220220
<version>${com.restfb.version}</version>
221221
</dependency>
222+
<dependency>
223+
<groupId>io.github.java-diff-utils</groupId>
224+
<artifactId>java-diff-utils</artifactId>
225+
<version>${java-diff-utils.version}</version>
226+
</dependency>
222227
</dependencies>
223228

224229
<properties>
@@ -238,6 +243,7 @@
238243
<github-api.version>1.327</github-api.version>
239244
<com.restfb.version>2025.6.0</com.restfb.version>
240245
<objenesis.version>3.4</objenesis.version>
246+
<java-diff-utils.version>4.12</java-diff-utils.version>
241247
</properties>
242248

243249
</project>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.baeldung.javadiffutils;
2+
3+
import com.github.difflib.DiffUtils;
4+
import com.github.difflib.patch.PatchFailedException;
5+
6+
import java.util.List;
7+
8+
public class PatchUtil {
9+
public static List<String> apply(List<String> original, List<String> revised) throws PatchFailedException {
10+
var patch = DiffUtils.diff(original, revised);
11+
return DiffUtils.patch(original, patch);
12+
}
13+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.baeldung.javadiffutils;
2+
3+
import com.github.difflib.DiffUtils;
4+
import java.util.List;
5+
import java.util.logging.Level;
6+
import java.util.logging.Logger;
7+
8+
public class SideBySideViewUtil {
9+
10+
private static final Logger logger = Logger.getLogger(SideBySideViewUtil.class.getName());
11+
12+
public static void display(List<String> original, List<String> revised)
13+
{
14+
var patch = DiffUtils.diff(original, revised);
15+
patch.getDeltas().forEach(delta -> {
16+
logger.log(Level.INFO,"Change: " + delta.getType());
17+
logger.log(Level.INFO,"Original: " + delta.getSource().getLines());
18+
logger.log(Level.INFO,"Revised: " + delta.getTarget().getLines());
19+
});
20+
}
21+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.baeldung.javadiffutils;
2+
3+
import com.github.difflib.DiffUtils;
4+
import com.github.difflib.patch.Patch;
5+
import java.util.List;
6+
7+
public class TextComparatorUtil {
8+
public static Patch<String> compare(List<String> original, List<String> revised) {
9+
return DiffUtils.diff(original, revised);
10+
}
11+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.baeldung.javadiffutils;
2+
3+
import com.github.difflib.DiffUtils;
4+
import com.github.difflib.UnifiedDiffUtils;
5+
6+
import java.util.List;
7+
8+
public class UnifiedDiffGeneratorUtil {
9+
public static List<String> generate(List<String> original, List<String> revised, String fileName) {
10+
var patch = DiffUtils.diff(original, revised);
11+
return UnifiedDiffUtils.generateUnifiedDiff(fileName, fileName + ".new", original, patch, 3);
12+
}
13+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.baeldung.javadiffutils;
2+
3+
import com.github.difflib.patch.PatchFailedException;
4+
import org.junit.Test;
5+
import java.util.List;
6+
import static org.junit.Assert.assertEquals;
7+
8+
public class PatchUtilTest {
9+
@Test
10+
public void givenPatch_whenApplied_thenMatchesRevised() throws PatchFailedException {
11+
var original = List.of("alpha", "beta", "gamma");
12+
var revised = List.of("alpha", "beta-updated", "gamma");
13+
14+
var result = PatchUtil.apply(original, revised);
15+
16+
assertEquals(revised, result);
17+
}
18+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.baeldung.javadiffutils;
2+
3+
import org.junit.Test;
4+
5+
import java.util.List;
6+
7+
public class SideBySideViewUtilTest {
8+
9+
@Test
10+
public void givenDifferentLists_whenDisplayCalled_thenNoExceptionThrown() {
11+
List<String> original = List.of("line1", "line2", "line3");
12+
List<String> revised = List.of("line1", "line2-modified", "line3", "line4");
13+
14+
SideBySideViewUtil.display(original, revised);
15+
}
16+
17+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.baeldung.javadiffutils;
2+
3+
import org.junit.Test;
4+
5+
import java.util.List;
6+
7+
import static org.junit.Assert.assertEquals;
8+
9+
public class TextComparatorUtilTest {
10+
@Test
11+
public void givenDifferentLines_whenCompared_thenDetectsChanges() {
12+
var original = List.of("A", "B", "C");
13+
var revised = List.of("A", "B", "D");
14+
15+
var patch = TextComparatorUtil.compare(original, revised);
16+
17+
assertEquals(1, patch.getDeltas().size());
18+
assertEquals("C", patch.getDeltas().get(0).getSource().getLines().get(0));
19+
assertEquals("D", patch.getDeltas().get(0).getTarget().getLines().get(0));
20+
}
21+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.baeldung.javadiffutils;
2+
3+
import org.junit.Test;
4+
5+
import java.util.List;
6+
7+
import static org.junit.Assert.assertTrue;
8+
9+
public class UnifiedDiffGeneratorUtilTest {
10+
@Test
11+
public void givenModifiedText_whenUnifiedDiffGenerated_thenContainsExpectedChanges() {
12+
var original = List.of("x", "y", "z");
13+
var revised = List.of("x", "y-modified", "z");
14+
15+
var diff = UnifiedDiffGeneratorUtil.generate(original, revised, "test.txt");
16+
17+
assertTrue(diff.stream().anyMatch(line -> line.contains("-y")));
18+
assertTrue(diff.stream().anyMatch(line -> line.contains("+y-modified")));
19+
}
20+
}

0 commit comments

Comments
 (0)