| /***************************************************************************** |
| * Copyright (c) 2021 CEA LIST and others. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| * Contributors: |
| * Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation |
| * |
| *****************************************************************************/ |
| |
| package org.eclipse.papyrus.model2doc.integration.ieee.requirements.sysml16.odt.architecture.tests; |
| |
| import java.util.Collections; |
| import java.util.Iterator; |
| import java.util.Map; |
| import java.util.Map.Entry; |
| |
| import org.eclipse.emf.common.command.CommandStack; |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.gmf.runtime.common.core.command.ICommand; |
| import org.eclipse.gmf.runtime.emf.type.core.requests.DestroyElementRequest; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.papyrus.infra.emf.gmf.command.GMFtoEMFCommandWrapper; |
| import org.eclipse.papyrus.infra.services.edit.service.ElementEditServiceUtils; |
| import org.eclipse.papyrus.infra.services.edit.service.IElementEditService; |
| import org.eclipse.papyrus.infra.types.ElementTypeSetConfiguration; |
| import org.eclipse.papyrus.infra.types.core.registries.ElementTypeSetConfigurationRegistry; |
| import org.eclipse.papyrus.junit.utils.rules.PapyrusEditorFixture; |
| import org.eclipse.papyrus.junit.utils.rules.PluginResource; |
| import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.DocumentTemplate; |
| import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.utils.DocumentStructureTemplateConstants; |
| import org.eclipse.papyrus.model2doc.integration.emf.documentstructuretemplate.types.internal.advices.DocumentTemplateElementTypesConstants; |
| import org.eclipse.uml2.uml.NamedElement; |
| import org.eclipse.uml2.uml.Package; |
| import org.junit.Assert; |
| import org.junit.Rule; |
| import org.junit.Test; |
| |
| @SuppressWarnings("nls") |
| @PluginResource("resources/DocumentTemplateElementType/SysML16_DocumentTemplateSemanticOwnerDeletion.di") |
| public class SysML16_DocumentTemplateElementTypeTest { |
| |
| /** |
| * The editor fixture |
| */ |
| @Rule |
| public final PapyrusEditorFixture fixture = new PapyrusEditorFixture(Collections.singletonList("pdst")); |
| |
| /** |
| * This tests checks the elements available for the creation throw the |
| * Architecture Framework |
| */ |
| @Test |
| public void checkDocumentTemplateOwnerDeletion() { |
| final Package root = this.fixture.getModel(); |
| final Resource pdstRes = getPDSTResourceForCurrentModel(); |
| Assert.assertNotNull("The pdst resource has not been found.", pdstRes); |
| Assert.assertEquals("The pdst resource doesn't contains the expected elements.", 2, pdstRes.getContents().size()); |
| NamedElement subPackage = root.getOwnedMember("SubPackage"); |
| Assert.assertNotNull("The subpackage has not been found.", subPackage); |
| |
| for (final EObject current : pdstRes.getContents()) { |
| Assert.assertTrue("The pdst resource doesn't contains the expected elements.", current instanceof DocumentTemplate); |
| Assert.assertTrue("The owner of the DocumentTemplate is not the expected one.", subPackage == ((DocumentTemplate) current).getSemanticContext()); |
| } |
| |
| DestroyElementRequest destroyRequest = new DestroyElementRequest(subPackage, false); |
| final IElementEditService provider = ElementEditServiceUtils.getCommandProvider(subPackage); |
| final ICommand cmd = provider.getEditCommand(destroyRequest); |
| |
| Assert.assertNotNull("The destroy command is null", cmd); |
| Assert.assertTrue("The destroy command is not executable", cmd.canExecute()); |
| |
| // we check the command |
| final CommandStack commandStack = this.fixture.getEditingDomain().getCommandStack(); |
| commandStack.execute(GMFtoEMFCommandWrapper.wrap(cmd)); |
| |
| this.fixture.save(); |
| |
| Assert.assertNull("The subpackage has not been deleted", root.getOwnedMember("SubPackage")); |
| |
| // we check the contents of the pdst file |
| Assert.assertEquals("The pdst resource is not empty after the deletion of the semantic context", 0, pdstRes.getContents().size()); |
| |
| commandStack.undo(); |
| |
| Assert.assertEquals("The pdst resource is empty after the undo of the deletion of the semantic context", 2, pdstRes.getContents().size()); |
| |
| commandStack.redo(); |
| this.fixture.save(); |
| |
| Assert.assertEquals("The pdst resource is not empty after the redo of the deletion of the semantic context", 0, pdstRes.getContents().size()); |
| |
| } |
| |
| @Test |
| public void checkElementTypeConfiguration() { |
| final Map<String, Map<String, ElementTypeSetConfiguration>> elementTypeSetConfigurationsArchitecture = ElementTypeSetConfigurationRegistry.getInstance().getElementTypeSetConfigurations(); |
| Assert.assertNotNull("The method ElementTypeSetConfigurationRegistry.getInstance().getElementTypeSetConfigurations() returns null", elementTypeSetConfigurationsArchitecture); |
| Assert.assertFalse("The method ElementTypeSetConfigurationRegistry.getInstance().getElementTypeSetConfigurations() returns an empty map", elementTypeSetConfigurationsArchitecture.isEmpty()); |
| |
| final Map<String, ElementTypeSetConfiguration> elementTypeSetConfigurations = elementTypeSetConfigurationsArchitecture.get(DocumentTemplateElementTypesConstants.PAPYRUS_ELEMENT_TYPE_CONTEXT); |
| Assert.assertNotNull(NLS.bind("The map of ElementTypeSetConfiguration is null for the context {0}", DocumentTemplateElementTypesConstants.PAPYRUS_ELEMENT_TYPE_CONTEXT), elementTypeSetConfigurations); |
| Assert.assertFalse(NLS.bind("The map of ElementTypeSetConfiguration is empty the context {0}", DocumentTemplateElementTypesConstants.PAPYRUS_ELEMENT_TYPE_CONTEXT), elementTypeSetConfigurations.isEmpty()); |
| |
| |
| boolean findRequiredTypeSet = false; |
| final Iterator<Entry<String, ElementTypeSetConfiguration>> iter = elementTypeSetConfigurations.entrySet().iterator(); |
| while (iter.hasNext() && !findRequiredTypeSet) { |
| findRequiredTypeSet = DocumentTemplateElementTypesConstants.DOCUMENT_TEMPLATE_ELEMENT_TYPE_SET_ID.equals(iter.next().getValue().getIdentifier()); |
| } |
| |
| Assert.assertTrue(findRequiredTypeSet); |
| } |
| |
| |
| /** |
| * |
| * @return the *.pdst resource associated to the current model |
| */ |
| protected final Resource getPDSTResourceForCurrentModel() { |
| for (final Resource current : this.fixture.getResourceSet().getResources()) { |
| if (DocumentStructureTemplateConstants.DOCUMENT_STRUCTURE_TEMPLATE_FILE_EXTENSION |
| .equals(current.getURI().fileExtension())) { |
| if (this.fixture.getModelResourceURI().trimFileExtension() |
| .equals(current.getURI().trimFileExtension())) { |
| return current; |
| } |
| } |
| } |
| return null; |
| } |
| } |