/*
* (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.merge;
import java.io.File;
import java.io.IOException;
import junit.framework.TestCase;
import org.openflexo.diff.DiffSource;
import org.openflexo.diff.merge.MergeChange.MergeChangeSource;
import org.openflexo.diff.merge.MergeChange.MergeChangeType;
import org.openflexo.toolbox.FileResource;
/**
* Test some pathologic cases
*
* @author sylvain
*
*/
public class TestMerge2 extends TestCase {
public void test0() throws IOException {
File original = new FileResource("TestMerge/TestMerge0-original.java");
File left = new FileResource("TestMerge/TestMerge0-left.java");
File right = new FileResource("TestMerge/TestMerge0-right.java");
Merge merge = new Merge(new DiffSource(original), new DiffSource(left), new DiffSource(right), DefaultMergedDocumentType.JAVA);
assertEquals(merge.getChanges().size(), 0);
assertFalse(merge.isReallyConflicting());
}
public void test1() throws IOException {
File original = new FileResource("TestMerge/TestMerge1-original.java");
File left = new FileResource("TestMerge/TestMerge1-left.java");
File right = new FileResource("TestMerge/TestMerge1-right.java");
Merge merge = new Merge(new DiffSource(original), new DiffSource(left), new DiffSource(right), DefaultMergedDocumentType.JAVA);
assertEquals(merge.getChanges().size(), 9);
assertFalse(merge.isReallyConflicting());
assertChange(merge.getChanges().get(0), MergeChangeSource.Left, MergeChangeType.Removal, 23, 22, 23, 33, 23, 33);
assertChange(merge.getChanges().get(1), MergeChangeSource.Left, MergeChangeType.Addition, 25, 25, 36, 35, 36, 35);
assertChange(merge.getChanges().get(2), MergeChangeSource.Right, MergeChangeType.Addition, 91, 90, 101, 100, 101, 105);
assertChange(merge.getChanges().get(3), MergeChangeSource.Right, MergeChangeType.Modification, 98, 98, 108, 108, 113, 114);
assertChange(merge.getChanges().get(4), MergeChangeSource.Left, MergeChangeType.Addition, 100, 100, 110, 109, 116, 115);
assertChange(merge.getChanges().get(5), MergeChangeSource.Right, MergeChangeType.Removal, 103, 103, 112, 112, 118, 117);
assertChange(merge.getChanges().get(6), MergeChangeSource.Left, MergeChangeType.Modification, 106, 106, 115, 115, 120, 120);
assertChange(merge.getChanges().get(7), MergeChangeSource.Left, MergeChangeType.Modification, 130, 130, 139, 139, 144, 144);
assertChange(merge.getChanges().get(8), MergeChangeSource.Left, MergeChangeType.Modification, 134, 134, 143, 143, 148, 148);
}
public void test2() throws IOException {
File original = new FileResource("TestMerge/TestMerge2-original.java");
File left = new FileResource("TestMerge/TestMerge2-left.java");
File right = new FileResource("TestMerge/TestMerge2-right.java");
Merge merge = new Merge(new DiffSource(original), new DiffSource(left), new DiffSource(right), DefaultMergedDocumentType.JAVA);
assertEquals(merge.getChanges().size(), 14);
assertTrue(merge.isReallyConflicting());
assertChange(merge.getChanges().get(0), MergeChangeSource.Left, MergeChangeType.Removal, 7, 6, 7, 7, 7, 7);
assertChange(merge.getChanges().get(1), MergeChangeSource.Right, MergeChangeType.Addition, 10, 9, 11, 10, 11, 11);
assertChange(merge.getChanges().get(2), MergeChangeSource.Conflict, MergeChangeType.Modification, 13, 13, 14, 13, 15, 15);
assertChange(merge.getChanges().get(3), MergeChangeSource.Left, MergeChangeType.Addition, 19, 19, 19, 18, 21, 20);
assertChange(merge.getChanges().get(4), MergeChangeSource.Right, MergeChangeType.Addition, 35, 34, 34, 33, 36, 39);
assertChange(merge.getChanges().get(5), MergeChangeSource.Conflict, MergeChangeType.Modification, 79, 79, 78, 77, 84, 85);
assertChange(merge.getChanges().get(6), MergeChangeSource.Left, MergeChangeType.Addition, 86, 86, 84, 83, 92, 91);
assertChange(merge.getChanges().get(7), MergeChangeSource.Right, MergeChangeType.Addition, 102, 101, 99, 98, 107, 109);
assertChange(merge.getChanges().get(8), MergeChangeSource.Left, MergeChangeType.Modification, 129, 129, 126, 126, 137, 137);
assertChange(merge.getChanges().get(9), MergeChangeSource.Conflict, MergeChangeType.Modification, 135, 138, 132, 135, 143, 146);
assertChange(merge.getChanges().get(10), MergeChangeSource.Right, MergeChangeType.Addition, 140, 139, 137, 136, 148, 148);
assertChange(merge.getChanges().get(11), MergeChangeSource.Left, MergeChangeType.Addition, 141, 141, 138, 137, 150, 149);
assertChange(merge.getChanges().get(12), MergeChangeSource.Conflict, MergeChangeType.Modification, 143, 148, 139, 144, 151, 156);
assertChange(merge.getChanges().get(13), MergeChangeSource.Right, MergeChangeType.Addition, 156, 155, 152, 151, 164, 164);
}
public void test3() throws IOException {
File original = new FileResource("TestMerge/TestMerge3-original.java");
File left = new FileResource("TestMerge/TestMerge3-left.java");
File right = new FileResource("TestMerge/TestMerge3-right.java");
Merge merge = new Merge(new DiffSource(original), new DiffSource(left), new DiffSource(right), DefaultMergedDocumentType.JAVA);
assertEquals(merge.getChanges().size(), 9);
assertTrue(merge.isReallyConflicting());
assertChange(merge.getChanges().get(0), MergeChangeSource.Conflict, MergeChangeType.Modification, 2, 4, 2, 4, 2, 4);
assertChange(merge.getChanges().get(1), MergeChangeSource.Right, MergeChangeType.Modification, 7, 7, 7, 7, 7, 7);
assertChange(merge.getChanges().get(2), MergeChangeSource.Left, MergeChangeType.Modification, 17, 17, 17, 17, 17, 17);
assertChange(merge.getChanges().get(3), MergeChangeSource.Left, MergeChangeType.Addition, 23, 23, 23, 22, 23, 22);
assertChange(merge.getChanges().get(4), MergeChangeSource.Conflict, MergeChangeType.Modification, 27, 32, 26, 31, 26, 31);
assertChange(merge.getChanges().get(5), MergeChangeSource.Right, MergeChangeType.Addition, 35, 34, 34, 33, 34, 37);
assertChange(merge.getChanges().get(6), MergeChangeSource.Left, MergeChangeType.Addition, 77, 80, 76, 75, 80, 79);
assertChange(merge.getChanges().get(7), MergeChangeSource.Conflict, MergeChangeType.Modification, 154, 154, 149, 149, 153, 153);
assertChange(merge.getChanges().get(8), MergeChangeSource.Conflict, MergeChangeType.Modification, 159, 159, 154, 154, 158, 158);
}
private void assertChange(MergeChange change, MergeChangeSource changeSource, MergeChangeType changeType, int first0, int last0,
int first1, int last1, int first2, int last2) {
assertEquals(change.getMergeChangeSource(), changeSource);
assertEquals(change.getMergeChangeType(), changeType);
assertEquals(first0, change.getFirst0());
assertEquals(first1, change.getFirst1());
assertEquals(first2, change.getFirst2());
assertEquals(last0, change.getLast0());
assertEquals(last1, change.getLast1());
assertEquals(last2, change.getLast2());
}
/* public static void main(String[] args)
{
File file2 = new FileResource("TestMerge/TestMerge4-2");
File file1 = new FileResource("TestMerge/TestMerge4-1");
File file3 = new FileResource("TestMerge/TestMerge4-3");
final JDialog dialog = new JDialog((Frame)null,true);
JPanel panel = new JPanel(new BorderLayout());
final JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.add(makeMergeTabbedPane(file2, file1, file3,DefaultMergedDocumentType.JAVA),"2-1-3"); // OK
tabbedPane.add(makeMergeTabbedPane(file2, file3, file1,DefaultMergedDocumentType.JAVA),"2-3-1"); // OK
tabbedPane.add(makeMergeTabbedPane(file3, file2, file1,DefaultMergedDocumentType.JAVA),"3-2-1"); // OK
tabbedPane.add(makeMergeTabbedPane(file3, file1, file2,DefaultMergedDocumentType.JAVA),"3-1-2"); // OK
tabbedPane.add(makeMergeTabbedPane(file1, file2, file3,DefaultMergedDocumentType.JAVA),"1-2-3");
tabbedPane.add(makeMergeTabbedPane(file1, file3, file2,DefaultMergedDocumentType.JAVA),"1-3-2");
panel.add(tabbedPane,BorderLayout.CENTER);
JButton closeButton = new JButton("Exit");
closeButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
dialog.dispose();
System.exit(0);
}
});
JButton editButton = new JButton("Edit");
editButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
JTabbedPane mergeTabbedPane = (JTabbedPane)tabbedPane.getSelectedComponent();
DefaultMergePanel currentMergePanel = (DefaultMergePanel)mergeTabbedPane.getComponentAt(0);
editMerge((Merge)currentMergePanel.getMerge());
}
});
JPanel controlPanel = new JPanel(new FlowLayout());
controlPanel.add(closeButton);
controlPanel.add(editButton);
panel.add(controlPanel,BorderLayout.SOUTH);
dialog.setPreferredSize(new Dimension(1000,800));
dialog.getContentPane().add(panel);
dialog.pack();
dialog.setVisible(true);
}
private static JTabbedPane makeMergeTabbedPane(File original, File left, File right, MergedDocumentType docType)
{
Merge merge = null;
DiffReport diffLeft = null;
DiffReport diffRight = null;
try {
merge = new Merge(new DiffSource(original),new DiffSource(left),new DiffSource(right),docType);
diffLeft = ComputeDiff.diff(left,original);
diffRight = ComputeDiff.diff(original,right);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.add(new DefaultMergePanel(merge,docType.getStyle()),"Merge");
tabbedPane.add(new DiffPanel(diffLeft,docType.getStyle()),"Diffs between left and original");
tabbedPane.add(new DiffPanel(diffRight,docType.getStyle()),"Diffs between original and right");
return tabbedPane;
}
public static void editMerge(Merge merge)
{
final JDialog dialog = new JDialog((Frame)null,true);
JPanel panel = new JPanel(new BorderLayout());
MergeEditor editor = new MergeEditor(merge) {
@Override
public void done() {
dialog.dispose();
}
};
panel.add(editor,BorderLayout.CENTER);
dialog.setPreferredSize(new Dimension(1000,800));
dialog.getContentPane().add(panel);
dialog.pack();
dialog.setVisible(true);
}*/
}