Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPawel Pogorzelski2010-04-20 16:52:43 +0000
committerPawel Pogorzelski2010-04-20 16:52:43 +0000
commitf376c62e18cc69ab370f0d32f73b4e2d49bc55c2 (patch)
treef3f120d3289ecd1b10fd8e86129b75603fa9c09a /tests/org.eclipse.compare.tests/src
parent106b1d1c9812b5c533f5cb1034ac7ea695daf057 (diff)
downloadeclipse.platform.team-f376c62e18cc69ab370f0d32f73b4e2d49bc55c2.tar.gz
eclipse.platform.team-f376c62e18cc69ab370f0d32f73b4e2d49bc55c2.tar.xz
eclipse.platform.team-f376c62e18cc69ab370f0d32f73b4e2d49bc55c2.zip
Bug 306314 - Three-way merge wrongly detects conflict to adjoining (not overlapping) changes
Diffstat (limited to 'tests/org.eclipse.compare.tests/src')
-rw-r--r--tests/org.eclipse.compare.tests/src/org/eclipse/compare/tests/AllTests.java3
-rw-r--r--tests/org.eclipse.compare.tests/src/org/eclipse/compare/tests/RangeDifferencerThreeWayDiffTest.java132
2 files changed, 134 insertions, 1 deletions
diff --git a/tests/org.eclipse.compare.tests/src/org/eclipse/compare/tests/AllTests.java b/tests/org.eclipse.compare.tests/src/org/eclipse/compare/tests/AllTests.java
index 27799dbf5..27de4c9a8 100644
--- a/tests/org.eclipse.compare.tests/src/org/eclipse/compare/tests/AllTests.java
+++ b/tests/org.eclipse.compare.tests/src/org/eclipse/compare/tests/AllTests.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2000, 2009 IBM Corporation and others.
+ * Copyright (c) 2000, 2010 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -34,6 +34,7 @@ public class AllTests {
suite.addTestSuite(ContentMergeViewerTest.class);
suite.addTestSuite(PatchLinesTest.class);
suite.addTestSuite(PatchUITest.class);
+ suite.addTestSuite(RangeDifferencerThreeWayDiffTest.class);
// $JUnit-END$
return suite;
}
diff --git a/tests/org.eclipse.compare.tests/src/org/eclipse/compare/tests/RangeDifferencerThreeWayDiffTest.java b/tests/org.eclipse.compare.tests/src/org/eclipse/compare/tests/RangeDifferencerThreeWayDiffTest.java
new file mode 100644
index 000000000..c2fe41d7a
--- /dev/null
+++ b/tests/org.eclipse.compare.tests/src/org/eclipse/compare/tests/RangeDifferencerThreeWayDiffTest.java
@@ -0,0 +1,132 @@
+/*******************************************************************************
+ * Copyright (c) 2010 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.compare.tests;
+
+import junit.framework.TestCase;
+
+import org.eclipse.compare.contentmergeviewer.ITokenComparator;
+import org.eclipse.compare.internal.DocLineComparator;
+import org.eclipse.compare.rangedifferencer.RangeDifference;
+import org.eclipse.compare.rangedifferencer.RangeDifferencer;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jface.text.Document;
+
+
+public class RangeDifferencerThreeWayDiffTest extends TestCase {
+
+ static final String S= System.getProperty("line.separator"); //$NON-NLS-1$
+
+ public RangeDifferencerThreeWayDiffTest(String name) {
+ super(name);
+ }
+
+ public void testInsertConflict() {
+ String a = "A" + S + "B" + S + "C" + S + "D"; //$NON-NLS-1$
+ String l = "A" + S + "B" + S + "x" + S + "C" + S + "D"; //$NON-NLS-1$
+ String r = "A" + S + "B" + S + "y" + S + "C" + S + "D"; //$NON-NLS-1$
+
+ RangeDifference[] diffs= findRange(a, l, r);
+
+ assertEquals(3, diffs.length);
+ assertEquals(RangeDifference.NOCHANGE, diffs[0].kind());
+ assertEquals(RangeDifference.CONFLICT, diffs[1].kind());
+ assertEquals(RangeDifference.NOCHANGE, diffs[2].kind());
+ }
+
+ public void testChangeConflict() {
+ String a = "A" + S + "B" + S + "C" + S + "D"; //$NON-NLS-1$
+ String l = "A" + S + "b1" + S + "C" + S + "D"; //$NON-NLS-1$
+ String r = "A" + S + "b2" + S + "C" + S + "D"; //$NON-NLS-1$
+
+ RangeDifference[] diffs= findRange(a, l, r);
+
+ assertEquals(3, diffs.length);
+ assertEquals(RangeDifference.NOCHANGE, diffs[0].kind());
+ assertEquals(RangeDifference.CONFLICT, diffs[1].kind());
+ assertEquals(RangeDifference.NOCHANGE, diffs[2].kind());
+ }
+
+ public void testDeleteAndChangeConflict() {
+ String a = "A" + S + "B" + S + "C"; //$NON-NLS-1$
+ String l = "A" + S + "C"; //$NON-NLS-1$
+ String r = "A" + S + "b1" + S + "C"; //$NON-NLS-1$
+
+ RangeDifference[] diffs= findRange(a, l, r);
+
+ assertEquals(3, diffs.length);
+ assertEquals(RangeDifference.NOCHANGE, diffs[0].kind());
+ assertEquals(RangeDifference.CONFLICT, diffs[1].kind());
+ assertEquals(RangeDifference.NOCHANGE, diffs[2].kind());
+ }
+
+ public void testInsertWithinMultilineChangeConflict() {
+ String a = "A" + S + "B" + S + "C" + S + "D"; //$NON-NLS-1$
+ String l = "A" + S + "B" + S + "x" + S + "C" + S + "D"; //$NON-NLS-1$
+ String r = "A" + S + "x" + S + "y" + S + "D"; //$NON-NLS-1$
+
+ RangeDifference[] diffs= findRange(a, l, r);
+
+ assertEquals(3, diffs.length);
+ assertEquals(RangeDifference.NOCHANGE, diffs[0].kind());
+ assertEquals(RangeDifference.CONFLICT, diffs[1].kind());
+ assertEquals(RangeDifference.NOCHANGE, diffs[2].kind());
+ }
+
+ public void testAdjoiningChangesNoConflict() {
+ String a = "A" + S + "B" + S + "C" + S + "D"; //$NON-NLS-1$
+ String l = "A" + S + "b1" + S + "C" + S + "D"; //$NON-NLS-1$
+ String r = "A" + S + "B" + S + "c1" + S + "D"; //$NON-NLS-1$
+
+ RangeDifference[] diffs= findRange(a, l, r);
+
+ assertEquals(4, diffs.length);
+ assertEquals(RangeDifference.NOCHANGE, diffs[0].kind());
+ assertEquals(RangeDifference.LEFT, diffs[1].kind());
+ assertEquals(RangeDifference.RIGHT, diffs[2].kind());
+ assertEquals(RangeDifference.NOCHANGE, diffs[3].kind());
+ }
+
+ public void testAdjoiningInsertAndChangeNoConflict() {
+ String a = "A" + S + "B" + S + "C" + S + "D"; //$NON-NLS-1$
+ String l = "A" + S + "B" + S + "x" + S + "C" + S + "D"; //$NON-NLS-1$
+ String r = "A" + S + "B" + S + "c1" + S + "D"; //$NON-NLS-1$
+
+ RangeDifference[] diffs= findRange(a, l, r);
+
+ assertEquals(4, diffs.length);
+ assertEquals(RangeDifference.NOCHANGE, diffs[0].kind());
+ assertEquals(RangeDifference.LEFT, diffs[1].kind());
+ assertEquals(RangeDifference.RIGHT, diffs[2].kind());
+ assertEquals(RangeDifference.NOCHANGE, diffs[3].kind());
+ }
+
+
+ public void testAdjoiningMultilineChangeNoConflict() {
+ String a = "A" + S + "B" + S + "C" + S + "D"; //$NON-NLS-1$
+ String l = "A" + S + "x" + S + "y" + S + "D"; //$NON-NLS-1$
+ String r = "A" + S + "B" + S + "C" + S + "d1"; //$NON-NLS-1$
+
+ RangeDifference[] diffs= findRange(a, l, r);
+
+ assertEquals(3, diffs.length);
+ assertEquals(RangeDifference.NOCHANGE, diffs[0].kind());
+ assertEquals(RangeDifference.LEFT, diffs[1].kind());
+ assertEquals(RangeDifference.RIGHT, diffs[2].kind());
+ }
+
+ private RangeDifference[] findRange(String a, String l, String r) {
+ ITokenComparator ancestor= new DocLineComparator(new Document(a), null, false);
+ ITokenComparator left= new DocLineComparator(new Document(l), null, false);
+ ITokenComparator right= new DocLineComparator(new Document(r), null, false);
+ return RangeDifferencer.findRanges(new NullProgressMonitor(), ancestor, left, right);
+ }
+
+} \ No newline at end of file

Back to the top