package com.sap.furcas.ocl.inversion.test;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Properties;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.impl.EPackageImpl;
import org.eclipse.ocl.ecore.OperationCallExp;
import org.junit.Assert;
import uk.ac.kent.cs.kmf.util.ILog;
import com.sap.furcas.ocl.inversion.test.adapter.LogDelegator;
import com.sap.furcas.oclinversion.OclinversionPackage;
import com.sap.furcas.oclinversion.QMarkLiteralExp;
import com.sap.furcas.oclinversion.oclequation.OclEquation;
import de.ikv.medini.ocl.test.OCLEMFTestAdapter;
import de.ikv.medini.qvt.QVTProcessorConsts;
import de.ikv.medini.qvt.QvtProcessorImpl;
import de.ikv.medini.qvt.test.QVTEMFTestAdapter;
import de.ikv.medini.qvt.test.QVTTestAdapter;
import de.ikv.medini.qvt.test.QVTTestCase;
public class TestOclInversion extends QVTTestCase {
private Object oclEquation;
public void testConcat1() throws FileNotFoundException {
this.checkTraces("OclInversion.qvt", "OclInversion", "targetOcl", "sourceOcl", 1);
ILog log = ((QvtProcessorImpl)this.adapter.getQvtProcessor()).getLog();
log.finalReport();
assertEquals(0, log.getErrors());
Collection equations = this.findElementsByType(true, "oclinversion::oclequation::OclEquation");
assertEquals(1, equations.size());
OclEquation oclEq = (OclEquation) equations.iterator().next();
assertTrue(oclEq.getRight() instanceof QMarkLiteralExp);
assertTrue(oclEq.getLeft() instanceof OperationCallExp);
}
public void testConcat2() throws FileNotFoundException {
this.checkTraces("OclInversion.qvt", "OclInversion", "targetOcl", "sourceOcl", 1);
ILog log = ((QvtProcessorImpl)this.adapter.getQvtProcessor()).getLog();
log.finalReport();
assertEquals(0, log.getErrors());
Collection equations = this.findElementsByType(true, "oclinversion::oclequation::OclEquation");
assertEquals(1, equations.size());
OclEquation oclEq = (OclEquation) equations.iterator().next();
assertTrue(oclEq.getRight() instanceof QMarkLiteralExp);
assertTrue(oclEq.getLeft() instanceof OperationCallExp);
}
@Override
protected Properties getProperties() {
Properties p = super.getProperties();
p.put("source", "testfixture/" + this.getName().substring("test".length()) + ".xmi");
return p;
}
@Override
protected void setUp() throws Exception {
EPackage.Registry.INSTANCE.put( OclinversionPackage.eINSTANCE.getNsURI(), OclinversionPackage.eINSTANCE);
EPackage.Registry.INSTANCE.put( EcorePackage.eINSTANCE.getNsURI(), EcorePackage.eINSTANCE);
EPackage.Registry.INSTANCE.put( org.eclipse.ocl.ecore.EcorePackage.eINSTANCE.getNsURI(), org.eclipse.ocl.ecore.EcorePackage.eINSTANCE);
metamodelIDs = new String[]{"oclinversion","ecore","oclinversion"};
System.setProperty(QVTTestAdapter.QVTTESTADAPTER_TWOSOURCEMODELS, "true");
System.setProperty(QVTTestAdapter.PROP_DISABLE_TRACES, "true");
super.setUp();
ILog oldLog = ((OCLEMFTestAdapter) this.adapter).log;
((OCLEMFTestAdapter) this.adapter).log = new LogDelegator(oldLog);
((QvtProcessorImpl)this.adapter.getQvtProcessor()).setProperty(QVTProcessorConsts.PROP_DEBUG, "true");
((QVTEMFTestAdapter) this.adapter).registerMetaModel((EPackageImpl) OclinversionPackage.eINSTANCE);
((QVTEMFTestAdapter) this.adapter).registerMetaModel((EPackageImpl) EcorePackage.eINSTANCE);
((QVTEMFTestAdapter) this.adapter).registerMetaModel((EPackageImpl) org.eclipse.ocl.ecore.EcorePackage.eINSTANCE);
((QVTEMFTestAdapter) this.adapter).initRepository();
// ((QVTEMFTestAdapter) this.adapter).registerMetaModel((EPackageImpl) Ocl.eINSTANCE);
// topPackage
// this.oclEquation = this.createModelElement("oclinversion::oclequation::OclEquation");
// this.oclEquation = this.createModelElement("oclinversion::oclequation::OclEquation");
// this.adapter.setValueForFeature(this.oclEquation, "left", "TestClass");
}
/**
* Get IDs of all model elements
*
* @param onTarget
* if true, IDs of the target model are collected
* @return
*/
@Override
protected Collection getSourceIDs(boolean onTarget) {
List result = !onTarget ? this.adapter.evaluateOnSource("oclinversion::oclequation::OclEquation.allInstances()->select(eq | eq.isSource)") :
this.adapter.evaluateOnTarget("oclinversion::oclequation::OclEquation.allInstances()->reject(eq | eq.isSource)");
Assert.assertEquals(1, result.size());
Assert.assertEquals(true, result.get(0) instanceof Collection);
Collection ids1 = new HashSet();
for (Object object : (Collection) result.get(0)) {
ids1.add(object);
}
return new ArrayList(ids1);
}
}