Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/conflict/ConflictSearchTest.java94
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/suite/AllTests.java5
-rw-r--r--plugins/org.eclipse.emf.compare/META-INF/MANIFEST.MF1
-rw-r--r--plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/internal/conflict/AbstractConflictSearch.java14
4 files changed, 110 insertions, 4 deletions
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/conflict/ConflictSearchTest.java b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/conflict/ConflictSearchTest.java
new file mode 100644
index 000000000..7e5be3e6b
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/conflict/ConflictSearchTest.java
@@ -0,0 +1,94 @@
+package org.eclipse.emf.compare.tests.conflict;
+
+import static java.util.Arrays.asList;
+import static org.eclipse.emf.compare.ConflictKind.REAL;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.eclipse.emf.common.util.BasicMonitor;
+import org.eclipse.emf.compare.CompareFactory;
+import org.eclipse.emf.compare.Comparison;
+import org.eclipse.emf.compare.Conflict;
+import org.eclipse.emf.compare.ConflictKind;
+import org.eclipse.emf.compare.Diff;
+import org.eclipse.emf.compare.Equivalence;
+import org.eclipse.emf.compare.Match;
+import org.eclipse.emf.compare.internal.conflict.AbstractConflictSearch;
+import org.eclipse.emf.compare.internal.conflict.ComparisonIndex;
+import org.junit.Before;
+import org.junit.Test;
+
+public class ConflictSearchTest {
+
+ private Diff diff;
+
+ private Match match;
+
+ private Comparison comparison;
+
+ private ComparisonIndex index;
+
+ private Diff other;
+
+ private Diff equivToDiff;
+
+ private Diff equivToOther;
+
+ private Equivalence equivDiff;
+
+ private Equivalence equivOther;
+
+ /**
+ * @see <a href="http://eclip.se/510704">Bug 510704</a>
+ */
+ @Test
+ public void testEquivalentDiffsAreInSameConflict() {
+ // Given
+ TestConflictSearch search = new TestConflictSearch(diff, index);
+ // When
+ search.conflict(other, REAL);
+ // then
+ assertEquals(1, comparison.getConflicts().size());
+ Conflict conflict = comparison.getConflicts().get(0);
+ assertEquals(4, conflict.getDifferences().size());
+ assertTrue(conflict.getDifferences().containsAll(asList(diff, equivToDiff, other, equivToOther)));
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ comparison = CompareFactory.eINSTANCE.createComparison();
+ match = CompareFactory.eINSTANCE.createMatch();
+ comparison.getMatches().add(match);
+ diff = CompareFactory.eINSTANCE.createDiff();
+ diff.setMatch(match);
+ other = CompareFactory.eINSTANCE.createDiff();
+ other.setMatch(match);
+ equivToDiff = CompareFactory.eINSTANCE.createDiff();
+ equivToDiff.setMatch(match);
+ equivToOther = CompareFactory.eINSTANCE.createDiff();
+ equivToOther.setMatch(match);
+ equivDiff = CompareFactory.eINSTANCE.createEquivalence();
+ equivOther = CompareFactory.eINSTANCE.createEquivalence();
+ equivDiff.getDifferences().addAll(asList(diff, equivToDiff));
+ equivOther.getDifferences().addAll(asList(other, equivToOther));
+ index = ComparisonIndex.index(comparison, new BasicMonitor());
+ }
+
+ public static final class TestConflictSearch extends AbstractConflictSearch<Diff> {
+
+ public TestConflictSearch(Diff diff, ComparisonIndex index) {
+ super(diff, index, new BasicMonitor());
+ }
+
+ @Override
+ public void detectConflicts() {
+ // Nothing to do
+ }
+
+ @Override
+ public void conflict(Diff other, ConflictKind kind) {
+ super.conflict(other, kind);
+ }
+
+ }
+}
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/suite/AllTests.java b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/suite/AllTests.java
index 69b2cd077..a69af8112 100644
--- a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/suite/AllTests.java
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/suite/AllTests.java
@@ -17,6 +17,7 @@ package org.eclipse.emf.compare.tests.suite;
import org.eclipse.emf.compare.ComparePackage;
import org.eclipse.emf.compare.tests.command.CommandStackTestSuite;
import org.eclipse.emf.compare.tests.conflict.ConflictDetectionTest;
+import org.eclipse.emf.compare.tests.conflict.ConflictSearchTest;
import org.eclipse.emf.compare.tests.conflict.MultiLineAttributeConflictDetectionTest;
import org.eclipse.emf.compare.tests.conflict.PseudoConflictDetectionTest;
import org.eclipse.emf.compare.tests.conflict.data.bug484557.Bug484557ConflictTest;
@@ -106,8 +107,8 @@ import junit.textui.TestRunner;
Bug485266_MoveDeleteConflict_Test.class, ResourceAttachmentChangeBug492261.class,
RankedAdapterFactoryRegistryTest.class, ComparisonScopeAdapterTest.class,
EMFComparePredicatesTest.class, ImplicationsMergeTest.class, GraphTest.class,
- ConflictImplicationsTest_Bug484579.class, PseudoConflictDetectionTest.class,
- ComplexMergeTest.class, })
+ ConflictImplicationsTest_Bug484579.class, PseudoConflictDetectionTest.class, ComplexMergeTest.class,
+ ConflictSearchTest.class, })
public class AllTests {
/**
* Standalone launcher for all of compare's tests.
diff --git a/plugins/org.eclipse.emf.compare/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.compare/META-INF/MANIFEST.MF
index 941bdaaad..890f6fd4a 100644
--- a/plugins/org.eclipse.emf.compare/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.compare/META-INF/MANIFEST.MF
@@ -14,6 +14,7 @@ Export-Package: org.eclipse.emf.compare,
org.eclipse.emf.compare.graph,
org.eclipse.emf.compare.impl,
org.eclipse.emf.compare.internal;x-friends:="org.eclipse.emf.compare.logical,org.eclipse.emf.compare.ide,org.eclipse.emf.compare.edit",
+ org.eclipse.emf.compare.internal.conflict;x-internal:=true,
org.eclipse.emf.compare.internal.dmp;x-friends:="org.eclipse.emf.compare.ide.ui",
org.eclipse.emf.compare.internal.merge;x-friends:="org.eclipse.emf.compare.ide.ui,org.eclipse.emf.compare.rcp.ui,org.eclipse.emf.compare.edit",
org.eclipse.emf.compare.internal.postprocessor.factories;x-internal:=true,
diff --git a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/internal/conflict/AbstractConflictSearch.java b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/internal/conflict/AbstractConflictSearch.java
index 4adecb1b2..90592af95 100644
--- a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/internal/conflict/AbstractConflictSearch.java
+++ b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/internal/conflict/AbstractConflictSearch.java
@@ -13,13 +13,16 @@ package org.eclipse.emf.compare.internal.conflict;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
+import static com.google.common.collect.Sets.newLinkedHashSet;
import static org.eclipse.emf.compare.ConflictKind.PSEUDO;
import static org.eclipse.emf.compare.ConflictKind.REAL;
import com.google.common.base.Predicate;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import java.util.List;
+import java.util.Set;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.Monitor;
@@ -307,8 +310,15 @@ public abstract class AbstractConflictSearch<T extends Diff> {
toBeMerged.getDifferences().clear();
}
- conflict.getDifferences().add(diff);
- conflict.getDifferences().add(other);
+ Set<Diff> toAdd = newLinkedHashSet();
+ for (Diff conflicting : ImmutableSet.of(diff, other)) {
+ if (conflicting.getEquivalence() == null) {
+ toAdd.add(conflicting);
+ } else {
+ toAdd.addAll(conflicting.getEquivalence().getDifferences());
+ }
+ }
+ conflict.getDifferences().addAll(toAdd);
}
/**

Back to the top