Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas FAUVERGUE2017-06-06 11:16:42 +0000
committerNicolas FAUVERGUE2018-07-03 13:03:09 +0000
commite85a36958767fb032bc9c93fc3393a0fe70cc465 (patch)
treec2f150f365de8b733d97a33a0322a3d140d8bf86
parentbe1a108d62ac6f445de31d8b6df9488bf5921dda (diff)
downloadorg.eclipse.papyrus-e85a36958767fb032bc9c93fc3393a0fe70cc465.tar.gz
org.eclipse.papyrus-e85a36958767fb032bc9c93fc3393a0fe70cc465.tar.xz
org.eclipse.papyrus-e85a36958767fb032bc9c93fc3393a0fe70cc465.zip
Bug 511394: [Expansion] Issue on undo /redo when adding a new
compartment to a stereotyped element Actions - new JUnit tests with undo / redo tests for creating a class with a new compartment and for a Class stereotyped Metaclass with a new compartment. The test with metaclass is failing on undo. Change-Id: I02d4c28558bc14e046e91c3e95e2d18ed4134acf Signed-off-by: Remi Schnekenburger <rschnekenburger@eclipsesource.com> Signed-off-by: Nicolas FAUVERGUE <nicolas.fauvergue@cea.fr>
-rw-r--r--tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/META-INF/MANIFEST.MF3
-rw-r--r--tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/models/ExpansionModelTest.uml8
-rw-r--r--tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/models/Standard.elementtypesconfigurations17
-rw-r--r--tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/src/org/eclipse/papyrus/infra/gmfdiag/common/tests/AllTests.java34
-rw-r--r--tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/src/org/eclipse/papyrus/infra/gmfdiag/common/tests/ExpansionAddCompartment.java205
5 files changed, 247 insertions, 20 deletions
diff --git a/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/META-INF/MANIFEST.MF b/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/META-INF/MANIFEST.MF
index 6ba0b1a62a0..de7acd710a6 100644
--- a/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/META-INF/MANIFEST.MF
+++ b/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/META-INF/MANIFEST.MF
@@ -12,7 +12,8 @@ Require-Bundle: org.junit;bundle-version="4.10.0",
org.eclipse.papyrus.uml.diagram.clazz;bundle-version="[3.0.0,4.0.0)",
org.eclipse.papyrus.uml.service.types;bundle-version="[4.0.0,5.0.0)",
org.eclipse.papyrus.uml.diagram.composite;bundle-version="[3.0.0,4.0.0)",
- org.eclipse.papyrus.infra.viewpoints.policy;bundle-version="[3.0.0,4.0.0)"
+ org.eclipse.papyrus.infra.viewpoints.policy;bundle-version="[3.0.0,4.0.0)",
+ org.eclipse.papyrus.infra.types;bundle-version="[4.0.0,5.0.0)"
Export-Package: org.eclipse.papyrus.infra.gmfdiag.common.tests,
org.eclipse.papyrus.infra.gmfdiag.common.utils
Bundle-Vendor: %providerName
diff --git a/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/models/ExpansionModelTest.uml b/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/models/ExpansionModelTest.uml
index 2151a3d68ac..6813bb62f54 100644
--- a/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/models/ExpansionModelTest.uml
+++ b/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/models/ExpansionModelTest.uml
@@ -1,5 +1,5 @@
<?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="_zV8ogOKJEeSwE5hduTH6nQ" name="Model">
+<uml:Model xmi:version="20131001" xmlns:xmi="http://www.omg.org/spec/XMI/20131001" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:uml="http://www.eclipse.org/uml2/5.0.0/UML" xmi:id="_zV8ogOKJEeSwE5hduTH6nQ" name="Model">
<packageImport xmi:type="uml:PackageImport" xmi:id="_zV8ogeKJEeSwE5hduTH6nQ">
<importedPackage xmi:type="uml:Model" href="pathmap://UML_LIBRARIES/UMLPrimitiveTypes.library.uml#_0"/>
</packageImport>
@@ -10,4 +10,10 @@
<packagedElement xmi:type="uml:Class" xmi:id="_fNTaAB6pEeeaxZx4sIiwfg" name="Class1">
<ownedAttribute xmi:type="uml:Property" xmi:id="_f1LSUB6pEeeaxZx4sIiwfg" name="Attribute1"/>
</packagedElement>
+ <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_N8cUsOfLEeamrL54jVwZWw">
+ <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_N8fYAOfLEeamrL54jVwZWw" source="http://www.eclipse.org/uml2/2.0.0/UML">
+ <references xmi:type="ecore:EPackage" href="http://www.eclipse.org/uml2/5.0.0/UML/Profile/Standard#/"/>
+ </eAnnotations>
+ <appliedProfile xmi:type="uml:Profile" href="pathmap://UML_PROFILES/Standard.profile.uml#_0"/>
+ </profileApplication>
</uml:Model>
diff --git a/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/models/Standard.elementtypesconfigurations b/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/models/Standard.elementtypesconfigurations
new file mode 100644
index 00000000000..e7d5cb8d53a
--- /dev/null
+++ b/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/models/Standard.elementtypesconfigurations
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<elementtypesconfigurations:ElementTypeSetConfiguration xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:applystereotypeadvice="http://www.eclipse.org/papyrus/uml/types/applystereotypeadvice/1.1" xmlns:elementtypesconfigurations="http://www.eclipse.org/papyrus/infra/elementtypesconfigurations/1.2" xmlns:stereotypematcher="http://www.eclipse.org/papyrus/uml/types/stereotypematcher/1.1" xmi:id="_jZndYOfKEeamrL54jVwZWw" identifier="org.eclipse.papyrus.infra.gmfdiag.common.tests.Standard" name="org.eclipse.papyrus.infra.gmfdiag.common.tests.Standard" metamodelNsURI="http://www.eclipse.org/uml2/5.0.0/UML">
+ <elementTypeConfigurations xmi:type="elementtypesconfigurations:SpecializationTypeConfiguration" xmi:id="org.eclipse.papyrus.infra.gmfdiag.common.tests.StandardTest" identifier="org.eclipse.papyrus.infra.gmfdiag.common.tests.StandardTest" name="StandardTest" hint="Class_Shape" kind="org.eclipse.gmf.runtime.emf.type.core.IHintedType">
+ <matcherConfiguration xmi:type="stereotypematcher:StereotypeApplicationMatcherConfiguration" xmi:id="_tKBAcOfKEeamrL54jVwZWw">
+ <stereotypesQualifiedNames>StandardProfile::Metaclass</stereotypesQualifiedNames>
+ </matcherConfiguration>
+ <specializedTypes xmi:type="elementtypesconfigurations:MetamodelTypeConfiguration" href="platform:/plugin/org.eclipse.papyrus.uml.service.types/model/uml.elementtypesconfigurations#org.eclipse.papyrus.uml.Class"/>
+ <specializedTypes xmi:type="elementtypesconfigurations:SpecializationTypeConfiguration" href="platform:/plugin/org.eclipse.papyrus.uml.service.types/model/umldi.elementtypesconfigurations#org.eclipse.papyrus.umldi.Class_Shape"/>
+ <specializedTypesID>org.eclipse.papyrus.uml.Class</specializedTypesID>
+ <specializedTypesID>org.eclipse.papyrus.umldi.Class_Shape</specializedTypesID>
+ </elementTypeConfigurations>
+ <adviceBindingsConfigurations xmi:type="applystereotypeadvice:ApplyStereotypeAdviceConfiguration" xmi:id="_CNqZYOfLEeamrL54jVwZWw" identifier="org.eclipse.papyrus.infra.gmfdiag.common.tests.StandardAdivce" target="org.eclipse.papyrus.infra.gmfdiag.common.tests.StandardTest" inheritance="all">
+ <stereotypesToApply xmi:type="applystereotypeadvice:StereotypeToApply" xmi:id="_FMHukOfLEeamrL54jVwZWw" stereotypeQualifiedName="StandardProfile::Metaclass">
+ <requiredProfiles>StandardProfile</requiredProfiles>
+ </stereotypesToApply>
+ </adviceBindingsConfigurations>
+</elementtypesconfigurations:ElementTypeSetConfiguration>
diff --git a/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/src/org/eclipse/papyrus/infra/gmfdiag/common/tests/AllTests.java b/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/src/org/eclipse/papyrus/infra/gmfdiag/common/tests/AllTests.java
index 2edaa72b74c..4eeccb21643 100644
--- a/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/src/org/eclipse/papyrus/infra/gmfdiag/common/tests/AllTests.java
+++ b/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/src/org/eclipse/papyrus/infra/gmfdiag/common/tests/AllTests.java
@@ -32,24 +32,24 @@ import org.junit.runners.Suite.SuiteClasses;
*/
@RunWith(ClassificationSuite.class)
@SuiteClasses({
- LoadExpansionModel.class,
+// LoadExpansionModel.class,
ExpansionAddCompartment.class,
- ExpansionAddChildLabel.class,
- ExpansionAddBorderItem.class,
- ExpansionAddCompartmentWithKind.class,
- ExpansionAddLink.class,
- ExpansionDropElements.class,
- AssistantUsage.class,
- GMFUnsafeTest.class,
- SyncTests.class,
- NotationLabelProviderTest.class,
- CreateEditBasedElementCommandTest.class,
- DefaultCopyCommandTest.class,
- DefaultPasteCommandTest.class,
- DefaultDiagramCopyCommandTest.class,
- DefaultDiagramPasteCommandTest.class,
- ModelValidationTest.class,
- TestModelValidationTest.class,
+// ExpansionAddChildLabel.class,
+// ExpansionAddBorderItem.class,
+// ExpansionAddCompartmentWithKind.class,
+// ExpansionAddLink.class,
+// ExpansionDropElements.class,
+// AssistantUsage.class,
+// GMFUnsafeTest.class,
+// SyncTests.class,
+// NotationLabelProviderTest.class,
+// CreateEditBasedElementCommandTest.class,
+// DefaultCopyCommandTest.class,
+// DefaultPasteCommandTest.class,
+// DefaultDiagramCopyCommandTest.class,
+// DefaultDiagramPasteCommandTest.class,
+// ModelValidationTest.class,
+// TestModelValidationTest.class,
})
public class AllTests {
diff --git a/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/src/org/eclipse/papyrus/infra/gmfdiag/common/tests/ExpansionAddCompartment.java b/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/src/org/eclipse/papyrus/infra/gmfdiag/common/tests/ExpansionAddCompartment.java
index 39294e99762..5296be07682 100644
--- a/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/src/org/eclipse/papyrus/infra/gmfdiag/common/tests/ExpansionAddCompartment.java
+++ b/tests/junit/plugins/infra/gmfdiag/org.eclipse.papyrus.infra.gmfdiag.common.tests/src/org/eclipse/papyrus/infra/gmfdiag/common/tests/ExpansionAddCompartment.java
@@ -14,14 +14,39 @@
package org.eclipse.papyrus.infra.gmfdiag.common.tests;
+import static org.hamcrest.CoreMatchers.equalTo;
+import static org.hamcrest.CoreMatchers.instanceOf;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.util.ArrayList;
import java.util.List;
+import java.util.stream.Collectors;
import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.gef.EditPart;
import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.commands.Command;
+import org.eclipse.gmf.runtime.diagram.core.edithelpers.CreateElementRequestAdapter;
+import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart;
+import org.eclipse.gmf.runtime.diagram.ui.requests.CreateViewAndElementRequest;
+import org.eclipse.gmf.runtime.emf.type.core.ElementTypeRegistry;
+import org.eclipse.gmf.runtime.emf.type.core.IElementType;
+import org.eclipse.gmf.runtime.emf.type.core.IHintedType;
+import org.eclipse.gmf.runtime.emf.type.core.requests.CreateElementRequest;
import org.eclipse.gmf.runtime.notation.Diagram;
+import org.eclipse.gmf.runtime.notation.Node;
import org.eclipse.gmf.runtime.notation.View;
+import org.eclipse.papyrus.commands.wrappers.GEFtoEMFCommandWrapper;
import org.eclipse.papyrus.infra.core.resource.ModelSet;
import org.eclipse.papyrus.infra.core.sashwindows.di.service.IPageManager;
import org.eclipse.papyrus.infra.core.utils.ServiceUtils;
@@ -30,9 +55,16 @@ import org.eclipse.papyrus.infra.gmfdiag.expansion.expansionmodel.rendering.Chil
import org.eclipse.papyrus.infra.gmfdiag.expansion.expansionmodel.rendering.DiagramExpansionSingleton;
import org.eclipse.papyrus.infra.gmfdiag.expansion.expansionmodel.rendering.DiagramExpansionsRegistry;
import org.eclipse.papyrus.infra.gmfdiag.expansion.expansionmodel.rendering.InducedRepresentationCreationEditPolicy;
+import org.eclipse.papyrus.infra.services.edit.utils.ElementTypeUtils;
+import org.eclipse.papyrus.infra.types.ElementTypeSetConfiguration;
+import org.eclipse.papyrus.infra.types.core.Activator;
+import org.eclipse.papyrus.infra.types.core.registries.ElementTypeSetConfigurationRegistry;
import org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor;
import org.eclipse.papyrus.junit.utils.tests.AbstractEditorTest;
import org.eclipse.papyrus.uml.diagram.clazz.edit.parts.ClassEditPart;
+import org.eclipse.uml2.uml.Class;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.PackageableElement;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
@@ -84,7 +116,6 @@ public class ExpansionAddCompartment extends AbstractEditorTest {
// test the data structure that is interpreted by the framework
ChildrenListRepresentation childrenListRepresentation = diagramExpansionsRegistry.mapChildreen.get(CLASS_DIAGRAM_TYPE);
- System.out.println(childrenListRepresentation);
Assert.assertNotNull("A usage contex has been defined for " + CLASS_DIAGRAM_TYPE, childrenListRepresentation);
Assert.assertNotNull("The class has been redefined", childrenListRepresentation.IDMap.get(CLASS_VISUALID));
Assert.assertNotNull("The compartment of class has been added", childrenListRepresentation.IDMap.get(IMPLEMENTED_INTERFACES_HINT));
@@ -127,6 +158,144 @@ public class ExpansionAddCompartment extends AbstractEditorTest {
}
+
+ @Test
+ public void verifyClassCreationWithCompartment() {
+ // loading
+ DiagramExpansionsRegistry diagramExpansionsRegistry = loadXMIExpansionModel("AddCompartment.expansionmodel");
+ Assert.assertEquals("Size ot the registry must be equals to 1", 1, diagramExpansionsRegistry.getDiagramExpansions().size());
+ Assert.assertEquals("Size ot the map childreen must be equals to 1", 1, diagramExpansionsRegistry.mapChildreen.size());
+
+ // test the data structure that is interpreted by the framework
+ ChildrenListRepresentation childrenListRepresentation = diagramExpansionsRegistry.mapChildreen.get(CLASS_DIAGRAM_TYPE);
+ Assert.assertNotNull("A usage contex has been defined for " + CLASS_DIAGRAM_TYPE, childrenListRepresentation);
+ Assert.assertNotNull("The class has been redefined", childrenListRepresentation.IDMap.get(CLASS_VISUALID));
+ Assert.assertNotNull("The compartment of class has been added", childrenListRepresentation.IDMap.get(IMPLEMENTED_INTERFACES_HINT));
+ List<String> the_class_shape_Children = childrenListRepresentation.parentChildrenRelation.get(CLASS_VISUALID);
+ Assert.assertEquals("class shape can have a new compartment", 1, the_class_shape_Children.size());
+ Assert.assertEquals("class shape has to contain " + IMPLEMENTED_INTERFACES_HINT, IMPLEMENTED_INTERFACES_HINT, the_class_shape_Children.get(0));
+
+ // the model is valid
+ // now launch a class diagram
+
+ try {
+ initModel("ExpansionModelProject", "ExpansionModelTest", getBundle());
+ openDiagram(editor, "NewDiagram");
+ DiagramEditPart diagramEditPart = editor.getAdapter(DiagramEditPart.class);
+ Assert.assertNotNull("The diagram must be opened", diagramEditPart);
+ Package root = (Package) diagramEditPart.getDiagramView().getElement();
+ List<PackageableElement> initialChildren = new ArrayList<>(root.getPackagedElements());
+
+ Command command = getNodeCreationCommand(diagramEditPart, root, ElementTypeRegistry.getInstance().getType("org.eclipse.papyrus.umldi.Class_Shape"));
+ assertTrue(command != null && command.canExecute());
+
+ getTransactionalEditingDomain().getCommandStack().execute(GEFtoEMFCommandWrapper.wrap(command));
+ List<PackageableElement> newElements = new ArrayList<>(root.getPackagedElements()).stream().filter(v -> !initialChildren.contains(v)).collect(Collectors.toList());
+ assertThat("There is not one and only one class added: " + newElements, newElements.size(), equalTo(1));
+ assertThat(newElements.get(0), instanceOf(Class.class));
+ Class newClass = (Class) newElements.get(0);
+ // test in the notation
+ IGraphicalEditPart classEditPart = (IGraphicalEditPart) diagramEditPart.getChildren().stream().filter(ep -> ((IGraphicalEditPart) ep).resolveSemanticElement().equals(newClass)).findAny().orElse(null);
+ assertNotNull(classEditPart);
+ View classNotationView = classEditPart.getNotationView();
+ Assert.assertEquals("the Type of class editpart is not correct", classNotationView.getType(), ClassEditPart.VISUAL_ID);
+ Assert.assertEquals("the class editpart must contain 2 labels and 4 compartments", classNotationView.getPersistedChildren().size(), 6);
+ View compartment = (View) classNotationView.getPersistedChildren().get(5);
+ Assert.assertEquals("The last compartment must have the type " + IMPLEMENTED_INTERFACES_HINT, IMPLEMENTED_INTERFACES_HINT, compartment.getType());
+
+ // test in the editpart is created for this notation
+ Assert.assertEquals("the class editpart must contains 2 labels and 4 compartments", classEditPart.getChildren().size(), 6);
+ IGraphicalEditPart compartmentEdiPart = (IGraphicalEditPart) classEditPart.getChildren().get(5);
+ if (compartmentEdiPart.getNotationView().equals(compartment)) {
+ Assert.assertEquals("The last compartment must have the type " + IMPLEMENTED_INTERFACES_HINT, IMPLEMENTED_INTERFACES_HINT, compartmentEdiPart.getNotationView().getType());
+ }
+
+
+ getTransactionalEditingDomain().getCommandStack().undo();
+ List<PackageableElement> afterUndo = new ArrayList<>(root.getPackagedElements()).stream().filter(v -> !initialChildren.contains(v)).collect(Collectors.toList());
+ assertThat(afterUndo.size(), equalTo(0));
+
+ getTransactionalEditingDomain().getCommandStack().execute(GEFtoEMFCommandWrapper.wrap(command));
+ List<PackageableElement> afterRedo = new ArrayList<>(root.getPackagedElements()).stream().filter(v -> !initialChildren.contains(v)).collect(Collectors.toList());
+ assertThat(afterRedo.size(), equalTo(1));
+ assertThat(afterRedo.get(0), instanceOf(Class.class));
+
+ } catch (Exception e) {
+ fail(e.getMessage());
+ }
+
+ }
+
+ @Test
+ public void verifyMetaclassCreationWithCompartment() {
+ // loading
+ DiagramExpansionsRegistry diagramExpansionsRegistry = loadXMIExpansionModel("AddCompartment.expansionmodel");
+ Assert.assertEquals("Size ot the registry must be equals to 1", 1, diagramExpansionsRegistry.getDiagramExpansions().size());
+ Assert.assertEquals("Size ot the map childreen must be equals to 1", 1, diagramExpansionsRegistry.mapChildreen.size());
+
+ // test the data structure that is interpreted by the framework
+ ChildrenListRepresentation childrenListRepresentation = diagramExpansionsRegistry.mapChildreen.get(CLASS_DIAGRAM_TYPE);
+ Assert.assertNotNull("A usage contex has been defined for " + CLASS_DIAGRAM_TYPE, childrenListRepresentation);
+ Assert.assertNotNull("The class has been redefined", childrenListRepresentation.IDMap.get(CLASS_VISUALID));
+ Assert.assertNotNull("The compartment of class has been added", childrenListRepresentation.IDMap.get(IMPLEMENTED_INTERFACES_HINT));
+ List<String> the_class_shape_Children = childrenListRepresentation.parentChildrenRelation.get(CLASS_VISUALID);
+ Assert.assertEquals("class shape can have a new compartment", 1, the_class_shape_Children.size());
+ Assert.assertEquals("class shape has to contain " + IMPLEMENTED_INTERFACES_HINT, IMPLEMENTED_INTERFACES_HINT, the_class_shape_Children.get(0));
+
+ // the model is valid
+ // now launch a class diagram
+
+ try {
+ initModel("ExpansionModelProject", "ExpansionModelTest", getBundle());
+ openDiagram(editor, "NewDiagram");
+ DiagramEditPart diagramEditPart = editor.getAdapter(DiagramEditPart.class);
+ Assert.assertNotNull("The diagram must be opened", diagramEditPart);
+ Package root = (Package) diagramEditPart.getDiagramView().getElement();
+ List<PackageableElement> initialChildren = new ArrayList<>(root.getPackagedElements());
+ loadElementTypeSetConfiguration(ElementTypeUtils.getDefaultClientContext().getId(), "/org.eclipse.papyrus.infra.gmfdiag.common.tests/models/Standard.elementtypesconfigurations");
+ IElementType type = ElementTypeRegistry.getInstance().getType("org.eclipse.papyrus.infra.gmfdiag.common.tests.StandardTest");
+ Command command = getNodeCreationCommand(diagramEditPart, root, type);
+ assertTrue(command != null && command.canExecute());
+
+ getTransactionalEditingDomain().getCommandStack().execute(GEFtoEMFCommandWrapper.wrap(command));
+ List<PackageableElement> newElements = new ArrayList<>(root.getPackagedElements()).stream().filter(v -> !initialChildren.contains(v)).collect(Collectors.toList());
+ assertThat("There is not one and only one class added: " + newElements, newElements.size(), equalTo(1));
+ assertThat(newElements.get(0), instanceOf(Class.class));
+ Class newClass = (Class) newElements.get(0);
+ assertNotNull(newClass.getAppliedStereotype("StandardProfile::Metaclass"));
+
+ // test in the notation
+ IGraphicalEditPart classEditPart = (IGraphicalEditPart) diagramEditPart.getChildren().stream().filter(ep -> ((IGraphicalEditPart) ep).resolveSemanticElement().equals(newClass)).findAny().orElse(null);
+ assertNotNull(classEditPart);
+ View classNotationView = classEditPart.getNotationView();
+ Assert.assertEquals("the Type of class editpart is not correct", classNotationView.getType(), ClassEditPart.VISUAL_ID);
+ Assert.assertEquals("the class editpart must contain 2 labels and 6 compartments", classNotationView.getPersistedChildren().size(), 8);
+ View compartment = (View) classNotationView.getPersistedChildren().get(7);
+ Assert.assertEquals("The last compartment must have the type " + IMPLEMENTED_INTERFACES_HINT, IMPLEMENTED_INTERFACES_HINT, compartment.getType());
+
+ // test in the editpart is created for this notation
+ Assert.assertEquals("the class editpart must contains 2 labels and 5 compartments", 7, classEditPart.getChildren().size());
+ IGraphicalEditPart compartmentEdiPart = (IGraphicalEditPart) classEditPart.getChildren().get(6);
+ if (compartmentEdiPart.getNotationView().equals(compartment)) {
+ Assert.assertEquals("The last compartment must have the type " + IMPLEMENTED_INTERFACES_HINT, IMPLEMENTED_INTERFACES_HINT, compartmentEdiPart.getNotationView().getType());
+ }
+
+ } catch (Exception e) {
+ fail(e.getMessage());
+ }
+
+ }
+
+ protected Command getNodeCreationCommand(EditPart editPart, EObject owner, IElementType elementType) {
+ CreateElementRequestAdapter adapter = new CreateElementRequestAdapter(new CreateElementRequest(owner, elementType));
+ String hint = (elementType instanceof IHintedType) ? ((IHintedType) elementType).getSemanticHint() : null;
+ CreateViewAndElementRequest.ViewAndElementDescriptor descriptor = new CreateViewAndElementRequest.ViewAndElementDescriptor(adapter, Node.class, hint, PreferencesHint.USE_DEFAULTS);
+ CreateViewAndElementRequest request = new CreateViewAndElementRequest(descriptor);
+
+ EditPart targetEditPart = editPart.getTargetEditPart(request);
+ return targetEditPart.getCommand(request);
+ }
+
protected DiagramExpansionsRegistry loadXMIExpansionModel(String filename) {
DiagramExpansionsRegistry diagramExpansionsRegistry = DiagramExpansionSingleton.getInstance().getDiagramExpansionRegistry();
Assert.assertEquals("Size ot the registry must be equals to 0", 0, diagramExpansionsRegistry.getDiagramExpansions().size());
@@ -160,5 +329,39 @@ public class ExpansionAddCompartment extends AbstractEditorTest {
public void clearExpansionRegistry() {
DiagramExpansionSingleton.getInstance().getDiagramExpansionRegistry().clear();
}
+
+
+ /**
+ * Loads a given elementType set from a given identifier
+ */
+ public static boolean loadElementTypeSetConfiguration(String contextId, String path) throws Exception {
+
+ if (path == null) {
+ Activator.log.warn("Path must not be null" + path);
+ return false;
+ }
+
+ if (contextId == null) {
+ Activator.log.warn("contextId must not be null" + path);
+ return false;
+ }
+ URI localURI = URI.createPlatformPluginURI(path, true);
+ Field set = ElementTypeSetConfigurationRegistry.class.getDeclaredField("elementTypeSetConfigurationResourceSet");
+ set.setAccessible(true);
+ ResourceSet resourceSet = (ResourceSet)set.get(ElementTypeSetConfigurationRegistry.getInstance());
+ Resource resource = resourceSet.createResource(localURI);
+ try {
+ resource.load(null);
+ EObject content = resource.getContents().get(0);
+ if (content instanceof ElementTypeSetConfiguration) {
+ return ElementTypeSetConfigurationRegistry.getInstance().loadElementTypeSetConfiguration(contextId, (ElementTypeSetConfiguration) content);
+ }
+ } catch (IOException e) {
+ Activator.log.error(e);
+ }
+
+ return false;
+
+ }
}

Back to the top