diff options
author | Pawel Pogorzelski | 2010-04-20 16:52:43 +0000 |
---|---|---|
committer | Pawel Pogorzelski | 2010-04-20 16:52:43 +0000 |
commit | f376c62e18cc69ab370f0d32f73b4e2d49bc55c2 (patch) | |
tree | f3f120d3289ecd1b10fd8e86129b75603fa9c09a /tests/org.eclipse.compare.tests/src | |
parent | 106b1d1c9812b5c533f5cb1034ac7ea695daf057 (diff) | |
download | eclipse.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.java | 3 | ||||
-rw-r--r-- | tests/org.eclipse.compare.tests/src/org/eclipse/compare/tests/RangeDifferencerThreeWayDiffTest.java | 132 |
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 |