From 9a6d3aef55188cc18f2afbdfedda59e88449c1db Mon Sep 17 00:00:00 2001 From: shotwave Date: Wed, 6 Apr 2011 17:01:37 +0000 Subject: [PATCH] udiff pattern fixed, test added --- src/difflib/DiffUtils.java | 2 +- .../diffutils/GenerateUnifiedDiffTest.java | 85 +++++++------------ 2 files changed, 32 insertions(+), 55 deletions(-) diff --git a/src/difflib/DiffUtils.java b/src/difflib/DiffUtils.java index a4cd9be..0d4caf3 100644 --- a/src/difflib/DiffUtils.java +++ b/src/difflib/DiffUtils.java @@ -31,7 +31,7 @@ import java.util.regex.Pattern; public class DiffUtils { private static DiffAlgorithm defaultDiffAlgorithm = new MyersDiff(); private static Pattern unifiedDiffChunkRe = - Pattern.compile("@@\\s+-(?:(\\d+)(?:,(\\d+))?)\\s+\\+(?:(\\d+)(?:,(\\d+))?)\\s+@@"); + Pattern.compile("^@@\\s+-(?:(\\d+)(?:,(\\d+))?)\\s+\\+(?:(\\d+)(?:,(\\d+))?)\\s+@@$"); /** * Compute the difference between the original and revised texts with default diff algorithm diff --git a/test/testcase/diffutils/GenerateUnifiedDiffTest.java b/test/testcase/diffutils/GenerateUnifiedDiffTest.java index 6e6eba2..e8be995 100644 --- a/test/testcase/diffutils/GenerateUnifiedDiffTest.java +++ b/test/testcase/diffutils/GenerateUnifiedDiffTest.java @@ -2,23 +2,17 @@ package diffutils; import difflib.DiffUtils; import difflib.Patch; -import difflib.PatchFailedException; import junit.framework.TestCase; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; -import java.util.ArrayList; import java.util.LinkedList; import java.util.List; public class GenerateUnifiedDiffTest extends TestCase { static final String FS = File.separator; - static final String originalFilename = "test" + FS + "mocks" + FS + "original.txt"; - static final String revisedFilename = "test" + FS + "mocks" + FS + "revised.txt"; - static final String originalFilenameOneDelta = "test" + FS + "mocks" + FS + "one_delta_test_original.txt"; - static final String revisedFilenameOneDelta = "test" + FS + "mocks" + FS + "one_delta_test_revised.txt"; public List fileToLines(String filename) { List lines = new LinkedList(); @@ -34,53 +28,18 @@ public class GenerateUnifiedDiffTest extends TestCase { return lines; } - /** - * Tests the Unified Diff generation by creating a Patch, then - * creating the Unified Diff representation, then parsing that - * Unified Diff, and applying the patch to the original unrevised - * text, then comparing that to the original revised text. - * - * @author Bill James (tankerbay@gmail.com) - */ - public void testGenerateUnified() { - List origLines = fileToLines(originalFilename); - List revLines = fileToLines(revisedFilename); + public void testGenerateUnified() throws Exception { + List origLines = fileToLines("test" + FS + "mocks" + FS + "original.txt"); + List revLines = fileToLines("test" + FS + "mocks" + FS + "revised.txt"); - testGenerateUnified(origLines, revLines); + verify(origLines, revLines); } - /** - * Tests the Unified Diff generation for diff with one delta. - */ - public void testGenerateUnifiedWithOneDelta() { - List origLines = fileToLines(originalFilenameOneDelta); - List revLines = fileToLines(revisedFilenameOneDelta); + public void testGenerateUnifiedWithOneDelta() throws Exception { + List origLines = fileToLines("test" + FS + "mocks" + FS + "one_delta_test_original.txt"); + List revLines = fileToLines("test" + FS + "mocks" + FS + "one_delta_test_revised.txt"); - testGenerateUnified(origLines, revLines); - } - - private void testGenerateUnified(List origLines, List revLines) { - Patch p = DiffUtils.diff(origLines, revLines); - List unifiedDiff = DiffUtils.generateUnifiedDiff( - originalFilename, revisedFilename, origLines, p, 10); - - Patch fromUnifiedPatch = DiffUtils.parseUnifiedDiff(unifiedDiff); - List patchedLines = new ArrayList(); - try { - patchedLines = (List) fromUnifiedPatch.applyTo(origLines); - } catch (PatchFailedException e) { - // TODO Auto-generated catch block - fail(e.getMessage()); - } - - assertTrue(revLines.size() == patchedLines.size()); - for (int i = 0; i < revLines.size(); i++) { - String l1 = revLines.get(i); - String l2 = patchedLines.get(i); - if (l1.equals(l2) == false) { - fail("Line " + (i + 1) + " of the patched file did not match the revised original"); - } - } + verify(origLines, revLines); } public void testDiff_Issue10() throws Exception { @@ -93,12 +52,30 @@ public class GenerateUnifiedDiffTest extends TestCase { public void testDiff_Issue11() throws Exception { final List lines1 = fileToLines("test" + FS + "mocks" + FS + "issue11_1.txt"); final List lines2 = fileToLines("test" + FS + "mocks" + FS + "issue11_2.txt"); + verify(lines1, lines2); + } + public void testDiff5() throws Exception { + final List lines1 = fileToLines("test" + FS + "mocks" + FS + "5A.txt"); + final List lines2 = fileToLines("test" + FS + "mocks" + FS + "5B.txt"); + verify(lines1, lines2); + } - final Patch patch = DiffUtils.diff(lines1, lines2); - final String fileName = "xxx"; - final List stringList = DiffUtils.generateUnifiedDiff(fileName, fileName, lines1, patch, 3); - final Patch x = DiffUtils.parseUnifiedDiff(stringList); - DiffUtils.patch(lines1, x); + private void verify(List origLines, List revLines) throws Exception { + Patch p = DiffUtils.diff(origLines, revLines); + List unifiedDiff = DiffUtils.generateUnifiedDiff( + "test" + FS + "mocks" + FS + "original.txt", "test" + FS + "mocks" + FS + "revised.txt", origLines, p, 10); + + Patch fromUnifiedPatch = DiffUtils.parseUnifiedDiff(unifiedDiff); + List patchedLines = (List) fromUnifiedPatch.applyTo(origLines); + + assertTrue(revLines.size() == patchedLines.size()); + for (int i = 0; i < revLines.size(); i++) { + String l1 = revLines.get(i); + String l2 = patchedLines.get(i); + if (!l1.equals(l2)) { + fail("Line " + (i + 1) + " of the patched file did not match the revised original"); + } + } } }