blob: 0794dfff3ef1e74cc799443a938b3922108cdfe4 [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2011-2013 See4sys, itemis and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
*
* Contributors:
* See4sys - Initial API and implementation
* itemis - [358131] Make Xtend/Xpand/CheckJobs more robust against template file encoding mismatches
* itemis - [418005] Add support for model files with multiple root elements
* itemis - [423676] AbstractIntegrationTestCase unable to remove project references that are no longer needed
*
* </copyright>
*/
package org.eclipse.sphinx.tests.xtendxpand.integration;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Status;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.sphinx.emf.mwe.resources.BasicWorkspaceResourceLoader;
import org.eclipse.sphinx.emf.util.EcorePlatformUtil;
import org.eclipse.sphinx.examples.hummingbird20.typemodel.Platform;
import org.eclipse.sphinx.testutils.integration.referenceworkspace.xtendxpand.XtendXpandIntegrationTestCase;
import org.eclipse.sphinx.testutils.integration.referenceworkspace.xtendxpand.XtendXpandTestReferenceWorkspace;
import org.eclipse.sphinx.xtend.typesystem.emf.SphinxManagedEmfMetaModel;
import org.eclipse.sphinx.xtendxpand.XtendEvaluationRequest;
import org.eclipse.sphinx.xtendxpand.jobs.XtendJob;
import org.eclipse.uml2.uml.Model;
import org.eclipse.uml2.uml.PackageableElement;
import org.eclipse.xtend.typesystem.MetaModel;
import org.eclipse.xtend.typesystem.uml2.UML2MetaModel;
public class XtendJobTest extends XtendXpandIntegrationTestCase {
public XtendJobTest() {
// Set subset of projects to load
Set<String> projectsToLoad = getProjectSubsetToLoad();
projectsToLoad.add(XtendXpandTestReferenceWorkspace.HB_TRANSFORM_XTEND_PROJECT_NAME);
}
public void testUML2ToHummingbird20Transform() throws Exception {
// Check existence of UML2 file
IFile umlModelFile = refWks.transformXtendProject.getFile(XtendXpandTestReferenceWorkspace.HB_TRANSFORM_XTEND_PROJECT_UML_MODEL_PATH);
assertNotNull(umlModelFile);
assertTrue(umlModelFile.exists());
// Check existence of extension file
IFile extFile = refWks.transformXtendProject.getFile(XtendXpandTestReferenceWorkspace.UML2_HB20_EXT_FILE_PATH);
assertNotNull(extFile);
assertTrue(extFile.exists());
// Get the first package of the UML2 file
Resource resource = EcorePlatformUtil.getResource(umlModelFile);
assertNotNull(resource);
assertFalse(resource.getContents().isEmpty());
EObject model = resource.getContents().get(0);
assertNotNull(model);
assertTrue(model instanceof Model);
PackageableElement fistPackage = ((Model) model).getPackagedElements().get(0);
assertNotNull(fistPackage);
// Xtend execution
XtendEvaluationRequest xtendEvaluationRequest = new XtendEvaluationRequest(XtendXpandTestReferenceWorkspace.XTEND_UML2_HB20_EXTENSION_NAME,
model);
List<MetaModel> metaModels = new ArrayList<MetaModel>(2);
metaModels.add(new UML2MetaModel());
metaModels.add(new SphinxManagedEmfMetaModel(umlModelFile.getProject()));
XtendJob xtendJob = new XtendJob("Xtend Job", metaModels, xtendEvaluationRequest); //$NON-NLS-1$
xtendJob.setWorkspaceResourceLoader(new BasicWorkspaceResourceLoader());
IStatus xtendStatus = xtendJob.run(new NullProgressMonitor());
assertEquals(Status.OK_STATUS, xtendStatus);
// Xtend result verification
Map<Object, Collection<?>> result = xtendJob.getResultObjects();
assertEquals(1, result.size());
Object inputObject = result.keySet().iterator().next();
assertEquals(model, inputObject);
Collection<?> resultCollection = result.values().iterator().next();
assertEquals(1, resultCollection.size());
Object resultObject = resultCollection.iterator().next();
assertTrue(resultObject instanceof Platform);
assertEquals(fistPackage.getName(), ((Platform) resultObject).getName());
}
}