blob: 29553550d35b40d62e890bd43076ce4ef024bab6 [file] [log] [blame]
package org.eclipse.qvt.declarative.test.relations.atlvm;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Collections;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.FileLocator;
import org.eclipse.core.runtime.Path;
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.impl.ResourceSetImpl;
import org.eclipse.m2m.atl.drivers.emf4atl.ASMEMFModel;
import org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage;
import org.eclipse.qvt.declarative.execution.LabelledModel;
import org.eclipse.qvt.declarative.execution.LabelledModelFactory;
import org.eclipse.qvt.declarative.relations.atlvm.utils.ASMEMFModelUtils;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class ATLVMUtilsTest {
protected static IProject testProject;
protected static IFolder sourceFolder;
protected static IFolder buildFolder;
protected static IFile transformationFile;
protected static IFile umlMetamodelFile;
protected static IFile unknownFile;
protected static IFile rdbmsMetamodelFile;
protected static ResourceSet testResourceSet;
protected static Resource workspaceAbstractSyntaxTree;
protected static Resource unknownResource;
protected static Resource umlMetamodelResource;
protected static Resource importEcoreFileToWorkspace(String pluginPath,
IFile workspaceFile, ResourceSet resourceSet) throws IOException,
CoreException {
File file;
URL astURL = FileLocator.find(Activator.getDefault().getBundle(),
new Path(pluginPath), Collections.EMPTY_MAP);
if (!workspaceFile.exists()) {
file = workspaceFile.getLocation().toFile();
file.createNewFile();
workspaceFile.create(new FileInputStream(file), true, null);
}
workspaceFile.setContents(astURL.openStream(), false, false, null);
return resourceSet.createResource(URI.createURI(workspaceFile
.getLocationURI().toURL().toString()));
}
@BeforeClass
public static void setUpBeforeClass() throws Exception {
testProject = ResourcesPlugin.getWorkspace().getRoot().getProject(
"test");
if (!testProject.exists()) {
testProject.create(null);
}
testProject.open(null);
sourceFolder = testProject.getFolder("src");
if (!sourceFolder.exists()) {
sourceFolder.create(true, true, null);
}
transformationFile = sourceFolder.getFile("transfo.xmi");
umlMetamodelFile = sourceFolder.getFile("SimpleUml.ecore");
rdbmsMetamodelFile = sourceFolder.getFile("SimpleRdbms.ecore");
unknownFile = sourceFolder.getFile("My.simpleuml");
buildFolder = testProject.getFolder("build");
if (!buildFolder.exists()) {
buildFolder.create(true, true, null);
}
testResourceSet = new ResourceSetImpl();
workspaceAbstractSyntaxTree = importEcoreFileToWorkspace(
"/resources/SimpleUMLtoRDBMS.eqvtrelation", transformationFile,
testResourceSet);
umlMetamodelResource = importEcoreFileToWorkspace(
"/resources/SimpleUml.ecore", umlMetamodelFile, testResourceSet);
importEcoreFileToWorkspace("/resources/SimpleRdbms.ecore",
rdbmsMetamodelFile, testResourceSet);
unknownResource = importEcoreFileToWorkspace("/resources/My.simpleuml",
unknownFile, testResourceSet);
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testGetASMEMFModelFromEPackage() {
EPackage package1 = QVTRelationPackage.eINSTANCE;
ASMEMFModel model = ASMEMFModelUtils.getASMEMFModelFrom(package1, null);
Assert.assertEquals(model.getName(), "QVTRelation");
Assert.assertEquals(model.getExtent().getURI().toString(),
QVTRelationPackage.eNS_URI);
}
@Test
public void testgetASMEMFModelFromLabeledModelBoolean() throws Exception {
LabelledModel namedMetamodel = LabelledModelFactory.INSTANCE
.createLabelledMetamodel("QVTR", QVTRelationPackage.eNS_URI);
LabelledModel namedModel = LabelledModelFactory.INSTANCE
.createLabelledModel("uml2rdbms", workspaceAbstractSyntaxTree
.getURI().toString(), namedMetamodel);
ASMEMFModel model = ASMEMFModelUtils.getASMEMFModelFrom(namedModel,
false);
Assert.assertNotNull(model);
Assert.assertEquals("uml2rdbms", model.getName());
Assert.assertEquals("QVTR", model.getMetamodel().getName());
Assert.assertEquals(QVTRelationPackage.eINSTANCE.eResource(),
((ASMEMFModel) model.getMetamodel()).getExtent());
namedMetamodel = LabelledModelFactory.INSTANCE.createLabelledMetamodel("SimpleUML", umlMetamodelResource.getURI().toString());
namedModel = LabelledModelFactory.INSTANCE.createLabelledModel("aliasUML", unknownResource.getURI().toString(), namedMetamodel);
model = ASMEMFModelUtils.getASMEMFModelFrom(namedModel, false);
Assert.assertNotNull(model);
Assert.assertEquals("aliasUML", model.getName());
Assert.assertEquals("SimpleUML", model.getMetamodel().getName());
Assert.assertEquals(umlMetamodelResource.getURI(),((ASMEMFModel) model.getMetamodel()).getExtent().getURI());
Assert.assertTrue(model.getElementsByType("EObject").size() > 0);
}
}