/******************************************************************************* * Copyright (c) 2006-2012 * Software Technology Group, Dresden University of Technology * DevBoost GmbH, Berlin, Amtsgericht Charlottenburg, HRB 140026 * * 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: * Software Technology Group - TU Dresden, Germany; * DevBoost GmbH - Berlin, Germany * - initial API and implementation ******************************************************************************/ package org.reuseware.coconut.test.applications; import java.io.File; import java.util.Map.Entry; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EPackage; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.URIConverter; import org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl; import org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl; import org.eclipse.uml2.uml.UMLPackage; import org.eclipse.uml2.uml.resource.UMLResource; import org.emftext.language.java.JavaClasspath; import org.emftext.language.java.JavaPackage; import org.emftext.language.java.resource.JavaSourceOrClassFileResourceFactoryImpl; import org.emftext.language.modelquery.resource.CustomModelqueryResourceFactory; import org.emftext.language.secprop.SecpropPackage; import org.emftext.language.secprop.resource.SecpropResourceFactoryDelegator; import org.emftext.language.usecaseinvariant.UsecaseinvariantPackage; import org.emftext.language.usecaseinvariant.resource.ucinv.mopp.UcinvResourceFactoryDelegator; import org.emftext.language.valueflow.ValueflowPackage; import org.junit.Test; import org.oasisopen.names.tc.opendocument.xmlns.office.OfficePackage; import org.oasisopen.names.tc.opendocument.xmlns.office.util.OfficeResourceFactoryImpl; import org.reuseware.coconut.test.AbstractReusewareCompositionTestCase; import org.reuseware.coconut.test.AbstractReusewareTestHelper; import org.reuseware.coconut.test.sokan.SokanReusewareTestHelper; import org.reuseware.sokan.index.util.IndexUtil; public class ReusewareModelSoCCompositionTest extends AbstractReusewareCompositionTestCase { protected final String exampleProject = "org.reuseware.application.ticketshop"; protected final String testProject = "org.reuseware.application.ticketshop.test"; protected final String[] fileExtensions = {"odt", "uml", "ucinv", "valueflow", "secprop", "java"}; @Override public AbstractReusewareTestHelper getTestHelper() { return new SokanReusewareTestHelper(); //return new ResourceSetReusewareTestHelper(); } @Test public void testInit() throws Exception { for(Entry<Object, Object> entry : newResourceSet().getLoadOptions().entrySet()) { IndexUtil.INSTANCE.addLoadOption(entry.getKey().toString(), entry.getValue()); } // store with default fracol assertRegisterFragmentStore( "org.reuseware.coconut.resource", "store", new String[]{}); initOutStore(exampleProject); setUpUML(); setUpJava(); setUpODT(); setUpUcinv(); setUpValueFlow(); setUpSecProp(); } /* TODO #1667: activate when fixed @Test public void testUseCase() throws Exception { assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-usecase/compositionsystem", fileExtensions); assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-usecase/instantiation-odt", fileExtensions); assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-usecase/variant-java", fileExtensions); assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-usecase/variant-odt", fileExtensions); assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-usecase/variant-ucinv", fileExtensions); assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-usecase/variant-usecase_uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-usecase/variant-valueflow", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-participation/compositionsystem", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-participation/instantiation-odt", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-participation/instantiation-ucinv", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-participation/instantiation-usecase_uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-participation/variant-java", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-participation/variant-odt", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-participation/variant-ucinv", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-participation/variant-usecase_uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-participation/variant-valueflow", fileExtensions); assertRegisterFragmentStore(exampleProject, "src", fileExtensions); assertRegisterFragmentStore(exampleProject, "store", fileExtensions, true); assertFolderStructureContainedIn(exampleProject, "out", testProject, "out_usecase", true); } @Test public void testComplete() throws Exception { assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-class/compositionsystem", fileExtensions); assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-class/instantiation-odt", fileExtensions); assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-class/instantiation-ucinv", fileExtensions); assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-class/instantiation-usecase_uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-class/variant-java", fileExtensions); assertRegisterFragmentStore(exampleProject, "independent-concern-dimensions/concern-dimension-class/variant-uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-dataclass/compositionsystem", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-dataclass/instantiation-ucinv", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-dataclass/instantiation-usecase_uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-dataclass/variant-java", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-dataclass/variant-uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-associate/compositionsystem", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-associate/instantiation-ucinv", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-associate/instantiation-usecase_uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-associate/variant-java", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-associate/variant-uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-exchange/compositionsystem", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-exchange/instantiation-ucinv", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-exchange/instantiation-usecase_uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-exchange/variant-java", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-exchange/variant-ucinv", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-exchange/variant-usecase_uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-exchange/variant-valueflow", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-flow/compositionsystem", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-flow/instantiation-ucinv", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-flow/variant-java", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-flow/variant-valueflow", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-trigger/compositionsystem", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-trigger/instantiation-valueflow", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-trigger/variant-java", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-factory/compositionsystem", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-factory/instantiation-odt", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-factory/instantiation-ucinv", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-factory/instantiation-usecase_uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-factory/variant-java", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-typebinding/compositionsystem", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-typebinding/instantiation-odt", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-typebinding/instantiation-ucinv", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-typebinding/instantiation-usecase_uml", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-typebinding/variant-java", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-app/compositionsystem", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-app/instantiation-odt", fileExtensions); assertRegisterFragmentStore(exampleProject, "dependent-concern-dimensions/concern-dimension-app/variant-java", fileExtensions); assertFolderStructureContainedIn(exampleProject, "out", testProject, "out_complete", true); } @Test public void testSecurity() throws Exception { assertRegisterFragmentStore(exampleProject, "additional-security-concern-dimension/concern-dimension-usecase/variant-secprop", fileExtensions); assertRegisterFragmentStore(exampleProject, "additional-security-concern-dimension/concern-dimension-participation/variant-secprop", fileExtensions); assertRegisterFragmentStore(exampleProject, "additional-security-concern-dimension/concern-dimension-exchange/variant-secprop", fileExtensions); assertRegisterFragmentStore(exampleProject, "additional-security-concern-dimension/concern-dimension-security/compositionsystem", fileExtensions); assertRegisterFragmentStore(exampleProject, "additional-security-concern-dimension/concern-dimension-security/instantiation-secprop", fileExtensions); assertRegisterFragmentStore(exampleProject, "additional-security-concern-dimension/concern-dimension-security/variant-java", fileExtensions); assertRegisterFragmentStore(exampleProject, "additional-security-concern-dimension/concern-dimension-security/variant-secprop", fileExtensions); assertRegisterFragmentStore(exampleProject, "store_security", fileExtensions); assertFolderStructureContainedIn(exampleProject, "out", testProject, "out_security", true); } */ protected void initOutStore(String projectID) throws Exception { // out store File outStoreFolder = new File("../" + projectID + "/out"); AbstractReusewareTestHelper.deleteDirectory(outStoreFolder, false, false); outStoreFolder.mkdir(); assertRegisterFragmentStore( projectID, "out", new String[] {}); } protected void setUpJava() { EPackage.Registry.INSTANCE.put("http://www.emftext.org/java", JavaPackage.eINSTANCE); Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put( "java", new JavaSourceOrClassFileResourceFactoryImpl()); Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put( "modelquery", new CustomModelqueryResourceFactory()); } protected void setUpUML() { //register all supported UML versions EPackage.Registry.INSTANCE.put("http://www.eclipse.org/uml2/2.0.0/UML", UMLPackage.eINSTANCE); EPackage.Registry.INSTANCE.put("http://www.eclipse.org/uml2/2.1.0/UML", UMLPackage.eINSTANCE); EPackage.Registry.INSTANCE.put("http://www.eclipse.org/uml2/3.0.0/UML", UMLPackage.eINSTANCE); Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put( "uml", UMLResource.Factory.INSTANCE); Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put( "ecore", new EcoreResourceFactoryImpl()); URIConverter.URI_MAP.put( URI.createURI("pathmap:/UML2_METAMODELS/"), URI.createPlatformPluginURI("org.eclipse.uml2.resources/metamodels/", false)); URIConverter.URI_MAP.put( URI.createURI("pathmap:/UML2_PROFILES/"), URI.createPlatformPluginURI("org.eclipse.uml2.resources/profiles/", false)); URIConverter.URI_MAP.put( URI.createURI("pathmap:/UML2_LIBRARIES/"), URI.createPlatformPluginURI("org.eclipse.uml2.resources/libraries/", false)); } protected void setUpODT() { EPackage.Registry.INSTANCE.put(OfficePackage.eNS_URI, OfficePackage.eINSTANCE); Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put( "odt", new OfficeResourceFactoryImpl()); } protected void setUpUcinv() { EPackage.Registry.INSTANCE.put(UsecaseinvariantPackage.eNS_URI, UsecaseinvariantPackage.eINSTANCE); Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put( "ucinv", new UcinvResourceFactoryDelegator()); } protected void setUpValueFlow() { EPackage.Registry.INSTANCE.put(ValueflowPackage.eNS_URI, ValueflowPackage.eINSTANCE); Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put( "valueflow", new XMIResourceFactoryImpl()); } protected void setUpSecProp() { EPackage.Registry.INSTANCE.put(SecpropPackage.eNS_URI, SecpropPackage.eINSTANCE); Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put( "secprop", new SecpropResourceFactoryDelegator()); } protected ResourceSet newResourceSet() { ResourceSet resourceSet = super.newResourceSet(); resourceSet.getLoadOptions().put(JavaClasspath.OPTION_ALWAYS_USE_FULLY_QUALIFIED_NAMES, Boolean.TRUE); return resourceSet; } }