diff options
Diffstat (limited to 'plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2')
40 files changed, 1033 insertions, 38 deletions
diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociation2Test.java b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociation2Test.java index 3fb9e82b0..96c07f7b5 100644 --- a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociation2Test.java +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociation2Test.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012, 2014 Obeo. + * Copyright (c) 2012, 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 @@ -29,11 +29,16 @@ import com.google.common.collect.Iterators; import java.io.IOException; import java.util.List; +import java.util.regex.Pattern; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.Diff; import org.eclipse.emf.compare.DifferenceKind; +import org.eclipse.emf.compare.postprocessor.IPostProcessor.Descriptor.Registry; +import org.eclipse.emf.compare.tests.postprocess.data.TestPostProcessor; import org.eclipse.emf.compare.uml2.internal.AssociationChange; +import org.eclipse.emf.compare.uml2.internal.MultiplicityElementChange; +import org.eclipse.emf.compare.uml2.internal.postprocessor.MultiplicityElementChangePostProcessor; import org.eclipse.emf.compare.uml2.tests.AbstractUMLInputData; import org.eclipse.emf.compare.uml2.tests.AbstractUMLTest; import org.eclipse.emf.compare.uml2.tests.association.data.AssociationInputData; @@ -159,7 +164,7 @@ public class AddAssociation2Test extends AbstractUMLTest { private void testAB1(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); - assertEquals(14, differences.size()); + assertEquals(18, differences.size()); Predicate<? super Diff> addAssociationDescription = null; Predicate<? super Diff> addPropertyClass1Description = null; @@ -281,10 +286,20 @@ public class AddAssociation2Test extends AbstractUMLTest { assertTrue(addUMLAssociation.getRefinedBy().contains(addRefTypeInPropertyClass1)); assertTrue(addUMLAssociation.getRefinedBy().contains(addRefAssociationInPropertyClass0)); assertTrue(addUMLAssociation.getRefinedBy().contains(addRefTypeInPropertyClass0)); - assertTrue(addUMLAssociation.getRefinedBy().contains(addLiteralIntegerInClass1)); - assertTrue(addUMLAssociation.getRefinedBy().contains(addUnlimitedNaturalInClass1)); - assertTrue(addUMLAssociation.getRefinedBy().contains(addLiteralIntegerInClass0)); - assertTrue(addUMLAssociation.getRefinedBy().contains(addUnlimitedNaturalInClass0)); + + // MultiplicityElementChanges + assertTrue(addUMLAssociation.getRefinedBy().contains( + Iterators.find(addLiteralIntegerInClass1.getRefines().iterator(), + instanceOf(MultiplicityElementChange.class)))); + assertTrue(addUMLAssociation.getRefinedBy().contains( + Iterators.find(addUnlimitedNaturalInClass1.getRefines().iterator(), + instanceOf(MultiplicityElementChange.class)))); + assertTrue(addUMLAssociation.getRefinedBy().contains( + Iterators.find(addLiteralIntegerInClass0.getRefines().iterator(), + instanceOf(MultiplicityElementChange.class)))); + assertTrue(addUMLAssociation.getRefinedBy().contains( + Iterators.find(addUnlimitedNaturalInClass0.getRefines().iterator(), + instanceOf(MultiplicityElementChange.class)))); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { @@ -353,7 +368,6 @@ public class AddAssociation2Test extends AbstractUMLTest { assertTrue(addAssociation.getRequires().contains(addPropertyClass1InAssociation)); assertEquals(0, addUMLAssociation.getRequires().size()); - assertEquals(0, addLiteralIntegerInClass1.getRequires().size()); assertEquals(0, addUnlimitedNaturalInClass1.getRequires().size()); assertEquals(0, addLiteralIntegerInClass0.getRequires().size()); @@ -389,4 +403,13 @@ public class AddAssociation2Test extends AbstractUMLTest { return input; } + @Override + protected void registerPostProcessors(Registry<String> postProcessorRegistry) { + super.registerPostProcessors(postProcessorRegistry); + postProcessorRegistry.put(MultiplicityElementChangePostProcessor.class.getName(), + new TestPostProcessor.TestPostProcessorDescriptor(Pattern + .compile("http://www.eclipse.org/uml2/\\d\\.0\\.0/UML"), null, + new MultiplicityElementChangePostProcessor(), 25)); + } + } diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociation3Test.java b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociation3Test.java index 0ce97f232..b54f65296 100644 --- a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociation3Test.java +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociation3Test.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012, 2014 Obeo. + * Copyright (c) 2012, 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 @@ -29,11 +29,16 @@ import com.google.common.collect.Iterators; import java.io.IOException; import java.util.List; +import java.util.regex.Pattern; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.Diff; import org.eclipse.emf.compare.DifferenceKind; +import org.eclipse.emf.compare.postprocessor.IPostProcessor.Descriptor.Registry; +import org.eclipse.emf.compare.tests.postprocess.data.TestPostProcessor; import org.eclipse.emf.compare.uml2.internal.AssociationChange; +import org.eclipse.emf.compare.uml2.internal.MultiplicityElementChange; +import org.eclipse.emf.compare.uml2.internal.postprocessor.MultiplicityElementChangePostProcessor; import org.eclipse.emf.compare.uml2.tests.AbstractUMLInputData; import org.eclipse.emf.compare.uml2.tests.AbstractUMLTest; import org.eclipse.emf.compare.uml2.tests.association.data.AssociationInputData; @@ -160,7 +165,7 @@ public class AddAssociation3Test extends AbstractUMLTest { private void testAB1(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); - assertEquals(14, differences.size()); + assertEquals(18, differences.size()); Predicate<? super Diff> addAssociationDescription = null; Predicate<? super Diff> addPropertyClass1Description = null; @@ -274,12 +279,8 @@ public class AddAssociation3Test extends AbstractUMLTest { assertNotNull(addUMLAssociation); assertEquals(13, addUMLAssociation.getRefinedBy().size()); assertTrue(addUMLAssociation.getRefinedBy().contains(addRefTypeInPropertyClass1)); - assertTrue(addUMLAssociation.getRefinedBy().contains(addLiteralIntegerInClass1)); - assertTrue(addUMLAssociation.getRefinedBy().contains(addUnlimitedNaturalInClass1)); assertTrue(addUMLAssociation.getRefinedBy().contains(addRefAssociationInPropertyClass1)); assertTrue(addUMLAssociation.getRefinedBy().contains(addRefTypeInPropertyClass0)); - assertTrue(addUMLAssociation.getRefinedBy().contains(addLiteralIntegerInClass0)); - assertTrue(addUMLAssociation.getRefinedBy().contains(addUnlimitedNaturalInClass0)); assertTrue(addUMLAssociation.getRefinedBy().contains(addRefAssociationInPropertyClass0)); assertTrue(addUMLAssociation.getRefinedBy().contains(addAssociation)); assertTrue(addUMLAssociation.getRefinedBy().contains(addPropertyClass0)); @@ -287,6 +288,20 @@ public class AddAssociation3Test extends AbstractUMLTest { assertTrue(addUMLAssociation.getRefinedBy().contains(addPropertyClass1InAssociation)); assertTrue(addUMLAssociation.getRefinedBy().contains(addPropertyClass0InAssociation)); + // MultiplicityElementChanges + assertTrue(addUMLAssociation.getRefinedBy().contains( + Iterators.find(addLiteralIntegerInClass1.getRefines().iterator(), + instanceOf(MultiplicityElementChange.class)))); + assertTrue(addUMLAssociation.getRefinedBy().contains( + Iterators.find(addUnlimitedNaturalInClass1.getRefines().iterator(), + instanceOf(MultiplicityElementChange.class)))); + assertTrue(addUMLAssociation.getRefinedBy().contains( + Iterators.find(addLiteralIntegerInClass0.getRefines().iterator(), + instanceOf(MultiplicityElementChange.class)))); + assertTrue(addUMLAssociation.getRefinedBy().contains( + Iterators.find(addUnlimitedNaturalInClass0.getRefines().iterator(), + instanceOf(MultiplicityElementChange.class)))); + // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { assertEquals(1, addPropertyClass0.getRequires().size()); @@ -354,7 +369,6 @@ public class AddAssociation3Test extends AbstractUMLTest { assertTrue(addAssociation.getRequires().contains(addPropertyClass0InAssociation)); assertEquals(0, addUMLAssociation.getRequires().size()); - assertEquals(0, addLiteralIntegerInClass1.getRequires().size()); assertEquals(0, addUnlimitedNaturalInClass1.getRequires().size()); assertEquals(0, addLiteralIntegerInClass0.getRequires().size()); @@ -388,4 +402,13 @@ public class AddAssociation3Test extends AbstractUMLTest { protected AbstractUMLInputData getInput() { return input; } + + @Override + protected void registerPostProcessors(Registry<String> postProcessorRegistry) { + super.registerPostProcessors(postProcessorRegistry); + postProcessorRegistry.put(MultiplicityElementChangePostProcessor.class.getName(), + new TestPostProcessor.TestPostProcessorDescriptor(Pattern + .compile("http://www.eclipse.org/uml2/\\d\\.0\\.0/UML"), null, + new MultiplicityElementChangePostProcessor(), 25)); + } } diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociationTest.java b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociationTest.java index ec43a5d68..504faee99 100644 --- a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociationTest.java +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociationTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012, 2014 Obeo. + * Copyright (c) 2012, 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 @@ -29,11 +29,16 @@ import com.google.common.collect.Iterators; import java.io.IOException; import java.util.List; +import java.util.regex.Pattern; import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.Diff; import org.eclipse.emf.compare.DifferenceKind; +import org.eclipse.emf.compare.postprocessor.IPostProcessor.Descriptor.Registry; +import org.eclipse.emf.compare.tests.postprocess.data.TestPostProcessor; import org.eclipse.emf.compare.uml2.internal.AssociationChange; +import org.eclipse.emf.compare.uml2.internal.MultiplicityElementChange; +import org.eclipse.emf.compare.uml2.internal.postprocessor.MultiplicityElementChangePostProcessor; import org.eclipse.emf.compare.uml2.tests.AbstractUMLInputData; import org.eclipse.emf.compare.uml2.tests.AbstractUMLTest; import org.eclipse.emf.compare.uml2.tests.association.data.AssociationInputData; @@ -160,8 +165,8 @@ public class AddAssociationTest extends AbstractUMLTest { private void testAB1(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); - // We should have no less and no more than 16 differences - assertEquals(16, differences.size()); + // We should have no less and no more than 20 differences + assertEquals(20, differences.size()); Predicate<? super Diff> addAssociationDescription = null; Predicate<? super Diff> addNavigableOwnedEndClass1InAssociationDescription = null; @@ -298,14 +303,23 @@ public class AddAssociationTest extends AbstractUMLTest { assertTrue(addUMLAssociation.getRefinedBy().contains(addRefTypeInPropertyClass1)); assertTrue(addUMLAssociation.getRefinedBy().contains(addRefAssociationInPropertyClass2)); assertTrue(addUMLAssociation.getRefinedBy().contains(addRefTypeInPropertyClass2)); - assertTrue(addUMLAssociation.getRefinedBy().contains(addLiteralIntegerInClass1)); - assertTrue(addUMLAssociation.getRefinedBy().contains(addUnlimitedNaturalInClass1)); - assertTrue(addUMLAssociation.getRefinedBy().contains(addLiteralIntegerInClass2)); - assertTrue(addUMLAssociation.getRefinedBy().contains(addUnlimitedNaturalInClass2)); assertTrue(addUMLAssociation.getRefinedBy().contains(addMemberEndClass1InAssociation)); assertTrue(addUMLAssociation.getRefinedBy().contains(addMemberEndClass2InAssociation)); assertTrue(addUMLAssociation.getRefinedBy().contains(addOwnedEndClass1InAssociation)); assertTrue(addUMLAssociation.getRefinedBy().contains(addOwnedEndClass2InAssociation)); + // MultiplicityElementChanges + assertTrue(addUMLAssociation.getRefinedBy().contains( + Iterators.find(addLiteralIntegerInClass1.getRefines().iterator(), + instanceOf(MultiplicityElementChange.class)))); + assertTrue(addUMLAssociation.getRefinedBy().contains( + Iterators.find(addUnlimitedNaturalInClass1.getRefines().iterator(), + instanceOf(MultiplicityElementChange.class)))); + assertTrue(addUMLAssociation.getRefinedBy().contains( + Iterators.find(addLiteralIntegerInClass2.getRefines().iterator(), + instanceOf(MultiplicityElementChange.class)))); + assertTrue(addUMLAssociation.getRefinedBy().contains( + Iterators.find(addUnlimitedNaturalInClass2.getRefines().iterator(), + instanceOf(MultiplicityElementChange.class)))); // CHECK REQUIREMENT if (kind.equals(TestKind.ADD)) { @@ -370,7 +384,6 @@ public class AddAssociationTest extends AbstractUMLTest { assertTrue(addAssociation.getRequires().contains(addMemberEndClass2InAssociation)); assertEquals(0, addUMLAssociation.getRequires().size()); - assertEquals(0, addLiteralIntegerInClass1.getRequires().size()); assertEquals(0, addUnlimitedNaturalInClass1.getRequires().size()); assertEquals(0, addLiteralIntegerInClass2.getRequires().size()); @@ -400,4 +413,13 @@ public class AddAssociationTest extends AbstractUMLTest { protected AbstractUMLInputData getInput() { return input; } + + @Override + protected void registerPostProcessors(Registry<String> postProcessorRegistry) { + super.registerPostProcessors(postProcessorRegistry); + postProcessorRegistry.put(MultiplicityElementChangePostProcessor.class.getName(), + new TestPostProcessor.TestPostProcessorDescriptor(Pattern + .compile("http://www.eclipse.org/uml2/\\d\\.0\\.0/UML"), null, + new MultiplicityElementChangePostProcessor(), 25)); + } } diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/ChangeAssociationTest.java b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/ChangeAssociationTest.java index 705e07ed3..c638cd3a3 100644 --- a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/ChangeAssociationTest.java +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/ChangeAssociationTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012, 2014 Obeo. + * Copyright (c) 2012, 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 @@ -159,8 +159,8 @@ public class ChangeAssociationTest extends AbstractUMLTest { private void testAB1(TestKind kind, final Comparison comparison) { final List<Diff> differences = comparison.getDifferences(); - // We should have no less and no more than 5 differences - assertEquals(6, differences.size()); + // We should have no less and no more than 7 differences + assertEquals(8, differences.size()); Predicate<? super Diff> addPropertyClass2Description = null; Predicate<? super Diff> addRefAssociationInPropertyClass2Description = null; diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/implications/ImplicationsAssociationTest.java b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/implications/ImplicationsAssociationTest.java index 603fdeba3..09be485d8 100644 --- a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/implications/ImplicationsAssociationTest.java +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/implications/ImplicationsAssociationTest.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2012, 2014 Obeo. + * Copyright (c) 2012, 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 @@ -35,6 +35,7 @@ import org.eclipse.emf.compare.Comparison; import org.eclipse.emf.compare.Diff; import org.eclipse.emf.compare.DifferenceKind; import org.eclipse.emf.compare.uml2.internal.AssociationChange; +import org.eclipse.emf.compare.uml2.internal.MultiplicityElementChange; import org.eclipse.emf.compare.uml2.tests.AbstractUMLInputData; import org.eclipse.emf.compare.uml2.tests.AbstractUMLTest; import org.eclipse.emf.compare.uml2.tests.implications.data.ImplicationsInputData; @@ -46,7 +47,8 @@ import org.junit.Test; @SuppressWarnings("nls") public class ImplicationsAssociationTest extends AbstractUMLTest { - private static final int NB_DIFFS = 16; + // 16 diffs of interest and 4 MultiplicityElementChanges + private static final int NB_DIFFS = 20; private ImplicationsInputData input = new ImplicationsInputData(); @@ -265,7 +267,8 @@ public class ImplicationsAssociationTest extends AbstractUMLTest { } private void checkMergeDeleteNavigableOwnedEnd(Comparison comparison, DiffsOfInterest diffs) { - assertEquals(NB_DIFFS - 7, comparison.getDifferences().size()); + // 7 diffs of interest + 2 MultiplicityElementChanges + assertEquals(NB_DIFFS - 9, comparison.getDifferences().size()); assertNull(diffs.addNavigableOwnedEndClass1InAssociation); assertNull(diffs.addOwnedEndClass1InAssociation); assertNull(diffs.addMemberEndClass1InAssociation); @@ -343,7 +346,8 @@ public class ImplicationsAssociationTest extends AbstractUMLTest { } private void checkMergeDeleteOwnedEnd(Comparison comparison, DiffsOfInterest diffs) { - assertEquals(NB_DIFFS - 7, comparison.getDifferences().size()); + // 7 diffs of interest+ 2 MultiplicityElementChanges + assertEquals(NB_DIFFS - 9, comparison.getDifferences().size()); assertNull(diffs.addOwnedEndClass1InAssociation); assertNull(diffs.addMemberEndClass1InAssociation); assertNull(diffs.addRefAssociationInPropertyClass1); @@ -1018,19 +1022,32 @@ public class ImplicationsAssociationTest extends AbstractUMLTest { } private static Predicate<? super Diff> addedLowerValueIn(final String qualifiedName) { - return and(ofKind(DifferenceKind.ADD), onEObject(qualifiedName), onFeature("lowerValue")); + return and(ofKind(DifferenceKind.ADD), onEObject(qualifiedName), onFeature("lowerValue"), + refinesMultiplicityElementChange()); } private static Predicate<? super Diff> addedUpperValueIn(final String qualifiedName) { - return and(ofKind(DifferenceKind.ADD), onEObject(qualifiedName), onFeature("upperValue")); + return and(ofKind(DifferenceKind.ADD), onEObject(qualifiedName), onFeature("upperValue"), + refinesMultiplicityElementChange()); } private static Predicate<? super Diff> removedLowerValueIn(final String qualifiedName) { - return and(ofKind(DifferenceKind.DELETE), onEObject(qualifiedName), onFeature("lowerValue")); + return and(ofKind(DifferenceKind.DELETE), onEObject(qualifiedName), onFeature("lowerValue"), + refinesMultiplicityElementChange()); } private static Predicate<? super Diff> removedUpperValueIn(final String qualifiedName) { - return and(ofKind(DifferenceKind.DELETE), onEObject(qualifiedName), onFeature("upperValue")); + return and(ofKind(DifferenceKind.DELETE), onEObject(qualifiedName), onFeature("upperValue"), + refinesMultiplicityElementChange()); + } + + private static Predicate<? super Diff> refinesMultiplicityElementChange() { + return new Predicate<Diff>() { + public boolean apply(Diff input) { + return Iterators.any(input.getRefines().iterator(), instanceOf( + MultiplicityElementChange.class)); + } + }; } private class DiffsOfInterest { diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/MultiplicityElementChangesTest.java b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/MultiplicityElementChangesTest.java new file mode 100644 index 000000000..fd13628fd --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/MultiplicityElementChangesTest.java @@ -0,0 +1,600 @@ +/******************************************************************************* + * Copyright (c) 2016 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Alexandra Buzila - initial API and implementation + *******************************************************************************/ +package org.eclipse.emf.compare.uml2.tests.multiplicitychanges; + +import static com.google.common.base.Predicates.and; +import static com.google.common.collect.Iterables.filter; +import static com.google.common.collect.Iterables.size; +import static org.eclipse.emf.compare.DifferenceSource.LEFT; +import static org.eclipse.emf.compare.DifferenceSource.RIGHT; +import static org.eclipse.emf.compare.utils.EMFComparePredicates.fromSide; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import com.google.common.base.Predicate; +import com.google.common.collect.Lists; + +import java.io.IOException; +import java.util.ArrayList; + +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; +import org.eclipse.emf.compare.ReferenceChange; +import org.eclipse.emf.compare.ide.ui.tests.framework.ResolutionStrategyID; +import org.eclipse.emf.compare.ide.ui.tests.framework.RuntimeTestRunner; +import org.eclipse.emf.compare.ide.ui.tests.framework.annotations.Compare; +import org.eclipse.emf.compare.ide.ui.tests.framework.annotations.ResolutionStrategies; +import org.eclipse.emf.compare.uml2.internal.MultiplicityElementChange; +import org.eclipse.emf.compare.utils.MatchUtil; +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.uml2.uml.LiteralInteger; +import org.eclipse.uml2.uml.LiteralUnlimitedNatural; +import org.eclipse.uml2.uml.UMLPackage; +import org.junit.runner.RunWith; + +@RunWith(RuntimeTestRunner.class) +@ResolutionStrategies(ResolutionStrategyID.PROJECT) +public class MultiplicityElementChangesTest { + + private static final Predicate<Diff> IS_MULTIPLICITY_CHANGE = new Predicate<Diff>() { + public boolean apply(Diff diff) { + return diff instanceof MultiplicityElementChange; + } + }; + + private static final Predicate<Diff> IS_LOWER_VALUE_REFERENCE_CHANGE = new Predicate<Diff>() { + public boolean apply(Diff diff) { + if (!(diff instanceof ReferenceChange)) { + return false; + } + ReferenceChange refChange = (ReferenceChange)diff; + return refChange.getReference() == UMLPackage.eINSTANCE.getMultiplicityElement_LowerValue(); + } + }; + + private static final Predicate<Diff> IS_LOWER_VALUE_ATTRIBUTE_CHANGE = new Predicate<Diff>() { + public boolean apply(Diff diff) { + if (!(diff instanceof AttributeChange)) { + return false; + } + EObject container = MatchUtil.getContainer(diff.getMatch().getComparison(), diff); + if (container instanceof LiteralInteger || container instanceof LiteralUnlimitedNatural) { + EStructuralFeature eContainingFeature = container.eContainingFeature(); + return eContainingFeature == UMLPackage.eINSTANCE.getMultiplicityElement_LowerValue(); + } + return false; + } + }; + + private static final Predicate<Diff> IS_UPPER_VALUE_REFERENCE_CHANGE = new Predicate<Diff>() { + public boolean apply(Diff diff) { + if (!(diff instanceof ReferenceChange)) { + return false; + } + ReferenceChange refChange = (ReferenceChange)diff; + return refChange.getReference() == UMLPackage.eINSTANCE.getMultiplicityElement_UpperValue(); + } + }; + + private static final Predicate<Diff> IS_UPPER_VALUE_ATTRIBUTE_CHANGE = new Predicate<Diff>() { + public boolean apply(Diff diff) { + if (!(diff instanceof AttributeChange)) { + return false; + } + EObject container = MatchUtil.getContainer(diff.getMatch().getComparison(), diff); + if (container instanceof LiteralInteger || container instanceof LiteralUnlimitedNatural) { + EStructuralFeature eContainingFeature = container.eContainingFeature(); + return eContainingFeature == UMLPackage.eINSTANCE.getMultiplicityElement_UpperValue(); + } + return false; + } + }; + + private static final Predicate<Diff> IS_UPPER_VALUE_CHANGE = new Predicate<Diff>() { + public boolean apply(Diff diff) { + return IS_UPPER_VALUE_REFERENCE_CHANGE.apply(diff) || IS_UPPER_VALUE_ATTRIBUTE_CHANGE.apply(diff); + } + }; + + private static final Predicate<Diff> IS_LOWER_VALUE_CHANGE = new Predicate<Diff>() { + public boolean apply(Diff diff) { + return IS_LOWER_VALUE_REFERENCE_CHANGE.apply(diff) || IS_LOWER_VALUE_ATTRIBUTE_CHANGE.apply(diff); + } + }; + + /** + * <b>origin:</b> an activity with an input pin <br> + * <b>left:</b> multiplicity lower value is added to the input pin <br> + * <b>right:</b> multiplicity upper value is added to the input pin + */ + @Compare(left = "a1/left.uml", right = "a1/right.uml", ancestor = "a1/origin.uml") + public void testNonConflictingAddition(Comparison comparison) throws IOException { + EList<Diff> diffs = comparison.getDifferences(); + Iterable<Diff> leftChanges = filter(diffs, and(IS_MULTIPLICITY_CHANGE, fromSide(LEFT))); + Iterable<Diff> rightChanges = filter(diffs, and(IS_MULTIPLICITY_CHANGE, fromSide(RIGHT))); + + assertEquals(1, size(leftChanges)); + assertEquals(1, size(rightChanges)); + + MultiplicityElementChange leftChange = (MultiplicityElementChange)leftChanges.iterator().next(); + assertEquals(1, leftChange.getRefinedBy().size()); + assertTrue(leftChange.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, leftChange.getKind()); + + MultiplicityElementChange rightChange = (MultiplicityElementChange)rightChanges.iterator().next(); + assertEquals(1, rightChange.getRefinedBy().size()); + assertTrue(rightChange.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, rightChange.getKind()); + + assertEquals(0, comparison.getConflicts().size()); + } + + /** + * <b>origin:</b> an activity with an input pin <br> + * <b>left:</b> multiplicity lower value is added to the input pin <br> + * <b>right:</b> multiplicity lower and upper values are added to the input pin, but the lower value is + * the same value as in the left change + */ + @Compare(left = "a2/left.uml", right = "a2/right.uml", ancestor = "a2/origin.uml") + public void testAdditionsWithPseudoconflict(Comparison comparison) throws IOException { + EList<Diff> diffs = comparison.getDifferences(); + ArrayList<Diff> leftChanges = Lists.newArrayList(filter(diffs, and(IS_MULTIPLICITY_CHANGE, + fromSide(LEFT)))); + ArrayList<Diff> rightChanges = Lists.newArrayList(filter(diffs, and(IS_MULTIPLICITY_CHANGE, + fromSide(RIGHT)))); + + assertEquals(1, size(leftChanges)); + assertEquals(2, size(rightChanges)); + + MultiplicityElementChange leftChange = (MultiplicityElementChange)leftChanges.get(0); + assertEquals(1, leftChange.getRefinedBy().size()); + assertTrue(leftChange.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, leftChange.getKind()); + + MultiplicityElementChange rightChange1 = (MultiplicityElementChange)rightChanges.get(0); + assertEquals(1, rightChange1.getRefinedBy().size()); + assertTrue(rightChange1.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, rightChange1.getKind()); + + MultiplicityElementChange rightChange2 = (MultiplicityElementChange)rightChanges.get(1); + assertEquals(1, rightChange2.getRefinedBy().size()); + assertTrue(rightChange2.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, rightChange2.getKind()); + + assertEquals(1, comparison.getConflicts().size()); + Conflict conflict = comparison.getConflicts().get(0); + assertEquals(ConflictKind.PSEUDO, conflict.getKind()); + assertTrue(conflict.getDifferences().contains(leftChange)); + + if (isLowerValueChange(rightChange1)) { + assertEquals(conflict, rightChange1.getConflict()); + } else { + assertTrue(isLowerValueChange(rightChange2)); + assertEquals(conflict, rightChange2.getConflict()); + } + } + + /** + * <b>origin:</b> an activity with an input pin <br> + * <b>left:</b> multiplicity lower value is added to the input pin <br> + * <b>right:</b> multiplicity lower and upper values are added to the input pin, but the lower value is + * different than the one in the left change + */ + @Compare(left = "a3/left.uml", right = "a3/right.uml", ancestor = "a3/origin.uml") + public void testAdditionsWithConflict(Comparison comparison) throws IOException { + EList<Diff> diffs = comparison.getDifferences(); + ArrayList<Diff> leftChanges = Lists.newArrayList(filter(diffs, and(IS_MULTIPLICITY_CHANGE, + fromSide(LEFT)))); + ArrayList<Diff> rightChanges = Lists.newArrayList(filter(diffs, and(IS_MULTIPLICITY_CHANGE, + fromSide(RIGHT)))); + + assertEquals(1, size(leftChanges)); + assertEquals(2, size(rightChanges)); + + MultiplicityElementChange leftChange = (MultiplicityElementChange)leftChanges.get(0); + assertEquals(1, leftChange.getRefinedBy().size()); + assertTrue(leftChange.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, leftChange.getKind()); + + MultiplicityElementChange rightChange1 = (MultiplicityElementChange)rightChanges.get(0); + assertEquals(1, rightChange1.getRefinedBy().size()); + assertTrue(rightChange1.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, rightChange1.getKind()); + + MultiplicityElementChange rightChange2 = (MultiplicityElementChange)rightChanges.get(1); + assertEquals(1, rightChange2.getRefinedBy().size()); + assertTrue(rightChange2.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, rightChange2.getKind()); + + assertEquals(1, comparison.getConflicts().size()); + Conflict conflict = comparison.getConflicts().get(0); + assertEquals(ConflictKind.REAL, conflict.getKind()); + + if (isLowerValueChange(rightChange1)) { + assertEquals(conflict, rightChange1.getConflict()); + } else { + assertTrue(isLowerValueChange(rightChange2)); + assertEquals(conflict, rightChange2.getConflict()); + } + } + + /** + * <b>origin:</b> an activity with an input pin, with a lower and upper value <br> + * <b>left:</b> multiplicity lower value is changed to 1 <br> + * <b>right:</b> multiplicity lower value is changed to 2 <br> + * A real conflict should be produced. + */ + @Compare(left = "a4/left.uml", right = "a4/right.uml", ancestor = "a4/origin.uml") + public void testChangesWithConflict(Comparison comparison) throws IOException { + EList<Diff> diffs = comparison.getDifferences(); + Iterable<Diff> leftChanges = filter(diffs, and(IS_MULTIPLICITY_CHANGE, fromSide(LEFT))); + Iterable<Diff> rightChanges = filter(diffs, and(IS_MULTIPLICITY_CHANGE, fromSide(RIGHT))); + + assertEquals(1, size(leftChanges)); + MultiplicityElementChange leftChange = (MultiplicityElementChange)leftChanges.iterator().next(); + assertEquals(1, leftChange.getRefinedBy().size()); + assertTrue(leftChange.getRefinedBy().get(0) instanceof AttributeChange); + assertEquals(DifferenceKind.CHANGE, leftChange.getKind()); + + assertEquals(1, size(rightChanges)); + MultiplicityElementChange rightChange = (MultiplicityElementChange)rightChanges.iterator().next(); + assertEquals(1, rightChange.getRefinedBy().size()); + assertTrue(rightChange.getRefinedBy().get(0) instanceof AttributeChange); + assertEquals(DifferenceKind.CHANGE, rightChange.getKind()); + + assertEquals(1, comparison.getConflicts().size()); + Conflict conflict = comparison.getConflicts().get(0); + assertEquals(ConflictKind.REAL, conflict.getKind()); + assertEquals(conflict, rightChange.getConflict()); + } + + /** + * <b>origin:</b> an activity with an input pin, with a lower and upper value <br> + * <b>left:</b> multiplicity lower value is changed to 1 <br> + * <b>right:</b> multiplicity lower value is changed to 1 <br> + * A pseudo conflict should be produced. + */ + @Compare(left = "a5/left.uml", right = "a5/right.uml", ancestor = "a5/origin.uml") + public void testChangesWithPseudoconflict(Comparison comparison) throws IOException { + EList<Diff> diffs = comparison.getDifferences(); + Iterable<Diff> leftChanges = filter(diffs, and(IS_MULTIPLICITY_CHANGE, fromSide(LEFT))); + Iterable<Diff> rightChanges = filter(diffs, and(IS_MULTIPLICITY_CHANGE, fromSide(RIGHT))); + + assertEquals(1, size(leftChanges)); + Diff leftChange = leftChanges.iterator().next(); + assertEquals(1, leftChange.getRefinedBy().size()); + assertTrue(leftChange.getRefinedBy().get(0) instanceof AttributeChange); + assertEquals(DifferenceKind.CHANGE, leftChange.getKind()); + + assertEquals(1, size(rightChanges)); + Diff rightChange = rightChanges.iterator().next(); + assertEquals(1, rightChange.getRefinedBy().size()); + assertTrue(rightChange.getRefinedBy().get(0) instanceof AttributeChange); + assertEquals(DifferenceKind.CHANGE, rightChange.getKind()); + + assertEquals(1, comparison.getConflicts().size()); + Conflict conflict = comparison.getConflicts().get(0); + assertEquals(ConflictKind.PSEUDO, conflict.getKind()); + assertEquals(conflict, rightChange.getConflict()); + + } + + /** + * <b>origin:</b> an activity with an input pin, with a lower and upper value <br> + * <b>left:</b> multiplicity lower value is changed to 1 <br> + * <b>right:</b> multiplicity lower and upper values are removed <br> + */ + @Compare(left = "a6/left.uml", right = "a6/right.uml", ancestor = "a6/origin.uml") + public void testRemoveConflict(Comparison comparison) throws IOException { + EList<Diff> diffs = comparison.getDifferences(); + ArrayList<Diff> leftChanges = Lists.newArrayList(filter(diffs, and(IS_MULTIPLICITY_CHANGE, + fromSide(LEFT)))); + ArrayList<Diff> rightChanges = Lists.newArrayList(filter(diffs, and(IS_MULTIPLICITY_CHANGE, + fromSide(RIGHT)))); + + assertEquals(1, size(leftChanges)); + MultiplicityElementChange leftChange = (MultiplicityElementChange)leftChanges.iterator().next(); + assertEquals(1, leftChange.getRefinedBy().size()); + assertTrue(leftChange.getRefinedBy().get(0) instanceof AttributeChange); + assertEquals(DifferenceKind.CHANGE, leftChange.getKind()); + + assertEquals(2, size(rightChanges)); + + MultiplicityElementChange rightChange1 = (MultiplicityElementChange)rightChanges.get(0); + assertEquals(1, rightChange1.getRefinedBy().size()); + assertTrue(rightChange1.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.DELETE, rightChange1.getKind()); + + MultiplicityElementChange rightChange2 = (MultiplicityElementChange)rightChanges.get(1); + assertEquals(1, rightChange2.getRefinedBy().size()); + assertTrue(rightChange2.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.DELETE, rightChange2.getKind()); + + assertEquals(1, comparison.getConflicts().size()); + Conflict conflict = comparison.getConflicts().get(0); + assertEquals(ConflictKind.REAL, conflict.getKind()); + + if (isLowerValueChange(rightChange1)) { + assertTrue(isUpperValueChange(rightChange2)); + assertEquals(conflict, rightChange1.getConflict()); + } else { + assertTrue(isUpperValueChange(rightChange1)); + assertTrue(isLowerValueChange(rightChange2)); + assertEquals(conflict, rightChange2.getConflict()); + } + } + + /** + * <b>origin:</b> an activity with an input pin, with a lower and upper value <br> + * <b>left:</b> multiplicity upper value is removed <br> + * <b>right:</b> multiplicity lower value is changed to 1 <br> + */ + @Compare(left = "a7/left.uml", right = "a7/right.uml", ancestor = "a7/origin.uml") + public void testRemoveNoConflict(Comparison comparison) throws IOException { + EList<Diff> diffs = comparison.getDifferences(); + Iterable<Diff> leftChanges = filter(diffs, and(IS_MULTIPLICITY_CHANGE, fromSide(LEFT))); + Iterable<Diff> rightChanges = filter(diffs, and(IS_MULTIPLICITY_CHANGE, fromSide(RIGHT))); + + assertEquals(1, size(leftChanges)); + MultiplicityElementChange leftChange = (MultiplicityElementChange)leftChanges.iterator().next(); + assertEquals(1, leftChange.getRefinedBy().size()); + assertTrue(leftChange.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.DELETE, leftChange.getKind()); + + assertEquals(1, size(rightChanges)); + MultiplicityElementChange rightChange = (MultiplicityElementChange)rightChanges.iterator().next(); + assertEquals(1, rightChange.getRefinedBy().size()); + assertTrue(rightChange.getRefinedBy().get(0) instanceof AttributeChange); + assertEquals(DifferenceKind.CHANGE, rightChange.getKind()); + + assertEquals(0, comparison.getConflicts().size()); + + } + + /** + * <b>origin:</b> an activity with an input pin, with a lower and upper value <br> + * <b>left:</b> multiplicity upper value is removed <br> + * <b>right:</b> multiplicity upper value is removed <br> + */ + @Compare(left = "a8/left.uml", right = "a8/right.uml", ancestor = "a8/origin.uml") + public void testRemovePseudoConflict(Comparison comparison) throws IOException { + EList<Diff> diffs = comparison.getDifferences(); + Iterable<Diff> leftChanges = filter(diffs, and(IS_MULTIPLICITY_CHANGE, fromSide(LEFT))); + Iterable<Diff> rightChanges = filter(diffs, and(IS_MULTIPLICITY_CHANGE, fromSide(RIGHT))); + + assertEquals(1, size(leftChanges)); + assertEquals(1, size(rightChanges)); + + MultiplicityElementChange leftChange = (MultiplicityElementChange)leftChanges.iterator().next(); + assertEquals(1, leftChange.getRefinedBy().size()); + assertTrue(leftChange.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.DELETE, leftChange.getKind()); + + MultiplicityElementChange rightChange = (MultiplicityElementChange)rightChanges.iterator().next(); + assertEquals(1, rightChange.getRefinedBy().size()); + assertTrue(rightChange.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.DELETE, rightChange.getKind()); + + assertEquals(1, comparison.getConflicts().size()); + Conflict conflict = comparison.getConflicts().get(0); + assertEquals(ConflictKind.PSEUDO, conflict.getKind()); + + } + + /** + * <b>origin:</b> an activity with an input pin, with an upper value <br> + * <b>left:</b> multiplicity upper value is removed <br> + * <b>right:</b> multiplicity lower value is added <br> + */ + @Compare(left = "a9/left.uml", right = "a9/right.uml", ancestor = "a9/origin.uml") + public void testRemoveAndAddNoConflict(Comparison comparison) throws IOException { + EList<Diff> diffs = comparison.getDifferences(); + Iterable<Diff> leftChanges = filter(diffs, and(IS_MULTIPLICITY_CHANGE, fromSide(LEFT))); + Iterable<Diff> rightChanges = filter(diffs, and(IS_MULTIPLICITY_CHANGE, fromSide(RIGHT))); + + assertEquals(1, size(leftChanges)); + assertEquals(1, size(rightChanges)); + + MultiplicityElementChange leftChange = (MultiplicityElementChange)leftChanges.iterator().next(); + assertEquals(1, leftChange.getRefinedBy().size()); + assertTrue(leftChange.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.DELETE, leftChange.getKind()); + + MultiplicityElementChange rightChange = (MultiplicityElementChange)rightChanges.iterator().next(); + assertEquals(1, rightChange.getRefinedBy().size()); + assertTrue(rightChange.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, rightChange.getKind()); + + assertEquals(0, comparison.getConflicts().size()); + } + + /** + * <b>origin:</b> an activity with an input pin, with an upper value <br> + * <b>left:</b> multiplicity upper (0) and lower (1) value are added<br> + * <b>right:</b> multiplicity upper (1) and lower (1) value are added<br> + * These changes should produce a real and a pseudo conflict for the same multiplicity change + */ + @Compare(left = "a10/left.uml", right = "a10/right.uml", ancestor = "a10/origin.uml") + public void testRealAndPseudoConflict(Comparison comparison) throws IOException { + EList<Diff> diffs = comparison.getDifferences(); + ArrayList<Diff> leftChanges = Lists.newArrayList(filter(diffs, and(IS_MULTIPLICITY_CHANGE, + fromSide(LEFT)))); + ArrayList<Diff> rightChanges = Lists.newArrayList(filter(diffs, and(IS_MULTIPLICITY_CHANGE, + fromSide(RIGHT)))); + + assertEquals(2, size(leftChanges)); + assertEquals(2, size(rightChanges)); + + MultiplicityElementChange leftChange1 = (MultiplicityElementChange)leftChanges.get(0); + assertEquals(1, leftChange1.getRefinedBy().size()); + assertTrue(leftChange1.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, leftChange1.getKind()); + + MultiplicityElementChange leftChange2 = (MultiplicityElementChange)leftChanges.get(1); + assertEquals(1, leftChange2.getRefinedBy().size()); + assertTrue(leftChange2.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, leftChange2.getKind()); + + MultiplicityElementChange rightChange1 = (MultiplicityElementChange)rightChanges.get(0); + assertEquals(1, rightChange1.getRefinedBy().size()); + assertTrue(rightChange1.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, rightChange1.getKind()); + + MultiplicityElementChange rightChange2 = (MultiplicityElementChange)rightChanges.get(1); + assertEquals(1, rightChange2.getRefinedBy().size()); + assertTrue(rightChange2.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, rightChange2.getKind()); + + assertEquals(2, comparison.getConflicts().size()); + Conflict conflict1 = comparison.getConflicts().get(0); + Conflict conflict2 = comparison.getConflicts().get(1); + + if (conflict1.getKind() == ConflictKind.PSEUDO) { + assertEquals(ConflictKind.REAL, conflict2.getKind()); + } else { + assertEquals(ConflictKind.PSEUDO, conflict2.getKind()); + } + + if (isUpperValueChange(leftChange1)) { + assertTrue(isLowerValueChange(leftChange2)); + assertNotNull(leftChange1.getConflict()); + assertEquals(ConflictKind.REAL, leftChange1.getConflict().getKind()); + assertNotNull(leftChange2.getConflict()); + assertEquals(ConflictKind.PSEUDO, leftChange2.getConflict().getKind()); + } else { + assertTrue(isLowerValueChange(leftChange1)); + assertTrue(isUpperValueChange(leftChange2)); + assertNotNull(leftChange1.getConflict()); + assertEquals(ConflictKind.PSEUDO, leftChange1.getConflict().getKind()); + assertNotNull(leftChange2.getConflict()); + assertEquals(ConflictKind.REAL, leftChange2.getConflict().getKind()); + } + + if (isUpperValueChange(rightChange1)) { + assertTrue(isLowerValueChange(rightChange2)); + assertNotNull(rightChange1.getConflict()); + assertEquals(ConflictKind.REAL, rightChange1.getConflict().getKind()); + assertNotNull(rightChange2.getConflict()); + assertEquals(ConflictKind.PSEUDO, rightChange2.getConflict().getKind()); + } else { + assertTrue(isLowerValueChange(rightChange1)); + assertTrue(isUpperValueChange(rightChange2)); + assertNotNull(rightChange1.getConflict()); + assertEquals(ConflictKind.PSEUDO, rightChange1.getConflict().getKind()); + assertNotNull(rightChange2.getConflict()); + assertEquals(ConflictKind.REAL, rightChange2.getConflict().getKind()); + } + + } + + private boolean isLowerValueChange(MultiplicityElementChange multiplicityElementChange) { + if (multiplicityElementChange.getRefinedBy().size() != 1) { + return false; + } + return IS_LOWER_VALUE_CHANGE.apply(multiplicityElementChange.getRefinedBy().get(0)); + } + + private boolean isUpperValueChange(MultiplicityElementChange multiplicityElementChange) { + if (multiplicityElementChange.getRefinedBy().size() != 1) { + return false; + } + return IS_UPPER_VALUE_CHANGE.apply(multiplicityElementChange.getRefinedBy().get(0)); + } + + /** + * <b>origin:</b> an activity with an input pin, with a lower value <br> + * <b>left:</b> multiplicity lower value is deleted and upper value is added (0)<br> + * <b>right:</b> multiplicity upper value is added, with the same value as in the left change and the + * lower value is changed to a different value than the one in the left change<br> + * These changes should produce a real and a pseudo conflict for the same multiplicity change + */ + @Compare(left = "a11/left.uml", right = "a11/right.uml", ancestor = "a11/origin.uml") + public void testRealAndPseudoConflictWithChangeAndDelete(Comparison comparison) throws IOException { + EList<Diff> diffs = comparison.getDifferences(); + ArrayList<Diff> leftChanges = Lists.newArrayList(filter(diffs, and(IS_MULTIPLICITY_CHANGE, + fromSide(LEFT)))); + ArrayList<Diff> rightChanges = Lists.newArrayList(filter(diffs, and(IS_MULTIPLICITY_CHANGE, + fromSide(RIGHT)))); + + assertEquals(2, size(leftChanges)); + assertEquals(2, size(rightChanges)); + + MultiplicityElementChange leftAddChange; + MultiplicityElementChange leftDeleteChange; + + if (leftChanges.get(0).getKind() == DifferenceKind.ADD) { + leftAddChange = (MultiplicityElementChange)leftChanges.get(0); + leftDeleteChange = (MultiplicityElementChange)leftChanges.get(1); + } else { + leftAddChange = (MultiplicityElementChange)leftChanges.get(1); + leftDeleteChange = (MultiplicityElementChange)leftChanges.get(0); + } + + assertEquals(1, leftAddChange.getRefinedBy().size()); + assertTrue(leftAddChange.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, leftAddChange.getKind()); + + assertEquals(1, leftDeleteChange.getRefinedBy().size()); + assertTrue(leftDeleteChange.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.DELETE, leftDeleteChange.getKind()); + + MultiplicityElementChange rightChange; + MultiplicityElementChange rightAddChange; + + if (rightChanges.get(0).getKind() == DifferenceKind.ADD) { + rightAddChange = (MultiplicityElementChange)rightChanges.get(0); + rightChange = (MultiplicityElementChange)rightChanges.get(1); + } else { + rightAddChange = (MultiplicityElementChange)rightChanges.get(1); + rightChange = (MultiplicityElementChange)rightChanges.get(0); + } + + assertEquals(1, rightAddChange.getRefinedBy().size()); + assertTrue(rightAddChange.getRefinedBy().get(0) instanceof ReferenceChange); + assertEquals(DifferenceKind.ADD, rightAddChange.getKind()); + + assertEquals(1, rightChange.getRefinedBy().size()); + assertTrue(rightChange.getRefinedBy().get(0) instanceof AttributeChange); + assertEquals(DifferenceKind.CHANGE, rightChange.getKind()); + + assertEquals(2, comparison.getConflicts().size()); + Conflict conflict1 = comparison.getConflicts().get(0); + Conflict conflict2 = comparison.getConflicts().get(1); + + if (conflict1.getKind() == ConflictKind.PSEUDO) { + assertEquals(ConflictKind.REAL, conflict2.getKind()); + } else { + assertEquals(ConflictKind.PSEUDO, conflict2.getKind()); + } + assertEquals(ConflictKind.REAL, leftDeleteChange.getConflict().getKind()); + assertEquals(leftDeleteChange.getConflict(), rightChange.getConflict()); + assertEquals(ConflictKind.PSEUDO, leftAddChange.getConflict().getKind()); + assertEquals(leftAddChange.getConflict(), rightAddChange.getConflict()); + } + + // @Override + // protected void registerPostProcessors( + // org.eclipse.emf.compare.postprocessor.IPostProcessor.Descriptor.Registry<String> postProcessorRegistry) + // { + // super.registerPostProcessors(postProcessorRegistry); + // postProcessorRegistry.put(MultiplicityElementChangePostProcessor.class.getName(), + // new TestPostProcessor.TestPostProcessorDescriptor(Pattern + // .compile("http://www.eclipse.org/uml2/\\d\\.0\\.0/UML"), null, //$NON-NLS-1$ + // new MultiplicityElementChangePostProcessor(), 25)); + // } +} diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a1/left.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a1/left.uml new file mode 100644 index 000000000..8750ba0ac --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a1/left.uml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="1"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a1/origin.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a1/origin.uml new file mode 100644 index 000000000..530742ca6 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a1/origin.uml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a1/right.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a1/right.uml new file mode 100644 index 000000000..3de259bc5 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a1/right.uml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_y4nCEL6MEeWfFPKKpMWCyw" value="2"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a10/left.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a10/left.uml new file mode 100644 index 000000000..6da8962cd --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a10/left.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="1"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a10/origin.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a10/origin.uml new file mode 100644 index 000000000..530742ca6 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a10/origin.uml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a10/right.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a10/right.uml new file mode 100644 index 000000000..44a0d8e47 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a10/right.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_bXa-MWYwEeWdseMo2ly0ug" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_jPlpwGYvEeWdseMo2ly0ug" value="1"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a11/left.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a11/left.uml new file mode 100644 index 000000000..fd39ace1f --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a11/left.uml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a11/origin.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a11/origin.uml new file mode 100644 index 000000000..8750ba0ac --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a11/origin.uml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="1"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a11/right.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a11/right.uml new file mode 100644 index 000000000..9f1166561 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a11/right.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="2"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_1234L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a2/left.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a2/left.uml new file mode 100644 index 000000000..ad48eeefa --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a2/left.uml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Fic2AWYwEeWdseMo2ly0ug" value="1"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a2/origin.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a2/origin.uml new file mode 100644 index 000000000..530742ca6 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a2/origin.uml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a2/right.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a2/right.uml new file mode 100644 index 000000000..171c268e6 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a2/right.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="1"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="2"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a3/left.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a3/left.uml new file mode 100644 index 000000000..7e3fc4c56 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a3/left.uml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="2"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a3/origin.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a3/origin.uml new file mode 100644 index 000000000..530742ca6 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a3/origin.uml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a3/right.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a3/right.uml new file mode 100644 index 000000000..7e95aa91d --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a3/right.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_Fic2AWYwEeWdseMo2ly0ug" value="1"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="1"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a4/left.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a4/left.uml new file mode 100644 index 000000000..b9fd37539 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a4/left.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="1"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a4/origin.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a4/origin.uml new file mode 100644 index 000000000..42239eabf --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a4/origin.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="0"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a4/right.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a4/right.uml new file mode 100644 index 000000000..76f3de022 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a4/right.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="2"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a5/left.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a5/left.uml new file mode 100644 index 000000000..b9fd37539 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a5/left.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="1"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a5/origin.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a5/origin.uml new file mode 100644 index 000000000..42239eabf --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a5/origin.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="0"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a5/right.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a5/right.uml new file mode 100644 index 000000000..b9fd37539 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a5/right.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="1"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a6/left.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a6/left.uml new file mode 100644 index 000000000..b9fd37539 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a6/left.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="1"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a6/origin.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a6/origin.uml new file mode 100644 index 000000000..42239eabf --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a6/origin.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="0"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a6/right.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a6/right.uml new file mode 100644 index 000000000..530742ca6 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a6/right.uml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a7/left.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a7/left.uml new file mode 100644 index 000000000..bea951449 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a7/left.uml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a7/origin.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a7/origin.uml new file mode 100644 index 000000000..42239eabf --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a7/origin.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="0"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a7/right.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a7/right.uml new file mode 100644 index 000000000..b9fd37539 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a7/right.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="1"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a8/left.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a8/left.uml new file mode 100644 index 000000000..bea951449 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a8/left.uml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a8/origin.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a8/origin.uml new file mode 100644 index 000000000..42239eabf --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a8/origin.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="0"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a8/right.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a8/right.uml new file mode 100644 index 000000000..bea951449 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a8/right.uml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a9/left.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a9/left.uml new file mode 100644 index 000000000..530742ca6 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a9/left.uml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a9/origin.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a9/origin.uml new file mode 100644 index 000000000..fd39ace1f --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a9/origin.uml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a9/right.uml b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a9/right.uml new file mode 100644 index 000000000..76f3de022 --- /dev/null +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a9/right.uml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_M2-I4L6KEeWfFPKKpMWCyw" name="RootElement"> + <packagedElement xmi:type="uml:Activity" xmi:id="_Qrq3oL6MEeWfFPKKpMWCyw" name="Activity1" node="_SgUFEL6MEeWfFPKKpMWCyw"> + <node xmi:type="uml:ActionInputPin" xmi:id="_SgUFEL6MEeWfFPKKpMWCyw" name="ActionInputPin1"> + <upperBound xmi:type="uml:LiteralInteger" xmi:id="_SgdPAL6MEeWfFPKKpMWCyw" value="1"/> + <lowerValue xmi:type="uml:LiteralInteger" xmi:id="_g7jmoL6MEeWfFPKKpMWCyw" value="2"/> + <upperValue xmi:type="uml:LiteralInteger" xmi:id="_WPbo4L6REeWfFPKKpMWCyw" value="0"/> + </node> + </packagedElement> +</uml:Model> diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/suite/AllTests.java b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/suite/AllTests.java index 0b92adb86..e00e2bca8 100644 --- a/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/suite/AllTests.java +++ b/plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/suite/AllTests.java @@ -13,6 +13,10 @@ *******************************************************************************/ package org.eclipse.emf.compare.uml2.tests.suite; +import junit.framework.JUnit4TestAdapter; +import junit.framework.Test; +import junit.textui.TestRunner; + import org.eclipse.emf.compare.uml2.tests.association.AddAssociation2Test; import org.eclipse.emf.compare.uml2.tests.association.AddAssociation3Test; import org.eclipse.emf.compare.uml2.tests.association.AddAssociationTest; @@ -39,6 +43,7 @@ import org.eclipse.emf.compare.uml2.tests.include.AddIncludeTest; import org.eclipse.emf.compare.uml2.tests.merge.ExtensionMergeTest; import org.eclipse.emf.compare.uml2.tests.merge.MergeDiffInvolvingRefineDiffTest; import org.eclipse.emf.compare.uml2.tests.message.AddMessageTest; +import org.eclipse.emf.compare.uml2.tests.multiplicitychanges.MultiplicityElementChangesTest; import org.eclipse.emf.compare.uml2.tests.nonreg.bug484576_pseudoconflicts.TestNonRegPseudoConflict_484576; import org.eclipse.emf.compare.uml2.tests.opaque.OpaqueElementBodyChangeDiffTest; import org.eclipse.emf.compare.uml2.tests.opaque.OpaqueElementBodyChangeMergeTest; @@ -55,10 +60,6 @@ import org.junit.runner.RunWith; import org.junit.runners.Suite; import org.junit.runners.Suite.SuiteClasses; -import junit.framework.JUnit4TestAdapter; -import junit.framework.Test; -import junit.textui.TestRunner; - /** * This test suite allows us to launch all tests for EMF Compare at once. * @@ -79,7 +80,8 @@ import junit.textui.TestRunner; StaticStereotypedElementItemProviderTest.class, DynamicStereotypedElementItemProviderTest.class, OpaqueElementBodyChangeDiffTest.class, OpaqueElementBodyChangeMergeTest.class, DanglingStereotypeApplicationTest.class, MergeDiffInvolvingRefineDiffTest.class, - TestNonRegPseudoConflict_484576.class, RemoveStereotypeApplicationPseudoConflictTest.class }) + TestNonRegPseudoConflict_484576.class, RemoveStereotypeApplicationPseudoConflictTest.class, + MultiplicityElementChangesTest.class }) public class AllTests { /** |