Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/TestNonRegPseudoConflict_484576.java49
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/NonReg484576Data.java21
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/ancestor.uml13
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/left.uml9
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/right.uml12
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/suite/AllTests.java4
-rw-r--r--plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/conflict/DefaultConflictDetector.java2
7 files changed, 108 insertions, 2 deletions
diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/TestNonRegPseudoConflict_484576.java b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/TestNonRegPseudoConflict_484576.java
new file mode 100644
index 000000000..b3e8bcbd2
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/TestNonRegPseudoConflict_484576.java
@@ -0,0 +1,49 @@
+package org.eclipse.emf.compare.uml2.tests.nonreg.bug484576_pseudoconflicts;
+
+import static com.google.common.collect.Collections2.filter;
+import static org.junit.Assert.assertEquals;
+
+import com.google.common.base.Predicate;
+
+import java.io.IOException;
+
+import org.eclipse.emf.compare.Comparison;
+import org.eclipse.emf.compare.Conflict;
+import org.eclipse.emf.compare.ConflictKind;
+import org.eclipse.emf.compare.uml2.tests.AbstractUMLInputData;
+import org.eclipse.emf.compare.uml2.tests.AbstractUMLTest;
+import org.eclipse.emf.compare.uml2.tests.nonreg.bug484576_pseudoconflicts.data.NonReg484576Data;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.junit.Test;
+
+/**
+ * This test makes sure that bug 484576 is fixed. It means checking that pseudo-conflicts contain only
+ * equivalent diffs on each side and don't aggregate several unrelated diffs.
+ *
+ * @author <a href="mailto:laurent.delaigue@obeo.fr">Laurent Delaigue</a>
+ */
+public class TestNonRegPseudoConflict_484576 extends AbstractUMLTest {
+
+ private NonReg484576Data input = new NonReg484576Data();
+
+ @Test
+ public void testOnePseudoConflictPerDiff() throws IOException {
+ final Resource ancestor = input.getAncestor();
+ final Resource left = input.getLeft();
+ final Resource right = input.getRight();
+
+ final Comparison comparison = compare(left, right, ancestor);
+
+ assertEquals(3, comparison.getConflicts().size());
+ assertEquals(2, filter(comparison.getConflicts(), new Predicate<Conflict>() {
+ public boolean apply(Conflict conflict) {
+ return conflict.getKind() == ConflictKind.PSEUDO;
+ }
+ }).size());
+ }
+
+ @Override
+ protected AbstractUMLInputData getInput() {
+ return input;
+ }
+}
diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/NonReg484576Data.java b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/NonReg484576Data.java
new file mode 100644
index 000000000..00e733074
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/NonReg484576Data.java
@@ -0,0 +1,21 @@
+package org.eclipse.emf.compare.uml2.tests.nonreg.bug484576_pseudoconflicts.data;
+
+import java.io.IOException;
+
+import org.eclipse.emf.compare.uml2.tests.AbstractUMLInputData;
+import org.eclipse.emf.ecore.resource.Resource;
+
+public class NonReg484576Data extends AbstractUMLInputData {
+
+ public Resource getLeft() throws IOException {
+ return loadFromClassLoader("left.uml"); //$NON-NLS-1$
+ }
+
+ public Resource getRight() throws IOException {
+ return loadFromClassLoader("right.uml"); //$NON-NLS-1$
+ }
+
+ public Resource getAncestor() throws IOException {
+ return loadFromClassLoader("ancestor.uml"); //$NON-NLS-1$
+ }
+}
diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/ancestor.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/ancestor.uml
new file mode 100644
index 000000000..c8fea2fd9
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/ancestor.uml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_ELFLoKQDEeW16bbjeutN8w">
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gh7HMKQDEeW16bbjeutN8w" name="pA">
+ <packagedElement xmi:type="uml:Package" xmi:id="_IpAvgKQDEeW16bbjeutN8w" name="pB">
+ <packagedElement xmi:type="uml:Package" xmi:id="_Ksu6wKQDEeW16bbjeutN8w" name="pC"/>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Package" xmi:id="_hQz5sKTJEeW_uZh47B1XEw" name="pD"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_MNjNQKQDEeW16bbjeutN8w" name="A to B" client="_IpAvgKQDEeW16bbjeutN8w" supplier="_Gh7HMKQDEeW16bbjeutN8w"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_Vc21cKQDEeW16bbjeutN8w" name="B to C" client="_Ksu6wKQDEeW16bbjeutN8w" supplier="_IpAvgKQDEeW16bbjeutN8w"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_eU9MkKTJEeW_uZh47B1XEw" name="A to C" client="_Ksu6wKQDEeW16bbjeutN8w" supplier="_Gh7HMKQDEeW16bbjeutN8w"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_elbRgKTJEeW_uZh47B1XEw" name="A to D" client="_hQz5sKTJEeW_uZh47B1XEw" supplier="_Gh7HMKQDEeW16bbjeutN8w"/>
+</uml:Model>
diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/left.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/left.uml
new file mode 100644
index 000000000..20a37e4e8
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/left.uml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_ELFLoKQDEeW16bbjeutN8w">
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gh7HMKQDEeW16bbjeutN8w" name="pA">
+ <packagedElement xmi:type="uml:Package" xmi:id="_IpAvgKQDEeW16bbjeutN8w" name="pB">
+ <packagedElement xmi:type="uml:Package" xmi:id="_Ksu6wKQDEeW16bbjeutN8w" name="pC"/>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_MNjNQKQDEeW16bbjeutN8w" name="A to B" client="_IpAvgKQDEeW16bbjeutN8w" supplier="_Gh7HMKQDEeW16bbjeutN8w"/>
+</uml:Model>
diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/right.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/right.uml
new file mode 100644
index 000000000..68b62fe48
--- /dev/null
+++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/nonreg/bug484576_pseudoconflicts/data/right.uml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_ELFLoKQDEeW16bbjeutN8w">
+ <packagedElement xmi:type="uml:Package" xmi:id="_Gh7HMKQDEeW16bbjeutN8w" name="pA">
+ <packagedElement xmi:type="uml:Package" xmi:id="_IpAvgKQDEeW16bbjeutN8w" name="pB">
+ <packagedElement xmi:type="uml:Package" xmi:id="_Ksu6wKQDEeW16bbjeutN8w" name="pC">
+ <packagedElement xmi:type="uml:Package" xmi:id="_hQz5sKTJEeW_uZh47B1XEw" name="pD"/>
+ </packagedElement>
+ </packagedElement>
+ </packagedElement>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_MNjNQKQDEeW16bbjeutN8w" name="A to B" client="_IpAvgKQDEeW16bbjeutN8w" supplier="_Gh7HMKQDEeW16bbjeutN8w"/>
+ <packagedElement xmi:type="uml:Dependency" xmi:id="_elbRgKTJEeW_uZh47B1XEw" name="A to D" client="_hQz5sKTJEeW_uZh47B1XEw" supplier="_Gh7HMKQDEeW16bbjeutN8w"/>
+</uml:Model>
diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/suite/AllTests.java b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/suite/AllTests.java
index 1fe3e2719..d20020be0 100644
--- a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/suite/AllTests.java
+++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/suite/AllTests.java
@@ -42,6 +42,7 @@ import org.eclipse.emf.compare.uml2.tests.include.AddIncludeTest;
import org.eclipse.emf.compare.uml2.tests.merge.ExtensionMergeTest;
import org.eclipse.emf.compare.uml2.tests.merge.MergeDiffInvolvingRefineDiffTest;
import org.eclipse.emf.compare.uml2.tests.message.AddMessageTest;
+import org.eclipse.emf.compare.uml2.tests.nonreg.bug484576_pseudoconflicts.TestNonRegPseudoConflict_484576;
import org.eclipse.emf.compare.uml2.tests.opaque.OpaqueElementBodyChangeDiffTest;
import org.eclipse.emf.compare.uml2.tests.opaque.OpaqueElementBodyChangeMergeTest;
import org.eclipse.emf.compare.uml2.tests.profiles.DynamicProfileTest;
@@ -75,7 +76,8 @@ import org.junit.runners.Suite.SuiteClasses;
ImplicationsTransitionTest.class, ImplicationsInterfaceRealizationTest.class,
StaticStereotypedElementItemProviderTest.class, DynamicStereotypedElementItemProviderTest.class,
OpaqueElementBodyChangeDiffTest.class, OpaqueElementBodyChangeMergeTest.class,
- DanglingStereotypeApplicationTest.class, MergeDiffInvolvingRefineDiffTest.class })
+ DanglingStereotypeApplicationTest.class, MergeDiffInvolvingRefineDiffTest.class,
+ TestNonRegPseudoConflict_484576.class })
public class AllTests {
/**
diff --git a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/conflict/DefaultConflictDetector.java b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/conflict/DefaultConflictDetector.java
index eadfa9d9f..cc16a7020 100644
--- a/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/conflict/DefaultConflictDetector.java
+++ b/plugins/org.eclipse.emf.compare/src/org/eclipse/emf/compare/conflict/DefaultConflictDetector.java
@@ -795,7 +795,7 @@ public class DefaultConflictDetector implements IConflictDetector {
if (comparison.getEqualityHelper().matchingValues(deletedValue, movedValue)) {
if (candidate.getKind() == DifferenceKind.MOVE) {
conflictOn(comparison, diff, candidate, ConflictKind.REAL);
- } else {
+ } else if (diff.getMatch() == candidate.getMatch()) {
conflictOn(comparison, diff, candidate, ConflictKind.PSEUDO);
}
}

Back to the top