blob: 76ca9eeca98afd1af35d066c4a4c8d84161e0e4c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2014 Obeo.
* 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
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Obeo - initial API and implementation
*******************************************************************************/
package org.eclipse.emf.compare.diagram.ecoretools.tests.nodechanges;
import static com.google.common.base.Predicates.and;
import static com.google.common.base.Predicates.instanceOf;
import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertSame;
import static junit.framework.Assert.assertTrue;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.added;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.addedToReference;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.ofKind;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.onFeature;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.removed;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.removedFromReference;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.valueIs;
import static org.eclipse.emf.compare.utils.EMFComparePredicates.valueNameMatches;
import java.io.IOException;
import java.util.List;
import org.eclipse.emf.compare.AttributeChange;
import org.eclipse.emf.compare.Comparison;
import org.eclipse.emf.compare.Diff;
import org.eclipse.emf.compare.DifferenceKind;
import org.eclipse.emf.compare.EMFCompare;
import org.eclipse.emf.compare.ReferenceChange;
import org.eclipse.emf.compare.ResourceAttachmentChange;
import org.eclipse.emf.compare.diagram.ecoretools.tests.AbstractTest;
import org.eclipse.emf.compare.diagram.ecoretools.tests.DiagramInputData;
import org.eclipse.emf.compare.diagram.ecoretools.tests.nodechanges.data.NodeChangesInputData;
import org.eclipse.emf.compare.diagram.internal.extensions.NodeChange;
import org.eclipse.emf.compare.scope.IComparisonScope;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.gmf.runtime.notation.Bounds;
import org.eclipse.gmf.runtime.notation.DrawerStyle;
import org.eclipse.gmf.runtime.notation.FilteringStyle;
import org.eclipse.gmf.runtime.notation.MultiDiagramLinkStyle;
import org.eclipse.gmf.runtime.notation.NotationPackage;
import org.eclipse.gmf.runtime.notation.ShapeStyle;
import org.eclipse.gmf.runtime.notation.SortingStyle;
import org.eclipse.gmf.runtime.notation.View;
import org.junit.Ignore;
import org.junit.Test;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterators;
@SuppressWarnings("nls")
public class NodechangesTest extends AbstractTest {
private NodeChangesInputData input = new NodeChangesInputData();
@Test
public void testA10UseCase() throws IOException {
final Resource left = input.getA1Left();
final Resource right = input.getA1Right();
final Comparison comparison = compare(left.getResourceSet(), right.getResourceSet());
final List<Diff> differences = comparison.getDifferences();
// We should have no less and no more than 57 differences
assertSame(Integer.valueOf(57), Integer.valueOf(differences.size()));
final Diff addEPackage = Iterators.find(differences.iterator(), added("tc1.EPackage0"));
final Diff addEPackageView = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("1002", NotationPackage.Literals.VIEW__TYPE),
elementIs(((ReferenceChange)addEPackage).getValue())));
final Diff addNodeInEPackageView1 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4006", NotationPackage.Literals.VIEW__TYPE)));
final Diff addNodeInEPackageView2 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5003", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEPackageView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEPackageView2), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEPackageView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEPackageView2), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEPackageView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEPackageView2), valueIsInstanceof(FilteringStyle.class)));
final Diff addShapeStyleInEPackageView = Iterators.find(differences.iterator(),
and(valueUnder(addEPackageView), valueIsInstanceof(ShapeStyle.class)));
final Diff addMultiDiagramLinkStyleInEPackageView = Iterators.find(differences.iterator(),
and(valueUnder(addEPackageView), valueIsInstanceof(MultiDiagramLinkStyle.class)));
final Diff addBoundsInEPackageView = Iterators.find(differences.iterator(),
and(valueUnder(addEPackageView), valueIsInstanceof(Bounds.class)));
final Diff addRefElementInEPackageView = Iterators.find(differences.iterator(),
and(valueIs(((ReferenceChange)addEPackage).getValue()), onFeature("element")));
final Diff addEClass = Iterators.find(differences.iterator(), added("tc1.EClass0"));
final Diff addEClassView = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("1001", NotationPackage.Literals.VIEW__TYPE),
elementIs(((ReferenceChange)addEClass).getValue())));
final Diff addNodeInEClassView1 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4001", NotationPackage.Literals.VIEW__TYPE)));
final Diff addNodeInEClassView2 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5001", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEClassView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView2), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEClassView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView2), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEClassView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView2), valueIsInstanceof(FilteringStyle.class)));
final Diff addNodeInEClassView3 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5002", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEClassView3 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView3), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEClassView3 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView3), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEClassView = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView3), valueIsInstanceof(FilteringStyle.class)));
final Diff addShapeStyleInEClassView = Iterators.find(differences.iterator(),
valueUnder(addEClassView));
final Diff addRefElementInEClassView = Iterators.find(differences.iterator(),
and(valueIs(((ReferenceChange)addEClass).getValue()), onFeature("element")));
final Diff addBoundsInEClassView = Iterators.find(differences.iterator(),
and(valueUnder(addEClassView), valueIsInstanceof(Bounds.class)));
final Diff addEDataType = Iterators.find(differences.iterator(), added("tc1.EDataType0"));
final Diff addEDataTypeView = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("1004", NotationPackage.Literals.VIEW__TYPE),
elementIs(((ReferenceChange)addEDataType).getValue())));
final Diff addNodeInEDataTypeView1 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4008", NotationPackage.Literals.VIEW__TYPE)));
final Diff addNodeInEDataTypeView2 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4009", NotationPackage.Literals.VIEW__TYPE)));
final Diff addShapeStyleInEDataTypeView = Iterators.find(differences.iterator(),
and(valueUnder(addEDataTypeView), valueIsInstanceof(ShapeStyle.class)));
final Diff addRefElementInEDataTypeView = Iterators.find(differences.iterator(),
and(valueIs(((ReferenceChange)addEDataType).getValue()), onFeature("element")));
final Diff addBoundsInEDataTypeView = Iterators.find(differences.iterator(),
and(valueUnder(addEDataTypeView), valueIsInstanceof(Bounds.class)));
final Diff addEEnum = Iterators.find(differences.iterator(), added("tc1.EEnum0"));
final Diff addEEnumView = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("1005", NotationPackage.Literals.VIEW__TYPE),
elementIs(((ReferenceChange)addEEnum).getValue())));
final Diff addNodeInEEnumView1 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4010", NotationPackage.Literals.VIEW__TYPE)));
final Diff addNodeInEEnumView2 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5008", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEEnumView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEEnumView2), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEEnumView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEEnumView2), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEEnumView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEEnumView2), valueIsInstanceof(FilteringStyle.class)));
final Diff addShapeStyleInEEnumView = Iterators.find(differences.iterator(),
and(valueUnder(addEEnumView), valueIsInstanceof(ShapeStyle.class)));
final Diff addRefElementInEEnumView = Iterators.find(differences.iterator(),
and(valueIs(((ReferenceChange)addEEnum).getValue()), onFeature("element")));
final Diff addBoundsInEEnumView = Iterators.find(differences.iterator(),
and(valueUnder(addEEnumView), valueIsInstanceof(Bounds.class)));
final Diff addEAnnotation = Iterators.find(differences.iterator(), addedToReference("tc1",
"eAnnotations", "tc1.EAnnotation0", EcorePackage.Literals.EANNOTATION__SOURCE));
final Diff addEAnnotationView = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("1003", NotationPackage.Literals.VIEW__TYPE),
elementIs(((ReferenceChange)addEAnnotation).getValue())));
final Diff addNodeInEAnnotationView1 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4007", NotationPackage.Literals.VIEW__TYPE)));
final Diff addNodeInEAnnotationView2 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5007", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEAnnotationView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEAnnotationView2), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEAnnotationView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEAnnotationView2), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEAnnotationView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEAnnotationView2), valueIsInstanceof(FilteringStyle.class)));
final Diff addShapeStyleInEAnnotationView = Iterators.find(differences.iterator(),
and(valueUnder(addEAnnotationView), valueIsInstanceof(ShapeStyle.class)));
final Diff addRefElementInEAnnotationView = Iterators.find(differences.iterator(),
and(valueIs(((ReferenceChange)addEAnnotation).getValue()), onFeature("element")));
final Diff addBoundsInEAnnotationView = Iterators.find(differences.iterator(),
and(valueUnder(addEAnnotationView), valueIsInstanceof(Bounds.class)));
assertSame(Integer.valueOf(5),
count(differences, and(instanceOf(NodeChange.class), ofKind(DifferenceKind.ADD))));
final Diff addNodeEPackageExtension = Iterators.find(differences.iterator(),
and(instanceOf(NodeChange.class), ofKind(DifferenceKind.ADD),
refinedBy(addRefElementInEPackageView)));
final Diff addNodeEClassExtension = Iterators.find(differences.iterator(),
and(instanceOf(NodeChange.class), ofKind(DifferenceKind.ADD),
refinedBy(addRefElementInEClassView)));
final Diff addNodeEDataTypeExtension = Iterators.find(differences.iterator(),
and(instanceOf(NodeChange.class), ofKind(DifferenceKind.ADD),
refinedBy(addRefElementInEDataTypeView)));
final Diff addNodeEENumExtension = Iterators.find(differences.iterator(),
and(instanceOf(NodeChange.class), ofKind(DifferenceKind.ADD),
refinedBy(addRefElementInEEnumView)));
final Diff addNodeEAnnotationExtension = Iterators.find(differences.iterator(),
and(instanceOf(NodeChange.class), ofKind(DifferenceKind.ADD),
refinedBy(addRefElementInEAnnotationView)));
assertSame(Integer.valueOf(10), addNodeEPackageExtension.getRefinedBy().size());
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addEPackageView));// for convenience...
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addNodeInEPackageView1));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addNodeInEPackageView2));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addDrawerStyleInNodeInEPackageView2));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addSortingStyleInNodeInEPackageView2));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addFilteringStyleInNodeInEPackageView2));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addShapeStyleInEPackageView));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addMultiDiagramLinkStyleInEPackageView));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addBoundsInEPackageView));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addRefElementInEPackageView));
assertSame(Integer.valueOf(13), addNodeEClassExtension.getRefinedBy().size());
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addEClassView));// for convenience...
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addNodeInEClassView1));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addNodeInEClassView2));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addDrawerStyleInNodeInEClassView2));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addSortingStyleInNodeInEClassView2));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addFilteringStyleInNodeInEClassView2));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addNodeInEClassView3));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addDrawerStyleInNodeInEClassView3));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addSortingStyleInNodeInEClassView3));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addFilteringStyleInNodeInEClassView));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addShapeStyleInEClassView));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addRefElementInEClassView));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addBoundsInEClassView));
assertSame(Integer.valueOf(6), addNodeEDataTypeExtension.getRefinedBy().size());
assertTrue(addNodeEDataTypeExtension.getRefinedBy().contains(addEDataTypeView));// for convenience...
assertTrue(addNodeEDataTypeExtension.getRefinedBy().contains(addNodeInEDataTypeView1));
assertTrue(addNodeEDataTypeExtension.getRefinedBy().contains(addNodeInEDataTypeView2));
assertTrue(addNodeEDataTypeExtension.getRefinedBy().contains(addShapeStyleInEDataTypeView));
assertTrue(addNodeEDataTypeExtension.getRefinedBy().contains(addRefElementInEDataTypeView));
assertTrue(addNodeEDataTypeExtension.getRefinedBy().contains(addBoundsInEDataTypeView));
assertSame(Integer.valueOf(9), addNodeEENumExtension.getRefinedBy().size());
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addEEnumView));// for convenience...
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addNodeInEEnumView1));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addNodeInEEnumView2));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addDrawerStyleInNodeInEEnumView2));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addSortingStyleInNodeInEEnumView2));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addFilteringStyleInNodeInEEnumView2));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addShapeStyleInEEnumView));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addRefElementInEEnumView));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addBoundsInEEnumView));
assertSame(Integer.valueOf(9), addNodeEAnnotationExtension.getRefinedBy().size());
assertTrue(addNodeEAnnotationExtension.getRefinedBy().contains(addEAnnotationView));// for
// convenience...
assertTrue(addNodeEAnnotationExtension.getRefinedBy().contains(addNodeInEAnnotationView1));
assertTrue(addNodeEAnnotationExtension.getRefinedBy().contains(addNodeInEAnnotationView2));
assertTrue(
addNodeEAnnotationExtension.getRefinedBy().contains(addDrawerStyleInNodeInEAnnotationView2));
assertTrue(
addNodeEAnnotationExtension.getRefinedBy().contains(addSortingStyleInNodeInEAnnotationView2));
assertTrue(addNodeEAnnotationExtension.getRefinedBy()
.contains(addFilteringStyleInNodeInEAnnotationView2));
assertTrue(addNodeEAnnotationExtension.getRefinedBy().contains(addShapeStyleInEAnnotationView));
assertTrue(addNodeEAnnotationExtension.getRefinedBy().contains(addRefElementInEAnnotationView));
assertTrue(addNodeEAnnotationExtension.getRefinedBy().contains(addBoundsInEAnnotationView));
// requires tests
assertSame(Integer.valueOf(0), addEPackageView.getRequires().size());
assertSame(Integer.valueOf(1), addNodeInEPackageView1.getRequires().size());
assertTrue(addNodeInEPackageView1.getRequires().contains(addEPackageView));
assertSame(Integer.valueOf(1), addNodeInEPackageView2.getRequires().size());
assertTrue(addNodeInEPackageView2.getRequires().contains(addEPackageView));
assertSame(Integer.valueOf(1), addDrawerStyleInNodeInEPackageView2.getRequires().size());
assertTrue(addDrawerStyleInNodeInEPackageView2.getRequires().contains(addNodeInEPackageView2));
assertSame(Integer.valueOf(1), addSortingStyleInNodeInEPackageView2.getRequires().size());
assertTrue(addSortingStyleInNodeInEPackageView2.getRequires().contains(addNodeInEPackageView2));
assertSame(Integer.valueOf(1), addFilteringStyleInNodeInEPackageView2.getRequires().size());
assertTrue(addFilteringStyleInNodeInEPackageView2.getRequires().contains(addNodeInEPackageView2));
assertSame(Integer.valueOf(1), addShapeStyleInEPackageView.getRequires().size());
assertTrue(addShapeStyleInEPackageView.getRequires().contains(addEPackageView));
assertSame(Integer.valueOf(1), addMultiDiagramLinkStyleInEPackageView.getRequires().size());
assertTrue(addMultiDiagramLinkStyleInEPackageView.getRequires().contains(addEPackageView));
assertSame(Integer.valueOf(1), addBoundsInEPackageView.getRequires().size());
assertTrue(addBoundsInEPackageView.getRequires().contains(addEPackageView));
assertSame(Integer.valueOf(2), addRefElementInEPackageView.getRequires().size());
assertTrue(addRefElementInEPackageView.getRequires().contains(addEPackage));
assertTrue(addRefElementInEPackageView.getRequires().contains(addEPackageView));
assertFalse("No resource attachment changes expected", Iterators
.filter(differences.iterator(), instanceOf(ResourceAttachmentChange.class)).hasNext());
testIntersections(comparison);
}
@Test
public void testA11UseCase() throws IOException {
final Resource left = input.getA1Left();
final Resource right = input.getA1Right();
final Comparison comparison = compare(right.getResourceSet(), left.getResourceSet());
final List<Diff> differences = comparison.getDifferences();
// We should have no less and no more than 57 differences
assertSame(Integer.valueOf(57), Integer.valueOf(differences.size()));
final Diff addEPackage = Iterators.find(differences.iterator(), removed("tc1.EPackage0"));
final Diff addEPackageView = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("1002", NotationPackage.Literals.VIEW__TYPE),
elementIs(((ReferenceChange)addEPackage).getValue())));
final Diff addNodeInEPackageView1 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4006", NotationPackage.Literals.VIEW__TYPE)));
final Diff addNodeInEPackageView2 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5003", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEPackageView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEPackageView2), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEPackageView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEPackageView2), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEPackageView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEPackageView2), valueIsInstanceof(FilteringStyle.class)));
final Diff addShapeStyleInEPackageView = Iterators.find(differences.iterator(),
and(valueUnder(addEPackageView), valueIsInstanceof(ShapeStyle.class)));
final Diff addMultiDiagramLinkStyleInEPackageView = Iterators.find(differences.iterator(),
and(valueUnder(addEPackageView), valueIsInstanceof(MultiDiagramLinkStyle.class)));
final Diff addBoundsInEPackageView = Iterators.find(differences.iterator(),
and(valueUnder(addEPackageView), valueIsInstanceof(Bounds.class)));
final Diff addRefElementInEPackageView = Iterators.find(differences.iterator(),
and(valueIs(((ReferenceChange)addEPackage).getValue()), onFeature("element")));
final Diff addEClass = Iterators.find(differences.iterator(), removed("tc1.EClass0"));
final Diff addEClassView = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("1001", NotationPackage.Literals.VIEW__TYPE),
elementIs(((ReferenceChange)addEClass).getValue())));
final Diff addNodeInEClassView1 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4001", NotationPackage.Literals.VIEW__TYPE)));
final Diff addNodeInEClassView2 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5001", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEClassView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView2), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEClassView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView2), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEClassView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView2), valueIsInstanceof(FilteringStyle.class)));
final Diff addNodeInEClassView3 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5002", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEClassView3 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView3), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEClassView3 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView3), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEClassView = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView3), valueIsInstanceof(FilteringStyle.class)));
final Diff addShapeStyleInEClassView = Iterators.find(differences.iterator(),
valueUnder(addEClassView));
final Diff addRefElementInEClassView = Iterators.find(differences.iterator(),
and(valueIs(((ReferenceChange)addEClass).getValue()), onFeature("element")));
final Diff addBoundsInEClassView = Iterators.find(differences.iterator(),
and(valueUnder(addEClassView), valueIsInstanceof(Bounds.class)));
final Diff addEDataType = Iterators.find(differences.iterator(), removed("tc1.EDataType0"));
final Diff addEDataTypeView = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("1004", NotationPackage.Literals.VIEW__TYPE),
elementIs(((ReferenceChange)addEDataType).getValue())));
final Diff addNodeInEDataTypeView1 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4008", NotationPackage.Literals.VIEW__TYPE)));
final Diff addNodeInEDataTypeView2 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4009", NotationPackage.Literals.VIEW__TYPE)));
final Diff addShapeStyleInEDataTypeView = Iterators.find(differences.iterator(),
and(valueUnder(addEDataTypeView), valueIsInstanceof(ShapeStyle.class)));
final Diff addRefElementInEDataTypeView = Iterators.find(differences.iterator(),
and(valueIs(((ReferenceChange)addEDataType).getValue()), onFeature("element")));
final Diff addBoundsInEDataTypeView = Iterators.find(differences.iterator(),
and(valueUnder(addEDataTypeView), valueIsInstanceof(Bounds.class)));
final Diff addEEnum = Iterators.find(differences.iterator(), removed("tc1.EEnum0"));
final Diff addEEnumView = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("1005", NotationPackage.Literals.VIEW__TYPE),
elementIs(((ReferenceChange)addEEnum).getValue())));
final Diff addNodeInEEnumView1 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4010", NotationPackage.Literals.VIEW__TYPE)));
final Diff addNodeInEEnumView2 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5008", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEEnumView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEEnumView2), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEEnumView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEEnumView2), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEEnumView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEEnumView2), valueIsInstanceof(FilteringStyle.class)));
final Diff addShapeStyleInEEnumView = Iterators.find(differences.iterator(),
and(valueUnder(addEEnumView), valueIsInstanceof(ShapeStyle.class)));
final Diff addRefElementInEEnumView = Iterators.find(differences.iterator(),
and(valueIs(((ReferenceChange)addEEnum).getValue()), onFeature("element")));
final Diff addBoundsInEEnumView = Iterators.find(differences.iterator(),
and(valueUnder(addEEnumView), valueIsInstanceof(Bounds.class)));
final Diff addEAnnotation = Iterators.find(differences.iterator(), removedFromReference("tc1",
"eAnnotations", "tc1.EAnnotation0", EcorePackage.Literals.EANNOTATION__SOURCE));
final Diff addEAnnotationView = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("1003", NotationPackage.Literals.VIEW__TYPE),
elementIs(((ReferenceChange)addEAnnotation).getValue())));
final Diff addNodeInEAnnotationView1 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4007", NotationPackage.Literals.VIEW__TYPE)));
final Diff addNodeInEAnnotationView2 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5007", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEAnnotationView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEAnnotationView2), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEAnnotationView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEAnnotationView2), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEAnnotationView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEAnnotationView2), valueIsInstanceof(FilteringStyle.class)));
final Diff addShapeStyleInEAnnotationView = Iterators.find(differences.iterator(),
and(valueUnder(addEAnnotationView), valueIsInstanceof(ShapeStyle.class)));
final Diff addRefElementInEAnnotationView = Iterators.find(differences.iterator(),
and(valueIs(((ReferenceChange)addEAnnotation).getValue()), onFeature("element")));
final Diff addBoundsInEAnnotationView = Iterators.find(differences.iterator(),
and(valueUnder(addEAnnotationView), valueIsInstanceof(Bounds.class)));
assertSame(Integer.valueOf(5),
count(differences, and(instanceOf(NodeChange.class), ofKind(DifferenceKind.DELETE))));
final Diff addNodeEPackageExtension = Iterators.find(differences.iterator(),
and(instanceOf(NodeChange.class), ofKind(DifferenceKind.DELETE), refinedBy(addEPackageView)));
final Diff addNodeEClassExtension = Iterators.find(differences.iterator(),
and(instanceOf(NodeChange.class), ofKind(DifferenceKind.DELETE), refinedBy(addEClassView)));
final Diff addNodeEDataTypeExtension = Iterators.find(differences.iterator(), and(
instanceOf(NodeChange.class), ofKind(DifferenceKind.DELETE), refinedBy(addEDataTypeView)));
final Diff addNodeEENumExtension = Iterators.find(differences.iterator(),
and(instanceOf(NodeChange.class), ofKind(DifferenceKind.DELETE), refinedBy(addEEnumView)));
final Diff addNodeEAnnotationExtension = Iterators.find(differences.iterator(), and(
instanceOf(NodeChange.class), ofKind(DifferenceKind.DELETE), refinedBy(addEAnnotationView)));
assertSame(Integer.valueOf(10), addNodeEPackageExtension.getRefinedBy().size());
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addEPackageView));
// for convenience:
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addNodeInEPackageView1));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addNodeInEPackageView2));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addDrawerStyleInNodeInEPackageView2));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addSortingStyleInNodeInEPackageView2));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addFilteringStyleInNodeInEPackageView2));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addShapeStyleInEPackageView));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addMultiDiagramLinkStyleInEPackageView));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addBoundsInEPackageView));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addRefElementInEPackageView));
assertSame(Integer.valueOf(13), addNodeEClassExtension.getRefinedBy().size());
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addEClassView));
// for convenience:
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addNodeInEClassView1));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addNodeInEClassView2));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addDrawerStyleInNodeInEClassView2));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addSortingStyleInNodeInEClassView2));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addFilteringStyleInNodeInEClassView2));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addNodeInEClassView3));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addDrawerStyleInNodeInEClassView3));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addSortingStyleInNodeInEClassView3));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addFilteringStyleInNodeInEClassView));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addShapeStyleInEClassView));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addRefElementInEClassView));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addBoundsInEClassView));
assertSame(Integer.valueOf(6), addNodeEDataTypeExtension.getRefinedBy().size());
assertTrue(addNodeEDataTypeExtension.getRefinedBy().contains(addEDataTypeView));
// for convenience:
assertTrue(addNodeEDataTypeExtension.getRefinedBy().contains(addNodeInEDataTypeView1));
assertTrue(addNodeEDataTypeExtension.getRefinedBy().contains(addNodeInEDataTypeView2));
assertTrue(addNodeEDataTypeExtension.getRefinedBy().contains(addShapeStyleInEDataTypeView));
assertTrue(addNodeEDataTypeExtension.getRefinedBy().contains(addRefElementInEDataTypeView));
assertTrue(addNodeEDataTypeExtension.getRefinedBy().contains(addBoundsInEDataTypeView));
assertSame(Integer.valueOf(9), addNodeEENumExtension.getRefinedBy().size());
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addEEnumView));
// for convenience:
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addNodeInEEnumView1));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addNodeInEEnumView2));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addDrawerStyleInNodeInEEnumView2));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addSortingStyleInNodeInEEnumView2));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addFilteringStyleInNodeInEEnumView2));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addShapeStyleInEEnumView));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addRefElementInEEnumView));
assertTrue(addNodeEENumExtension.getRefinedBy().contains(addBoundsInEEnumView));
assertSame(Integer.valueOf(9), addNodeEAnnotationExtension.getRefinedBy().size());
assertTrue(addNodeEAnnotationExtension.getRefinedBy().contains(addEAnnotationView));
// for convenience:
assertTrue(addNodeEAnnotationExtension.getRefinedBy().contains(addNodeInEAnnotationView1));
assertTrue(addNodeEAnnotationExtension.getRefinedBy().contains(addNodeInEAnnotationView2));
assertTrue(
addNodeEAnnotationExtension.getRefinedBy().contains(addDrawerStyleInNodeInEAnnotationView2));
assertTrue(
addNodeEAnnotationExtension.getRefinedBy().contains(addSortingStyleInNodeInEAnnotationView2));
assertTrue(addNodeEAnnotationExtension.getRefinedBy()
.contains(addFilteringStyleInNodeInEAnnotationView2));
assertTrue(addNodeEAnnotationExtension.getRefinedBy().contains(addShapeStyleInEAnnotationView));
assertTrue(addNodeEAnnotationExtension.getRefinedBy().contains(addRefElementInEAnnotationView));
assertTrue(addNodeEAnnotationExtension.getRefinedBy().contains(addBoundsInEAnnotationView));
testIntersections(comparison);
}
@Test
public void testA30UseCase() throws IOException {
final Resource left = input.getA3Left();
final Resource right = input.getA3Right();
final Comparison comparison = compare(left.getResourceSet(), right.getResourceSet());
final List<Diff> differences = comparison.getDifferences();
// We should have no less and no more than 27 differences
assertSame(Integer.valueOf(27), Integer.valueOf(differences.size()));
final Diff addEPackage = Iterators.find(differences.iterator(), added("tc1.EPackage0"));
final Diff addEPackageView = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("1002", NotationPackage.Literals.VIEW__TYPE),
elementIs(((ReferenceChange)addEPackage).getValue())));
final Diff addNodeInEPackageView1 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4006", NotationPackage.Literals.VIEW__TYPE)));
final Diff addNodeInEPackageView2 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5003", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEPackageView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEPackageView2), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEPackageView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEPackageView2), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEPackageView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEPackageView2), valueIsInstanceof(FilteringStyle.class)));
final Diff addShapeStyleInEPackageView = Iterators.find(differences.iterator(),
and(valueUnder(addEPackageView), valueIsInstanceof(ShapeStyle.class)));
final Diff addMultiDiagramLinkStyleInEPackageView = Iterators.find(differences.iterator(),
and(valueUnder(addEPackageView), valueIsInstanceof(MultiDiagramLinkStyle.class)));
final Diff addBoundsInEPackageView = Iterators.find(differences.iterator(),
and(valueUnder(addEPackageView), valueIsInstanceof(Bounds.class)));
final Diff addRefElementInEPackageView = Iterators.find(differences.iterator(),
and(valueIs(((ReferenceChange)addEPackage).getValue()), onFeature("element")));
final Diff addEClass = Iterators.find(differences.iterator(), added("tc1.EPackage0.EClass0"));
final Diff addEClassView = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("2003", NotationPackage.Literals.VIEW__TYPE),
elementIs(((ReferenceChange)addEClass).getValue())));
final Diff addNodeInEClassView1 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("4002", NotationPackage.Literals.VIEW__TYPE)));
final Diff addNodeInEClassView2 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5004", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEClassView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView2), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEClassView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView2), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEClassView2 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView2), valueIsInstanceof(FilteringStyle.class)));
final Diff addNodeInEClassView3 = Iterators.find(differences.iterator(),
and(valueIsView, valueNameMatches("5005", NotationPackage.Literals.VIEW__TYPE)));
final Diff addDrawerStyleInNodeInEClassView3 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView3), valueIsInstanceof(DrawerStyle.class)));
final Diff addSortingStyleInNodeInEClassView3 = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView3), valueIsInstanceof(SortingStyle.class)));
final Diff addFilteringStyleInNodeInEClassView = Iterators.find(differences.iterator(),
and(valueUnder(addNodeInEClassView3), valueIsInstanceof(FilteringStyle.class)));
final Diff addShapeStyleInEClassView = Iterators.find(differences.iterator(),
valueUnder(addEClassView));
final Diff addRefElementInEClassView = Iterators.find(differences.iterator(),
and(valueIs(((ReferenceChange)addEClass).getValue()), onFeature("element")));
final Diff addBoundsInEClassView = Iterators.find(differences.iterator(),
and(valueUnder(addEClassView), valueIsInstanceof(Bounds.class)));
assertSame(Integer.valueOf(2),
count(differences, and(instanceOf(NodeChange.class), ofKind(DifferenceKind.ADD))));
final Diff addNodeEPackageExtension = Iterators.find(differences.iterator(),
and(instanceOf(NodeChange.class), ofKind(DifferenceKind.ADD),
refinedBy(addRefElementInEPackageView)));
final Diff addNodeEClassExtension = Iterators.find(differences.iterator(),
and(instanceOf(NodeChange.class), ofKind(DifferenceKind.ADD),
refinedBy(addRefElementInEClassView)));
assertSame(Integer.valueOf(10), addNodeEPackageExtension.getRefinedBy().size());
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addEPackageView));// for convenience...
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addNodeInEPackageView1));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addNodeInEPackageView2));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addDrawerStyleInNodeInEPackageView2));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addSortingStyleInNodeInEPackageView2));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addFilteringStyleInNodeInEPackageView2));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addShapeStyleInEPackageView));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addMultiDiagramLinkStyleInEPackageView));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addBoundsInEPackageView));
assertTrue(addNodeEPackageExtension.getRefinedBy().contains(addRefElementInEPackageView));
assertSame(Integer.valueOf(13), addNodeEClassExtension.getRefinedBy().size());
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addEClassView));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addNodeInEClassView1));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addNodeInEClassView2));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addDrawerStyleInNodeInEClassView2));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addSortingStyleInNodeInEClassView2));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addFilteringStyleInNodeInEClassView2));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addNodeInEClassView3));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addDrawerStyleInNodeInEClassView3));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addSortingStyleInNodeInEClassView3));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addFilteringStyleInNodeInEClassView));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addShapeStyleInEClassView));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addRefElementInEClassView));
assertTrue(addNodeEClassExtension.getRefinedBy().contains(addBoundsInEClassView));
assertFalse("No resource attachment changes expected", Iterators
.filter(differences.iterator(), instanceOf(ResourceAttachmentChange.class)).hasNext());
testIntersections(comparison);
}
@Override
protected DiagramInputData getInput() {
return input;
}
final Predicate<Diff> valueIsView = new Predicate<Diff>() {
public boolean apply(Diff input) {
return input instanceof ReferenceChange && ((ReferenceChange)input).getValue() instanceof View
&& ((ReferenceChange)input).getReference().isContainment();
}
};
private static Predicate<? super Diff> valueUnder(final Diff container) {
return new Predicate<Diff>() {
public boolean apply(Diff input) {
if (input instanceof ReferenceChange) {
final ReferenceChange diff = (ReferenceChange)input;
return container instanceof ReferenceChange
&& diff.getValue().eContainer() == ((ReferenceChange)container).getValue();
}
return false;
}
};
}
private static Predicate<? super Diff> refinedBy(final Diff refining) {
return new Predicate<Diff>() {
public boolean apply(Diff input) {
return input.getRefinedBy().contains(refining);
}
};
}
private static Predicate<? super Diff> valueIsInstanceof(final Class expectedValue) {
return new Predicate<Diff>() {
public boolean apply(Diff input) {
final Object value;
if (input instanceof ReferenceChange) {
value = ((ReferenceChange)input).getValue();
} else if (input instanceof AttributeChange) {
value = ((AttributeChange)input).getValue();
} else {
return false;
}
return expectedValue.isInstance(value);
}
};
}
private static Predicate<? super Diff> elementIs(final EObject expectedValue) {
return new Predicate<Diff>() {
public boolean apply(Diff input) {
final Object value;
if (input instanceof ReferenceChange) {
value = ((ReferenceChange)input).getValue();
return value instanceof View && ((View)value).getElement() == expectedValue;
}
return false;
}
};
}
}