blob: af16e26e8901328f5075edb960d8b8b5e5a9ee40 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 Mia-Software.
* 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:
* Gregoire DUPE (Mia-Software)
*******************************************************************************/
package org.eclipse.modisco.infra.browser.custom.examples.uml.tests;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.ILog;
import org.eclipse.core.runtime.ILogListener;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.MultiStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.emf.common.util.TreeIterator;
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.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.gmt.modisco.infra.common.core.internal.utils.FileUtils;
import org.eclipse.gmt.modisco.infra.common.core.internal.utils.IFilter;
import org.eclipse.gmt.modisco.infra.common.core.internal.utils.ProjectUtils;
import org.eclipse.gmt.modisco.infra.common.core.logging.MoDiscoLogger;
import org.eclipse.gmt.modisco.infra.facet.Facet;
import org.eclipse.gmt.modisco.infra.facet.FacetReference;
import org.eclipse.gmt.modisco.infra.facet.FacetSet;
import org.eclipse.gmt.modisco.infra.facet.core.FacetContext;
import org.eclipse.gmt.modisco.infra.facet.core.FacetSetCatalog;
import org.eclipse.gmt.modisco.infra.facet.core.exception.ModiscoFacetException;
import org.eclipse.gmt.modisco.infra.query.ModelQuery;
import org.eclipse.gmt.modisco.infra.query.ModelQuerySet;
import org.eclipse.gmt.modisco.infra.query.core.AbstractModelQuery;
import org.eclipse.gmt.modisco.infra.query.core.ModelQuerySetCatalog;
import org.eclipse.gmt.modisco.infra.query.core.exception.ModelQueryException;
import org.eclipse.uml2.uml.Class;
import org.eclipse.uml2.uml.Model;
import org.eclipse.uml2.uml.Property;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* @author Gregoire DUPE
*
*/
@SuppressWarnings({ "boxing", "nls" })
public class Tests {
private static final String PLUGIN_URI = "platform:/plugin/org.eclipse.gmt.modisco.infra.browser.custom.examples.uml";
private final ResourceSet resourceSet = new ResourceSetImpl();
@BeforeClass
public static void beforeClass() throws CoreException {
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
for (IProject project : projects) {
project.delete(true, new NullProgressMonitor());
}
}
@Test
public void subClassifiers() throws ModelQueryException, ModiscoFacetException {
ModelQuerySetCatalog.getSingleton().waitUntilBuilt();
ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton();
ModelQuerySet querySet = catalog.getModelQuerySet("_example_uml");
Assert.assertNotNull(querySet);
ModelQuery modelQuery = querySet.getQuery("subClassifiers");
Assert.assertNotNull(modelQuery);
URI umlModelUri = URI.createURI(Tests.PLUGIN_URI + "/umlModels/umlExample1.uml");
Resource umlModel = this.resourceSet.getResource(umlModelUri, true);
TreeIterator<EObject> treeIterator = umlModel.getAllContents();
while (treeIterator.hasNext()) {
EObject eObject = treeIterator.next();
if (eObject instanceof Class) {
Class classs = (Class) eObject;
if (classs.getName().equals("Query")) {
AbstractModelQuery modelQueryImpl = catalog.getModelQueryImpl(modelQuery);
Object queryResult = modelQueryImpl.basicEvaluate(classs);
if (!(queryResult instanceof List<?>)) {
Assert.fail("Query result is expected to be a List");
}
List<?> eClassifiers = (List<?>) queryResult;
Assert.assertEquals(2, eClassifiers.size());
Class class1 = null;
Class class2 = null;
TreeIterator<EObject> treeIterator1 = umlModel.getAllContents();
while (treeIterator1.hasNext()) {
EObject eObject1 = treeIterator1.next();
if (eObject1 instanceof Class) {
Class classs1 = (Class) eObject1;
if (classs1.getName().equals("OCLQuery")) {
class1 = classs1;
}
if (classs1.getName().equals("JavaQuery")) {
class2 = classs1;
}
}
}
Assert.assertTrue(eClassifiers.contains(class1));
Assert.assertTrue(eClassifiers.contains(class2));
FacetSetCatalog facetSetCatalog = FacetSetCatalog.getSingleton();
FacetSet facetSet = facetSetCatalog.getFacetSet("_example_umlFacets");
Facet facet = facetSet.getFacet("ClassifierExtension");
FacetReference facetReference = (FacetReference) facet
.getEStructuralFeature("subClassifiers");
FacetContext facetContext = new FacetContext();
facetContext.addFacet(facet);
List<?> eClassifiers2 = (List<?>) facetContext.get(classs, facetReference);
Assert.assertEquals(2, eClassifiers2.size());
Assert.assertTrue(eClassifiers2.contains(class1));
Assert.assertTrue(eClassifiers2.contains(class2));
}
}
}
}
@Test
public void umlQuerySet() throws Exception {
URI uri = URI.createURI(Tests.PLUGIN_URI + "/_example_uml.querySet");
FileUtils.checkEMFResource(uri, 1);
}
@Test
public void umlUiCustom() throws Exception {
URI uri = URI.createURI(Tests.PLUGIN_URI + "/_example_uml.uiCustom");
FileUtils.checkEMFResource(uri, 1);
}
@Test
public void umlFacets() throws Exception {
URI uri = URI.createURI(Tests.PLUGIN_URI + "/_example_umlFacets.facetSet");
FileUtils.checkEMFResource(uri, 1);
}
@Test
public void umlFacets2() throws Exception {
URI uri = URI.createURI(Tests.PLUGIN_URI + "/_example_umlFacets2.facetSet");
FileUtils.checkEMFResource(uri, 1);
}
@Test
public void umlFacetsUiCustom() throws Exception {
URI uri = URI.createURI(Tests.PLUGIN_URI + "/_example_umlFacetSet.uiCustom");
FileUtils.checkEMFResource(uri, 1);
}
@Test
public void umlFacets2UiCustom() throws Exception {
URI uri = URI.createURI(Tests.PLUGIN_URI + "/_example_umlFacetSet2.uiCustom");
FileUtils.checkEMFResource(uri, 1);
}
public static final String QUERY_SET_NAME = "_example_uml";
public void isMetaClass() throws ModelQueryException {
URI umlModelUri = URI.createURI(Tests.PLUGIN_URI + "/umlModels/umlExample1.uml");
Resource umlModel = this.resourceSet.getResource(umlModelUri, true);
ModelQuerySetCatalog.getSingleton().waitUntilBuilt();
ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton();
ModelQuerySet querySet = catalog.getModelQuerySet(Tests.QUERY_SET_NAME);
ModelQuery modelQuery = querySet.getQuery("isMetaClass");
AbstractModelQuery queryImpl = catalog.getModelQueryImpl(modelQuery);
Model model = (Model) umlModel.getContents().get(0);
// True
Class cUtilityAndMetaClass = (Class) model.getMember("UtilityAndMetaClass");
Assert.assertTrue((Boolean) queryImpl.basicEvaluate(cUtilityAndMetaClass));
Class cQuery = (Class) model.getMember("Query");
Assert.assertTrue((Boolean) queryImpl.basicEvaluate(cQuery));
// False
Class cOclQuery = (Class) model.getMember("OCLQuery");
Assert.assertFalse((Boolean) queryImpl.basicEvaluate(cOclQuery));
Class cJavaQuery = (Class) model.getMember("JavaQuery");
Assert.assertFalse((Boolean) queryImpl.basicEvaluate(cJavaQuery));
}
public void allAttributes() throws ModelQueryException {
URI umlModelUri = URI.createURI(Tests.PLUGIN_URI + "/umlModels/umlExample1.uml");
Resource umlModel = this.resourceSet.getResource(umlModelUri, true);
ModelQuerySetCatalog.getSingleton().waitUntilBuilt();
ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton();
ModelQuerySet querySet = catalog.getModelQuerySet(Tests.QUERY_SET_NAME);
ModelQuery modelQuery = querySet.getQuery("allAttributes");
AbstractModelQuery queryImpl = catalog.getModelQueryImpl(modelQuery);
Model model = (Model) umlModel.getContents().get(0);
Class cQuery = (Class) model.getMember("Query");
Assert.assertEquals(2, ((List<?>) queryImpl.basicEvaluate(cQuery)).size());
Class cOclQuery = (Class) model.getMember("OCLQuery");
Assert.assertEquals(2, ((List<?>) queryImpl.basicEvaluate(cOclQuery)).size());
Class cUtilityAndMetaClass = (Class) model.getMember("UtilityAndMetaClass");
Assert.assertEquals(1, ((List<?>) queryImpl.basicEvaluate(cUtilityAndMetaClass)).size());
Class cJavaQuery = (Class) model.getMember("JavaQuery");
Assert.assertEquals(2, ((List<?>) queryImpl.basicEvaluate(cJavaQuery)).size());
}
public void allParents() throws ModelQueryException {
URI umlModelUri = URI.createURI(Tests.PLUGIN_URI + "/umlModels/umlExample1.uml");
Resource umlModel = this.resourceSet.getResource(umlModelUri, true);
ModelQuerySetCatalog.getSingleton().waitUntilBuilt();
ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton();
ModelQuerySet querySet = catalog.getModelQuerySet(Tests.QUERY_SET_NAME);
ModelQuery modelQuery = querySet.getQuery("allParents");
AbstractModelQuery queryImpl = catalog.getModelQueryImpl(modelQuery);
Model model = (Model) umlModel.getContents().get(0);
Class cQuery = (Class) model.getMember("Query");
Assert.assertEquals(0, ((List<?>) queryImpl.basicEvaluate(cQuery)).size());
Class cOclQuery = (Class) model.getMember("OCLQuery");
Assert.assertEquals(1, ((List<?>) queryImpl.basicEvaluate(cOclQuery)).size());
Class cUtilityAndMetaClass = (Class) model.getMember("UtilityAndMetaClass");
Assert.assertEquals(0, ((List<?>) queryImpl.basicEvaluate(cUtilityAndMetaClass)).size());
Class cJavaQuery = (Class) model.getMember("JavaQuery");
Assert.assertEquals(1, ((List<?>) queryImpl.basicEvaluate(cJavaQuery)).size());
}
public void isAssociationEnd() throws ModelQueryException {
URI umlModelUri = URI.createURI(Tests.PLUGIN_URI + "/umlModels/umlExample1.uml");
Resource umlModel = this.resourceSet.getResource(umlModelUri, true);
ModelQuerySetCatalog.getSingleton().waitUntilBuilt();
ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton();
ModelQuerySet querySet = catalog.getModelQuerySet(Tests.QUERY_SET_NAME);
ModelQuery modelQuery = querySet.getQuery("isAssociationEnd");
AbstractModelQuery queryImpl = catalog.getModelQueryImpl(modelQuery);
Model model = (Model) umlModel.getContents().get(0);
Class cQuery = (Class) model.getMember("Query");
for (Property property : cQuery.getAttributes()) {
if (property.getName().equals("class_1")) {
Assert.assertTrue((Boolean) queryImpl.basicEvaluate(property));
} else if (property.getName().equals("Property_0")) {
Assert.assertFalse((Boolean) queryImpl.basicEvaluate(property));
} else {
Assert.fail("Unexpected attribute");
}
}
}
public void parents() throws Exception {
URI umlModelUri = URI.createURI(Tests.PLUGIN_URI + "/umlModels/umlExample1.uml");
Resource umlModel = this.resourceSet.getResource(umlModelUri, true);
ModelQuerySetCatalog.getSingleton().waitUntilBuilt();
ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton();
ModelQuerySet querySet = catalog.getModelQuerySet(Tests.QUERY_SET_NAME);
ModelQuery modelQuery = querySet.getQuery("parents");
AbstractModelQuery queryImpl = catalog.getModelQueryImpl(modelQuery);
Model model = (Model) umlModel.getContents().get(0);
Class cQuery = (Class) model.getMember("Query");
Assert.assertEquals(0, ((List<?>) queryImpl.basicEvaluate(cQuery)).size());
Class cOclQuery = (Class) model.getMember("OCLQuery");
Assert.assertEquals(1, ((List<?>) queryImpl.basicEvaluate(cOclQuery)).size());
Class cUtilityAndMetaClass = (Class) model.getMember("UtilityAndMetaClass");
Assert.assertEquals(0, ((List<?>) queryImpl.basicEvaluate(cUtilityAndMetaClass)).size());
Class cJavaQuery = (Class) model.getMember("JavaQuery");
Object result = queryImpl.basicEvaluate(cJavaQuery);
if (result instanceof List<?>) {
Assert.assertEquals(1, ((List<?>) result).size());
} else {
throw new Exception("A list is expected as result.");
}
}
public void isStringProperty() throws ModelQueryException {
URI umlModelUri = URI.createURI(Tests.PLUGIN_URI + "/umlModels/umlExample1.uml");
Resource umlModel = this.resourceSet.getResource(umlModelUri, true);
ModelQuerySetCatalog.getSingleton().waitUntilBuilt();
ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton();
ModelQuerySet querySet = catalog.getModelQuerySet(Tests.QUERY_SET_NAME);
ModelQuery modelQuery = querySet.getQuery("isStringProperty");
AbstractModelQuery queryImpl = catalog.getModelQueryImpl(modelQuery);
Model model = (Model) umlModel.getContents().get(0);
Class cQuery = (Class) model.getMember("Query");
for (Property property : cQuery.getAttributes()) {
if (property.getName().equals("class_1")) {
Assert.assertFalse((Boolean) queryImpl.basicEvaluate(property));
} else if (property.getName().equals("Property_0")) {
Assert.assertTrue((Boolean) queryImpl.basicEvaluate(property));
} else {
Assert.fail("Unexpected attribute");
}
}
}
public void subClassifiers2() throws Exception {
URI umlModelUri = URI.createURI(Tests.PLUGIN_URI + "/umlModels/umlExample1.uml");
Resource umlModel = this.resourceSet.getResource(umlModelUri, true);
ModelQuerySetCatalog.getSingleton().waitUntilBuilt();
ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton();
ModelQuerySet querySet = catalog.getModelQuerySet(Tests.QUERY_SET_NAME);
ModelQuery modelQuery = querySet.getQuery("subClassifiers");
AbstractModelQuery queryImpl = catalog.getModelQueryImpl(modelQuery);
Model model = (Model) umlModel.getContents().get(0);
Class cQuery = (Class) model.getMember("Query");
Assert.assertEquals(2, ((List<?>) queryImpl.basicEvaluate(cQuery)).size());
Class cOclQuery = (Class) model.getMember("OCLQuery");
Assert.assertEquals(0, ((List<?>) queryImpl.basicEvaluate(cOclQuery)).size());
Class cUtilityAndMetaClass = (Class) model.getMember("UtilityAndMetaClass");
Assert.assertEquals(0, ((List<?>) queryImpl.basicEvaluate(cUtilityAndMetaClass)).size());
Class cJavaQuery = (Class) model.getMember("JavaQuery");
Object result = queryImpl.basicEvaluate(cJavaQuery);
if (result instanceof List<?>) {
Assert.assertEquals(0, ((List<?>) result).size());
} else {
throw new Exception("A list is expected as result.");
}
}
public void isUtility() throws ModelQueryException {
URI umlModelUri = URI.createURI(Tests.PLUGIN_URI + "/umlModels/umlExample1.uml");
Resource umlModel = this.resourceSet.getResource(umlModelUri, true);
ModelQuerySetCatalog.getSingleton().waitUntilBuilt();
ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton();
ModelQuerySet querySet = catalog.getModelQuerySet(Tests.QUERY_SET_NAME);
ModelQuery modelQuery = querySet.getQuery("isUtility");
AbstractModelQuery queryImpl = catalog.getModelQueryImpl(modelQuery);
Model model = (Model) umlModel.getContents().get(0);
// True
Class cUtilityAndMetaClass = (Class) model.getMember("UtilityAndMetaClass");
Assert.assertTrue((Boolean) queryImpl.basicEvaluate(cUtilityAndMetaClass));
Class cQueryManager = (Class) model.getMember("QueryManager");
Assert.assertTrue((Boolean) queryImpl.basicEvaluate(cQueryManager));
// False
Class cJavaQuery = (Class) model.getMember("JavaQuery");
Assert.assertFalse((Boolean) queryImpl.basicEvaluate(cJavaQuery));
Class cModelBrowser = (Class) model.getMember("ModelBrowser");
Assert.assertFalse((Boolean) queryImpl.basicEvaluate(cModelBrowser));
Class cOclQuery = (Class) model.getMember("OCLQuery");
Assert.assertFalse((Boolean) queryImpl.basicEvaluate(cOclQuery));
}
public void isQuery() throws ModelQueryException {
URI umlModelUri = URI.createURI(Tests.PLUGIN_URI + "/umlModels/umlExample1.uml");
Resource umlModel = this.resourceSet.getResource(umlModelUri, true);
ModelQuerySetCatalog.getSingleton().waitUntilBuilt();
ModelQuerySetCatalog catalog = ModelQuerySetCatalog.getSingleton();
ModelQuerySet querySet = catalog.getModelQuerySet(Tests.QUERY_SET_NAME);
ModelQuery modelQuery = querySet.getQuery("isQuery");
AbstractModelQuery queryImpl = catalog.getModelQueryImpl(modelQuery);
Model model = (Model) umlModel.getContents().get(0);
Class cOclQuery = (Class) model.getMember("OCLQuery");
Assert.assertTrue((Boolean) queryImpl.basicEvaluate(cOclQuery));
Class cUtilityAndMetaClass = (Class) model.getMember("UtilityAndMetaClass");
Assert.assertFalse((Boolean) queryImpl.basicEvaluate(cUtilityAndMetaClass));
Class cJavaQuery = (Class) model.getMember("JavaQuery");
Assert.assertTrue((Boolean) queryImpl.basicEvaluate(cJavaQuery));
Class cModelBrowser = (Class) model.getMember("ModelBrowser");
Assert.assertFalse((Boolean) queryImpl.basicEvaluate(cModelBrowser));
}
@Test
public void bug308991() throws CoreException, IOException,
InterruptedException {
final List<IStatus> statusList = new ArrayList<IStatus>();
ILogListener listener = new ILogListener() {
public void logging(final IStatus status, final String plugin) {
statusList.add(status);
}
};
ILog log = Platform.getLog(Platform
.getBundle("org.eclipse.gmt.modisco.infra.common.core"));
log.addLogListener(listener);
ProjectUtils
.importPlugin(
Platform.getBundle("org.eclipse.gmt.modisco.infra.browser.custom.examples.uml"),
new IFilter() {
public boolean filter(final Object object) {
boolean result = true;
if (object instanceof File) {
File file = (File) object;
result = !file.getName().equals(
".checkstyle"); //$NON-NLS-1$
} else if (object instanceof String) {
String str = (String) object;
result = !str.equals(".checkstyle"); //$NON-NLS-1$
}
return result;
}
});
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(
"org.eclipse.gmt.modisco.infra.browser.custom.examples.uml");
ProjectUtils.refresh(project);
log.removeLogListener(listener);
if (!statusList.isEmpty()) {
MultiStatus status = new MultiStatus(Activator.getDefault()
.getBundle().getSymbolicName(), IStatus.ERROR, statusList
.toArray(new IStatus[] {}), "Test failed.", new Exception());
CoreException e = new CoreException(status);
MoDiscoLogger.logError(e, Activator.getDefault());
throw e;
}
}
}