/*
* (c) Copyright 2010-2011 AgileBirds
*
* This file is part of OpenFlexo.
*
* OpenFlexo is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* OpenFlexo is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenFlexo. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openflexo.diff;
import java.io.File;
import java.io.IOException;
import junit.framework.TestCase;
import org.openflexo.diff.ComputeDiff.AdditionChange;
import org.openflexo.diff.ComputeDiff.DiffChange;
import org.openflexo.diff.ComputeDiff.DiffReport;
import org.openflexo.diff.ComputeDiff.ModificationChange;
import org.openflexo.diff.ComputeDiff.RemovalChange;
import org.openflexo.diff.DiffSource.MergeToken;
import org.openflexo.toolbox.FileResource;
import org.openflexo.toolbox.FileUtils;
public class TestDiff extends TestCase {
public void test() {
DiffSource source = new DiffSource("\t\t1\t\t\n\t\t\n\n4\n5\n", DelimitingMethod.DEFAULT);
assertEquals(5, source.getTextTokens().length);
for (MergeToken token : source.getTextTokens()) {
System.err.println("Begin: '" + token.getBeginDelim().replace("\n", "\\n") + "'" + " Token: '" + token.getToken() + "'"
+ " End: '" + token.getEndDelim().replace("\n", "\\n") + "'");
}
}
public void test0() throws IOException {
File file1 = new FileResource("TestDiff/TestJava0-v1.java");
File file2 = new FileResource("TestDiff/TestJava0-v2.java");
System.out.println("Test 0");
DiffPrint.diff(FileUtils.fileContents(file1), FileUtils.fileContents(file2));
System.out.println("" + ComputeDiff.diff(FileUtils.fileContents(file1), FileUtils.fileContents(file2)));
DiffReport report = ComputeDiff.diff(file1, file2);
System.out.println(report.toString());
assertEquals(report.getChanges().size(), 0);
}
public void test1() throws IOException {
File file1 = new FileResource("TestDiff/TestJava1-v1.java");
File file2 = new FileResource("TestDiff/TestJava1-v2.java");
System.out.println("Test 1");
DiffPrint.diff(FileUtils.fileContents(file1), FileUtils.fileContents(file2));
System.out.println("" + ComputeDiff.diff(FileUtils.fileContents(file1), FileUtils.fileContents(file2)));
DiffReport report = ComputeDiff.diff(file1, file2);
System.out.println(report.toString());
assertEquals(report.getChanges().size(), 5);
assertChange(report.getChanges().get(0), ModificationChange.class, 0, 0, 0, 0);
assertChange(report.getChanges().get(1), ModificationChange.class, 24, 25, 24, 24);
assertChange(report.getChanges().get(2), RemovalChange.class, 28, 28, 27, 26);
assertChange(report.getChanges().get(3), AdditionChange.class, 33, 32, 31, 35);
assertChange(report.getChanges().get(4), RemovalChange.class, 59, 59, 62, 61);
}
public void test2() throws IOException {
File file1 = new FileResource("TestDiff/TestJava2-v1.java");
File file2 = new FileResource("TestDiff/TestJava2-v2.java");
System.out.println("Test 2");
DiffPrint.diff(FileUtils.fileContents(file1), FileUtils.fileContents(file2));
System.out.println("" + ComputeDiff.diff(FileUtils.fileContents(file1), FileUtils.fileContents(file2)));
DiffReport report = ComputeDiff.diff(file1, file2);
System.out.println(report.toString());
assertEquals(report.getChanges().size(), 4);
assertChange(report.getChanges().get(0), AdditionChange.class, 21, 20, 21, 24);
assertChange(report.getChanges().get(1), ModificationChange.class, 28, 28, 32, 32);
assertChange(report.getChanges().get(2), ModificationChange.class, 38, 38, 42, 47);
assertChange(report.getChanges().get(3), RemovalChange.class, 64, 68, 73, 72);
}
public void test3() throws IOException {
File file1 = new FileResource("TestDiff/TestJava3-v1.java");
File file2 = new FileResource("TestDiff/TestJava3-v2.java");
System.out.println("Test 3");
DiffPrint.diff(FileUtils.fileContents(file1), FileUtils.fileContents(file2));
System.out.println("" + ComputeDiff.diff(FileUtils.fileContents(file1), FileUtils.fileContents(file2)));
DiffReport report = ComputeDiff.diff(file1, file2);
System.out.println(report.toString());
assertEquals(report.getChanges().size(), 9);
assertChange(report.getChanges().get(0), ModificationChange.class, 0, 33, 0, 17);
assertChange(report.getChanges().get(1), ModificationChange.class, 35, 39, 19, 69);
assertChange(report.getChanges().get(2), ModificationChange.class, 42, 45, 72, 94);
assertChange(report.getChanges().get(3), ModificationChange.class, 48, 52, 97, 97);
assertChange(report.getChanges().get(4), ModificationChange.class, 54, 54, 99, 131);
assertChange(report.getChanges().get(5), RemovalChange.class, 56, 59, 133, 132);
assertChange(report.getChanges().get(6), ModificationChange.class, 61, 62, 134, 141);
assertChange(report.getChanges().get(7), RemovalChange.class, 64, 68, 143, 142);
assertChange(report.getChanges().get(8), AdditionChange.class, 70, 69, 144, 148);
}
private void assertChange(DiffChange change, Class diffClass, int first0, int last0, int first1, int last1) {
assertTrue(diffClass.isAssignableFrom(change.getClass()));
assertEquals(first0, change.getFirst0());
assertEquals(first1, change.getFirst1());
assertEquals(last0, change.getLast0());
assertEquals(last1, change.getLast1());
}
/*
public static void main(String[] args)
{
File file01 = new FileResource("TestDiff/TestJava0-v1.java");
File file02 = new FileResource("TestDiff/TestJava0-v2.java");
File file11 = new FileResource("TestDiff/TestJava1-v1.java");
File file12 = new FileResource("TestDiff/TestJava1-v2.java");
File file21 = new FileResource("TestDiff/TestJava2-v1.java");
File file22 = new FileResource("TestDiff/TestJava2-v2.java");
File file31 = new FileResource("TestDiff/TestJava3-v1.java");
File file32 = new FileResource("TestDiff/TestJava3-v2.java");
File file41 = new File("/Users/sylvain/temp/merge/branchNew.xml");
File file42 = new File("/Users/sylvain/temp/merge/branchOld.xml");
try {
DiffReport report0 = ComputeDiff.diff(file01,file02);
DiffReport report1 = ComputeDiff.diff(file11,file12);
DiffReport report2 = ComputeDiff.diff(file21,file22);
DiffReport report3 = ComputeDiff.diff(file31,file32);
DiffReport report4 = ComputeDiff.diff(file41,file42);
final JDialog dialog = new JDialog((Frame)null,true);
JButton closeButton = new JButton("Close");
closeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.dispose();
System.exit(0);
}
});
JPanel panel = new JPanel(new BorderLayout());
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.add(new DiffPanel(report0,TokenMarkerStyle.Java),"Report-0");
tabbedPane.add(new DiffPanel(report1,TokenMarkerStyle.Java),"Report-1");
tabbedPane.add(new DiffPanel(report2,TokenMarkerStyle.Java),"Report-2");
tabbedPane.add(new DiffPanel(report3,TokenMarkerStyle.Java),"Report-3");
tabbedPane.add(new DiffPanel(report4,TokenMarkerStyle.Java),"Report-4");
JEditTextArea editorPane = new JEditTextArea();
editorPane.setEditable(true);
editorPane.setTokenMarker(new JavaTokenMarker());
editorPane.setText(FileUtils.fileContents(file01));
editorPane.setFont(new Font("Verdana",Font.PLAIN,11));
tabbedPane.add(editorPane,"Code");
panel.add(tabbedPane,BorderLayout.CENTER);
panel.add(closeButton,BorderLayout.SOUTH);
dialog.setPreferredSize(new Dimension(1000,800));
dialog.getContentPane().add(panel);
dialog.validate();
dialog.pack();
dialog.setVisible(true);
} catch (IOException e) {
e.printStackTrace();
}
}*/
}