diff options
author | Nicolas FAUVERGUE | 2017-06-06 11:16:42 +0000 |
---|---|---|
committer | Nicolas FAUVERGUE | 2018-07-03 13:03:09 +0000 |
commit | e85a36958767fb032bc9c93fc3393a0fe70cc465 (patch) | |
tree | c2f150f365de8b733d97a33a0322a3d140d8bf86 | |
parent | be1a108d62ac6f445de31d8b6df9488bf5921dda (diff) | |
download | org.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>
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; + + } } |