diff options
Diffstat (limited to 'plugins/org.eclipse.emf.compare.uml2.rcp.ui.tests/src/org/eclipse/emf/compare/uml2/rcp/ui/tests/groups/ConflictsGroupTest.java')
-rw-r--r-- | plugins/org.eclipse.emf.compare.uml2.rcp.ui.tests/src/org/eclipse/emf/compare/uml2/rcp/ui/tests/groups/ConflictsGroupTest.java | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/plugins/org.eclipse.emf.compare.uml2.rcp.ui.tests/src/org/eclipse/emf/compare/uml2/rcp/ui/tests/groups/ConflictsGroupTest.java b/plugins/org.eclipse.emf.compare.uml2.rcp.ui.tests/src/org/eclipse/emf/compare/uml2/rcp/ui/tests/groups/ConflictsGroupTest.java index f526960c8..fc072b076 100644 --- a/plugins/org.eclipse.emf.compare.uml2.rcp.ui.tests/src/org/eclipse/emf/compare/uml2/rcp/ui/tests/groups/ConflictsGroupTest.java +++ b/plugins/org.eclipse.emf.compare.uml2.rcp.ui.tests/src/org/eclipse/emf/compare/uml2/rcp/ui/tests/groups/ConflictsGroupTest.java @@ -13,6 +13,7 @@ package org.eclipse.emf.compare.uml2.rcp.ui.tests.groups; import static org.eclipse.emf.compare.utils.EMFComparePredicates.hasConflict; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; import com.google.common.collect.Lists; @@ -22,14 +23,17 @@ import java.util.List; import org.eclipse.emf.common.notify.AdapterFactory; import org.eclipse.emf.compare.Comparison; +import org.eclipse.emf.compare.Conflict; import org.eclipse.emf.compare.ConflictKind; import org.eclipse.emf.compare.provider.spec.CompareItemProviderAdapterFactorySpec; import org.eclipse.emf.compare.rcp.ui.internal.EMFCompareRCPUIMessages; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.ThreeWayComparisonGroupProvider.ConflictsGroupImpl; +import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.groups.impl.ThreeWayComparisonGroupProvider.ConflictsGroupImpl.CompositeConflict; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.nodes.ConflictNode; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.nodes.DiffNode; import org.eclipse.emf.compare.rcp.ui.internal.structuremergeviewer.nodes.MatchNode; import org.eclipse.emf.compare.rcp.ui.tests.structuremergeviewer.groups.provider.AbstractTestTreeNodeItemProviderAdapter; +import org.eclipse.emf.compare.uml2.rcp.ui.tests.groups.data.uml.compositeconflict.UMLJoiningConflictsWithOverlappingDiffsInputData; import org.eclipse.emf.compare.uml2.rcp.ui.tests.groups.data.uml.conflictrefiningdiffs.UMLConflictWithRefiningDiffInputData; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.provider.EcoreItemProviderAdapterFactory; @@ -124,6 +128,84 @@ public class ConflictsGroupTest extends AbstractTestTreeNodeItemProviderAdapter assertEquals(0, diffNodeLanguageAdd.getChildren().size()); } + /** + * Tests that conflicts containing overlapping diffs are joined in the SMV. Overlapping diffs can happen + * due to the replacement of refining diffs with their refined diffs in the SMV. This test is related to + * <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=501864"</a> + * + * @throws IOException + */ + @Test + public void testJoiningConflictsWithOverlappingDiffs() throws IOException { + Comparison comparison = getComparison(new UMLJoiningConflictsWithOverlappingDiffsInputData()); + ECrossReferenceAdapter crossReferenceAdapter = new ECrossReferenceAdapter() { + /** + * {@inheritDoc} + * + * @see org.eclipse.emf.ecore.util.ECrossReferenceAdapter#isIncluded(org.eclipse.emf.ecore.EReference) + */ + @Override + protected boolean isIncluded(EReference eReference) { + return eReference == TreePackage.Literals.TREE_NODE__DATA; + } + }; + final ConflictsGroupImpl conflictsGroup = new ConflictsGroupImpl(comparison, + hasConflict(ConflictKind.REAL, ConflictKind.PSEUDO), + EMFCompareRCPUIMessages.getString("ThreeWayComparisonGroupProvider.conflicts.label"), //$NON-NLS-1$ + crossReferenceAdapter); + conflictsGroup.buildSubTree(); + + // There is one conflict node + List<? extends TreeNode> conflictNodes = conflictsGroup.getChildren(); + assertEquals(1, conflictNodes.size()); + + // The conflict node groups two conflicts + ConflictNode conflictNode = (ConflictNode)conflictNodes.get(0); + Conflict conflict = conflictNode.getConflict(); + assertTrue(conflict instanceof CompositeConflict); + CompositeConflict compositeConflict = (CompositeConflict)conflict; + assertEquals(2, compositeConflict.getConflicts().size()); + + List<? extends TreeNode> matchNodes = conflictNode.getChildren(); + assertEquals(2, matchNodes.size()); + + // Match node for association + MatchNode matchNodeAssociation = (MatchNode)matchNodes.get(0); + checkText(matchNodeAssociation, "Association"); //$NON-NLS-1$ + + // Match node for association property owned by class1 + MatchNode matchNodePropertyClass1 = (MatchNode)matchNodes.get(1); + checkText(matchNodePropertyClass1, "Property class2_"); //$NON-NLS-1$ + + List<? extends TreeNode> childrenMatchNodeAssociation = matchNodeAssociation.getChildren(); + assertEquals(2, childrenMatchNodeAssociation.size()); + + // Diff node for deletion of association + DiffNode diffNodeDeletion = (DiffNode)childrenMatchNodeAssociation.get(0); + checkText(diffNodeDeletion, "Association Change DELETE"); //$NON-NLS-1$ + assertTrue(diffNodeDeletion.getChildren().size() > 0); + + // Match node for association property owned by association + MatchNode matchNodePropertyAssociation = (MatchNode)childrenMatchNodeAssociation.get(1); + checkText(matchNodePropertyAssociation, "Property class1_"); //$NON-NLS-1$ + List<? extends TreeNode> childrenMatchNodePropertyAssociation = matchNodePropertyAssociation + .getChildren(); + assertEquals(1, childrenMatchNodePropertyAssociation.size()); + + // Diff node for name update of association property owned by association + DiffNode diffNodeUpdatePropertyAssociation = (DiffNode)childrenMatchNodePropertyAssociation.get(0); + checkText(diffNodeUpdatePropertyAssociation, "class1_ [name set]"); //$NON-NLS-1$ + assertEquals(0, diffNodeUpdatePropertyAssociation.getChildren().size()); + + List<? extends TreeNode> childrenMatchNodePropertyClass1 = matchNodePropertyClass1.getChildren(); + assertEquals(1, childrenMatchNodePropertyClass1.size()); + + // Diff node for name update of association property owned by class1 + DiffNode diffNodeUpdatePropertyClass1 = (DiffNode)childrenMatchNodePropertyClass1.get(0); + checkText(diffNodeUpdatePropertyClass1, "class2_ [name set]"); //$NON-NLS-1$ + assertEquals(0, diffNodeUpdatePropertyClass1.getChildren().size()); + } + protected void checkText(TreeNode childNode, String expected) { assertEquals(expected, itemDelegator.getText(childNode)); } |