Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexandra Buzila2016-01-22 04:40:18 -0500
committerLaurent Delaigue2016-06-10 04:34:40 -0400
commit6dfd995b7164e7a69aee10eaaf9858c5fb7c485e (patch)
tree6fde210d867b7c4bef4f6e1ee54a2daa7280baaf /plugins/org.eclipse.emf.compare.uml2.tests
parent814919e9de93aacc099b18fd76dac201e115b465 (diff)
downloadorg.eclipse.emf.compare-6dfd995b7164e7a69aee10eaaf9858c5fb7c485e.tar.gz
org.eclipse.emf.compare-6dfd995b7164e7a69aee10eaaf9858c5fb7c485e.tar.xz
org.eclipse.emf.compare-6dfd995b7164e7a69aee10eaaf9858c5fb7c485e.zip
[479449] Introduce MultiplicityElementChanges
Created new UMLDiff type for changes of MultiplicityElements. Contribution also contains PostProcessor that ensures that the conflicts between MultiplicityElements are correct with respect to their type. Includes tests. Bug: 479449 CQ: 11548 Change-Id: I9faefd2dc948b1d2ea8e45ef232e9c82a9285f74 Also-by: Laurent Delaigue <laurent.delaigue@obeo.fr> Signed-off-by: Alexandra Buzila <abuzila@eclipsesource.com> Signed-off-by: Laurent Delaigue <laurent.delaigue@obeo.fr>
Diffstat (limited to 'plugins/org.eclipse.emf.compare.uml2.tests')
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/META-INF/MANIFEST.MF2
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/pom.xml2
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociation2Test.java37
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociation3Test.java37
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/AddAssociationTest.java38
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/association/ChangeAssociationTest.java6
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/implications/ImplicationsAssociationTest.java33
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/MultiplicityElementChangesTest.java600
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a1/left.uml9
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a1/origin.uml8
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a1/right.uml9
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a10/left.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a10/origin.uml8
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a10/right.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a11/left.uml9
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a11/origin.uml9
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a11/right.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a2/left.uml9
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a2/origin.uml8
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a2/right.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a3/left.uml9
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a3/origin.uml8
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a3/right.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a4/left.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a4/origin.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a4/right.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a5/left.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a5/origin.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a5/right.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a6/left.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a6/origin.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a6/right.uml8
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a7/left.uml9
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a7/origin.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a7/right.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a8/left.uml9
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a8/origin.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a8/right.uml9
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a9/left.uml8
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a9/origin.uml9
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/multiplicitychanges/a9/right.uml10
-rw-r--r--plugins/org.eclipse.emf.compare.uml2.tests/src/org/eclipse/emf/compare/uml2/tests/suite/AllTests.java12
42 files changed, 1035 insertions, 40 deletions
diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.compare.uml2.tests/META-INF/MANIFEST.MF
index 61b3200bf..4ece10f39 100644
--- a/plugins/org.eclipse.emf.compare.uml2.tests/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.compare.uml2.tests/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.emf.compare.uml2.tests;singleton:=true
-Bundle-Version: 2.4.0.qualifier
+Bundle-Version: 2.5.0.qualifier
Bundle-ClassPath: .
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/plugins/org.eclipse.emf.compare.uml2.tests/pom.xml b/plugins/org.eclipse.emf.compare.uml2.tests/pom.xml
index 93d597e19..01ef916f0 100644
--- a/plugins/org.eclipse.emf.compare.uml2.tests/pom.xml
+++ b/plugins/org.eclipse.emf.compare.uml2.tests/pom.xml
@@ -10,7 +10,7 @@
</parent>
<groupId>org.eclipse.emf.compare</groupId>
<artifactId>org.eclipse.emf.compare.uml2.tests</artifactId>
- <version>2.4.0-SNAPSHOT</version>
+ <version>2.5.0-SNAPSHOT</version>
<packaging>eclipse-test-plugin</packaging>
<build>
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 {
/**

Back to the top