Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/merge/RefineMergeTest.java')
-rw-r--r--plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/merge/RefineMergeTest.java83
1 files changed, 45 insertions, 38 deletions
diff --git a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/merge/RefineMergeTest.java b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/merge/RefineMergeTest.java
index 8a21ac2a2..bf91df850 100644
--- a/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/merge/RefineMergeTest.java
+++ b/plugins/org.eclipse.emf.compare.tests/src/org/eclipse/emf/compare/tests/merge/RefineMergeTest.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2015 Obeo.
+ * Copyright (c) 2015, 2016 Obeo 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,22 +7,25 @@
*
* Contributors:
* Obeo - initial API and implementation
+ * Martin Fleck - bug 507177
*******************************************************************************/
package org.eclipse.emf.compare.tests.merge;
+import static org.eclipse.emf.compare.DifferenceState.MERGED;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Set;
import org.eclipse.emf.compare.Diff;
-import org.eclipse.emf.compare.DifferenceState;
import org.eclipse.emf.compare.internal.spec.DiffSpec;
import org.eclipse.emf.compare.merge.AbstractMerger;
import org.junit.Test;
public class RefineMergeTest {
+ private static final boolean MERGE_RIGHT_TO_LEFT = true;
+
private final AbstractMerger merger = new AbstractMerger() {
public boolean isMergerFor(Diff target) {
return true;
@@ -30,11 +33,12 @@ public class RefineMergeTest {
};
/**
- * If a diff refines another, we have to check if the "macro" diff has to be merged with it.
+ * If a diff refines another, we have to check if the "macro" diff has to be merged with it. Refinement
+ * diffs can only be merged together as a whole. Therefore, refined diffs should have the refining diffs
+ * as dependency and refining diffs the refined diff as resulting diff.
*/
@Test
public void testRefineOnGetDirectResultingMerges() {
-
// Create diffs
Diff diff1 = new DiffSpec();
Diff diff2 = new DiffSpec();
@@ -43,45 +47,48 @@ public class RefineMergeTest {
diff3.getRefinedBy().add(diff1);
diff3.getRefinedBy().add(diff2);
- // First call : diff3 must not to be in the merge dependencies, cause diff2 is not merged.
- Set<Diff> dependencies = merger.getDirectResultingMerges(diff1, true);
- assertTrue(dependencies.isEmpty());
- // Merge diff2
- diff2.setState(DifferenceState.MERGED);
- // Second call : diff3 must be in the merge dependencies, cause diff2 has been merged.
- dependencies = merger.getDirectResultingMerges(diff1, true);
- assertEquals(1, dependencies.size());
- assertTrue(dependencies.contains(diff3));
+ // First call: diff3 must be merged, because refinements are only merged together as a whole.
+ Set<Diff> directMergeDependencies = merger.getDirectMergeDependencies(diff1, MERGE_RIGHT_TO_LEFT);
+ Set<Diff> resultingMerges = merger.getDirectResultingMerges(diff1, MERGE_RIGHT_TO_LEFT);
+ assertEquals(1, resultingMerges.size());
+ assertTrue(resultingMerges.contains(diff3));
+ assertTrue(directMergeDependencies.isEmpty());
- }
+ directMergeDependencies = merger.getDirectMergeDependencies(diff2, MERGE_RIGHT_TO_LEFT);
+ resultingMerges = merger.getDirectResultingMerges(diff2, MERGE_RIGHT_TO_LEFT);
+ assertTrue(directMergeDependencies.isEmpty());
+ assertEquals(1, resultingMerges.size());
+ assertTrue(resultingMerges.contains(diff3));
- @Test
- public void testRefineOnGetDirectResultingMerges_2() {
+ directMergeDependencies = merger.getDirectMergeDependencies(diff3, MERGE_RIGHT_TO_LEFT);
+ resultingMerges = merger.getDirectResultingMerges(diff3, MERGE_RIGHT_TO_LEFT);
+ assertEquals(2, directMergeDependencies.size());
+ assertTrue(directMergeDependencies.contains(diff1));
+ assertTrue(directMergeDependencies.contains(diff2));
+ assertTrue(resultingMerges.isEmpty());
- // Create diffs
- Diff diff1 = new DiffSpec();
- Diff diff2 = new DiffSpec();
- Diff diff3 = new DiffSpec();
+ // Merge diff2
+ diff2.setState(MERGED);
- Diff diff4 = new DiffSpec();
- diff4.getRefinedBy().add(diff1);
- diff4.getRefinedBy().add(diff2);
- diff4.getRefinedBy().add(diff3);
+ // Second call: there should not be any changes
+ directMergeDependencies = merger.getDirectMergeDependencies(diff1, MERGE_RIGHT_TO_LEFT);
+ resultingMerges = merger.getDirectResultingMerges(diff1, MERGE_RIGHT_TO_LEFT);
+ assertEquals(1, resultingMerges.size());
+ assertTrue(resultingMerges.contains(diff3));
+ assertTrue(directMergeDependencies.isEmpty());
- // First call : diff4 must not to be in the merge dependencies, cause diff2 & diff3 are not merged.
- Set<Diff> dependencies = merger.getDirectResultingMerges(diff1, true);
- assertTrue(dependencies.isEmpty());
- // Merge diff2
- diff2.setState(DifferenceState.MERGED);
- // Second call : diff4 must not to be in the merge dependencies, cause diff3 is not merged.
- dependencies = merger.getDirectResultingMerges(diff1, true);
- assertTrue(dependencies.isEmpty());
- // Merge diff3
- diff3.setState(DifferenceState.MERGED);
- // Third call : diff4 must be in the merge dependencies, cause diff2 & diff3 have been merged.
- dependencies = merger.getDirectResultingMerges(diff1, true);
- assertEquals(1, dependencies.size());
- assertTrue(dependencies.contains(diff4));
+ directMergeDependencies = merger.getDirectMergeDependencies(diff2, MERGE_RIGHT_TO_LEFT);
+ resultingMerges = merger.getDirectResultingMerges(diff2, MERGE_RIGHT_TO_LEFT);
+ assertTrue(directMergeDependencies.isEmpty());
+ assertEquals(1, resultingMerges.size());
+ assertTrue(resultingMerges.contains(diff3));
+ directMergeDependencies = merger.getDirectMergeDependencies(diff3, MERGE_RIGHT_TO_LEFT);
+ resultingMerges = merger.getDirectResultingMerges(diff3, MERGE_RIGHT_TO_LEFT);
+ assertEquals(2, directMergeDependencies.size());
+ assertTrue(directMergeDependencies.contains(diff1));
+ assertTrue(directMergeDependencies.contains(diff2));
+ assertTrue(resultingMerges.isEmpty());
}
+
}

Back to the top