Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.compare.diagram.papyrus.tests/src/org/eclipse/emf/compare/diagram/papyrus/tests/merge/NodeMergeTest.java')
-rw-r--r--plugins/org.eclipse.emf.compare.diagram.papyrus.tests/src/org/eclipse/emf/compare/diagram/papyrus/tests/merge/NodeMergeTest.java39
1 files changed, 36 insertions, 3 deletions
diff --git a/plugins/org.eclipse.emf.compare.diagram.papyrus.tests/src/org/eclipse/emf/compare/diagram/papyrus/tests/merge/NodeMergeTest.java b/plugins/org.eclipse.emf.compare.diagram.papyrus.tests/src/org/eclipse/emf/compare/diagram/papyrus/tests/merge/NodeMergeTest.java
index ee11f05ff..a46dbb481 100644
--- a/plugins/org.eclipse.emf.compare.diagram.papyrus.tests/src/org/eclipse/emf/compare/diagram/papyrus/tests/merge/NodeMergeTest.java
+++ b/plugins/org.eclipse.emf.compare.diagram.papyrus.tests/src/org/eclipse/emf/compare/diagram/papyrus/tests/merge/NodeMergeTest.java
@@ -7,19 +7,22 @@
*
* Contributors:
* Obeo - initial API and implementation
- * Philip Langer - bug 482404
+ * Philip Langer - bug 482404, 501864
* Alexandra Buzila - Bug 479449
*******************************************************************************/
package org.eclipse.emf.compare.diagram.papyrus.tests.merge;
import static com.google.common.base.Predicates.and;
import static com.google.common.base.Predicates.instanceOf;
+import static com.google.common.collect.Iterables.tryFind;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.fromSide;
+import static org.eclipse.emf.compare.utils.EMFComparePredicates.hasConflict;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.ofKind;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.valueNameMatches;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
+import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
@@ -27,8 +30,10 @@ import java.io.IOException;
import java.util.regex.Pattern;
import org.eclipse.emf.common.util.BasicMonitor;
+import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.compare.AttributeChange;
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.DifferenceKind;
@@ -1492,12 +1497,40 @@ public class NodeMergeTest extends AbstractTest {
private static Predicate<Diff> isMergedFor3way(final Diff diff) {
return new Predicate<Diff>() {
public boolean apply(Diff input) {
- return input.getConflict() != null && input.getConflict().getKind() == ConflictKind.PSEUDO
- && input.getConflict().getDifferences().contains(diff);
+ final Conflict conflict = getConflictOrConflictOfRefining(input);
+ return diff != null && conflict != null && conflict.getKind() == ConflictKind.PSEUDO
+ && containsDiffOrAnyOfItsRefiningDiffs(diff, conflict);
}
};
}
+ private static Conflict getConflictOrConflictOfRefining(Diff input) {
+ Conflict conflict = null;
+ if (input.getConflict() != null) {
+ conflict = input.getConflict();
+ } else {
+ Optional<Diff> conflictingRefiningDiff = tryFind(input.getRefinedBy(), hasConflict());
+ if (conflictingRefiningDiff.isPresent()) {
+ conflict = conflictingRefiningDiff.get().getConflict();
+ }
+ }
+ return conflict;
+ }
+
+ private static boolean containsDiffOrAnyOfItsRefiningDiffs(Diff diff, Conflict conflict) {
+ return conflict.getDifferences().contains(diff)
+ || containsAny(conflict.getDifferences(), diff.getRefinedBy());
+ }
+
+ private static boolean containsAny(EList<Diff> diffs, EList<Diff> toBeContained) {
+ for (Diff currentDiff : toBeContained) {
+ if (Iterables.contains(diffs, currentDiff)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
@Override
protected void registerPostProcessors() {
super.registerPostProcessors();

Back to the top