Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/opaque/OpaqueElementBodyChangeMergeTest.java')
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/opaque/OpaqueElementBodyChangeMergeTest.java97
1 files changed, 79 insertions, 18 deletions
diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/opaque/OpaqueElementBodyChangeMergeTest.java b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/opaque/OpaqueElementBodyChangeMergeTest.java
index 2a94bc23a..3b0d0ec7b 100644
--- a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/opaque/OpaqueElementBodyChangeMergeTest.java
+++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/opaque/OpaqueElementBodyChangeMergeTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2014, 2015 EclipseSource Muenchen GmbH and others.
+ * Copyright (c) 2014, 2017 EclipseSource Muenchen GmbH 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
@@ -7,6 +7,7 @@
*
* Contributors:
* Philip Langer - initial API and implementation
+ * Martin Fleck - bug 516060
*******************************************************************************/
package org.eclipse.emf.compare.uml2.tests.opaque;
@@ -30,7 +31,8 @@ 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.merge.IMerger;
+import org.eclipse.emf.compare.merge.BatchMerger;
+import org.eclipse.emf.compare.merge.IBatchMerger;
import org.eclipse.emf.compare.uml2.internal.OpaqueElementBodyChange;
import org.eclipse.emf.compare.uml2.tests.AbstractUMLInputData;
import org.eclipse.emf.compare.uml2.tests.AbstractUMLTest;
@@ -102,6 +104,24 @@ public class OpaqueElementBodyChangeMergeTest extends AbstractUMLTest {
+ "and concurrent changes" + NL //
+ "of them.";
+ private static final String A2_ORIGIN = "This is a" + NL //
+ + "test with multi-line" + NL //
+ + "String attribute" + NL //
+ + "and concurrent changes" + NL //
+ + "of them.";
+
+ private static final String A2_LEFT = "This is a" + NL //
+ + "test with multi-line (changed)" + NL //
+ + "String attribute" + NL //
+ + "and concurrent changes" + NL //
+ + "of them.";
+
+ private static final String A2_RIGHT = "This is a" + NL //
+ + "(changed)test with multi-line" + NL //
+ + "String attribute" + NL //
+ + "and concurrent changes" + NL //
+ + "of them.";
+
private static final Predicate<Diff> IS_OPAQUE_ELEMENT_CHANGE = new Predicate<Diff>() {
public boolean apply(Diff diff) {
return diff instanceof OpaqueElementBodyChange;
@@ -237,6 +257,55 @@ public class OpaqueElementBodyChangeMergeTest extends AbstractUMLTest {
}
@Test
+ public void testA2UseCaseLtoR() throws IOException {
+ Resource origin = input.getA2Origin();
+ Resource left = input.getA2Left();
+ Resource right = input.getA2Right();
+
+ Comparison comparison = compare(left, right, origin);
+ assertOneRealConflictOnOpaqueElementBodyChange(comparison);
+ assertA2UseCaseBody(origin.getEObject(OPAQUE_ACTION1_ID), A2_ORIGIN);
+ assertA2UseCaseBody(left.getEObject(OPAQUE_ACTION1_ID), A2_LEFT);
+ assertA2UseCaseBody(right.getEObject(OPAQUE_ACTION1_ID), A2_RIGHT);
+
+ // real conflict, apply left side
+ applyLeftOpaqueElementBodyChangesToRight(comparison);
+
+ assertA2UseCaseBody(origin.getEObject(OPAQUE_ACTION1_ID), A2_ORIGIN);
+ assertA2UseCaseBody(left.getEObject(OPAQUE_ACTION1_ID), A2_LEFT);
+ assertA2UseCaseBody(right.getEObject(OPAQUE_ACTION1_ID), A2_LEFT);
+ }
+
+ @Test
+ public void testA2UseCaseRtoL() throws IOException {
+ Resource origin = input.getA2Origin();
+ Resource left = input.getA2Left();
+ Resource right = input.getA2Right();
+
+ Comparison comparison = compare(left, right, origin);
+ assertOneRealConflictOnOpaqueElementBodyChange(comparison);
+ assertA2UseCaseBody(origin.getEObject(OPAQUE_ACTION1_ID), A2_ORIGIN);
+ assertA2UseCaseBody(left.getEObject(OPAQUE_ACTION1_ID), A2_LEFT);
+ assertA2UseCaseBody(right.getEObject(OPAQUE_ACTION1_ID), A2_RIGHT);
+
+ // real conflict, apply right side
+ applyRightOpaqueElementBodyChangesToLeft(comparison);
+
+ assertA2UseCaseBody(origin.getEObject(OPAQUE_ACTION1_ID), A2_ORIGIN);
+ assertA2UseCaseBody(left.getEObject(OPAQUE_ACTION1_ID), A2_RIGHT);
+ assertA2UseCaseBody(right.getEObject(OPAQUE_ACTION1_ID), A2_RIGHT);
+ }
+
+ private void assertA2UseCaseBody(EObject eObject, String expectedBody) {
+ assertTrue(eObject instanceof OpaqueAction);
+ OpaqueAction opaqueAction = (OpaqueAction)eObject;
+ assertEquals(1, opaqueAction.getBodies().size());
+ assertEquals(1, opaqueAction.getLanguages().size());
+ assertEquals(JAVA, opaqueAction.getLanguages().get(0));
+ assertEquals(expectedBody, opaqueAction.getBodies().get(0));
+ }
+
+ @Test
public void testA3UseCase() throws IOException {
Resource origin = input.getA3Origin();
Resource left = input.getA3Left();
@@ -670,40 +739,32 @@ public class OpaqueElementBodyChangeMergeTest extends AbstractUMLTest {
final EList<Diff> allDifferences = comparison.getDifferences();
final Iterable<Diff> rightOpaqueElementBodyChanges = filter(allDifferences,
and(IS_OPAQUE_ELEMENT_CHANGE, fromSide(RIGHT)));
- for (Diff diff : rightOpaqueElementBodyChanges) {
- IMerger merger = getMergerRegistry().getHighestRankingMerger(diff);
- merger.copyRightToLeft(diff, new BasicMonitor());
- }
+ final IBatchMerger merger = new BatchMerger(getMergerRegistry());
+ merger.copyAllRightToLeft(rightOpaqueElementBodyChanges, new BasicMonitor());
}
private void revertLeftOpaqueElementBodyChanges(Comparison comparison) {
final EList<Diff> allDifferences = comparison.getDifferences();
final Iterable<Diff> leftOpaqueElementBodyChanges = filter(allDifferences,
and(IS_OPAQUE_ELEMENT_CHANGE, fromSide(LEFT)));
- for (Diff diff : leftOpaqueElementBodyChanges) {
- IMerger merger = getMergerRegistry().getHighestRankingMerger(diff);
- merger.copyRightToLeft(diff, new BasicMonitor());
- }
+ final IBatchMerger merger = new BatchMerger(getMergerRegistry());
+ merger.copyAllRightToLeft(leftOpaqueElementBodyChanges, new BasicMonitor());
}
private void revertRightOpaqueElementBodyChanges(Comparison comparison) {
final EList<Diff> allDifferences = comparison.getDifferences();
final Iterable<Diff> rightOpaqueElementBodyChanges = filter(allDifferences,
and(IS_OPAQUE_ELEMENT_CHANGE, fromSide(RIGHT)));
- for (Diff diff : rightOpaqueElementBodyChanges) {
- IMerger merger = getMergerRegistry().getHighestRankingMerger(diff);
- merger.copyLeftToRight(diff, new BasicMonitor());
- }
+ final IBatchMerger merger = new BatchMerger(getMergerRegistry());
+ merger.copyAllLeftToRight(rightOpaqueElementBodyChanges, new BasicMonitor());
}
private void applyLeftOpaqueElementBodyChangesToRight(Comparison comparison) {
final EList<Diff> allDifferences = comparison.getDifferences();
final Iterable<Diff> leftOpaqueElementBodyChanges = filter(allDifferences,
and(IS_OPAQUE_ELEMENT_CHANGE, fromSide(LEFT)));
- for (Diff diff : leftOpaqueElementBodyChanges) {
- IMerger merger = getMergerRegistry().getHighestRankingMerger(diff);
- merger.copyLeftToRight(diff, new BasicMonitor());
- }
+ final IBatchMerger merger = new BatchMerger(getMergerRegistry());
+ merger.copyAllLeftToRight(leftOpaqueElementBodyChanges, new BasicMonitor());
}
private void assertNoRealConflict(Comparison comparison) {

Back to the top