package diffutils; import difflib.DiffUtils; import difflib.Patch; import junit.framework.TestCase; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.LinkedList; import java.util.List; public class GenerateUnifiedDiffTest extends TestCase { static final String FS = File.separator; public List fileToLines(String filename) { List lines = new LinkedList(); String line = ""; try { BufferedReader in = new BufferedReader(new FileReader(filename)); while ((line = in.readLine()) != null) { lines.add(line); } } catch (IOException e) { e.printStackTrace(); } return lines; } public void testGenerateUnified() throws Exception { List origLines = fileToLines("test" + FS + "mocks" + FS + "original.txt"); List revLines = fileToLines("test" + FS + "mocks" + FS + "revised.txt"); verify(origLines, revLines); } 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"); verify(origLines, revLines); } public void testDiff_Issue10() throws Exception { final List baseLines = fileToLines("test" + FS + "mocks" + FS + "issue10_base.txt"); final List patchLines = fileToLines("test" + FS + "mocks" + FS + "issue10_patch.txt"); final Patch p = DiffUtils.parseUnifiedDiff(patchLines); DiffUtils.patch(baseLines, p); } 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); } 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"); } } } }