package com.sap.ide.cts.qvt.test;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import textblocks.Bostoken;
import textblocks.Eostoken;
import textblocks.LexedToken;
import textblocks.TextBlock;
import uk.ac.kent.cs.kmf.util.ILog;
import junit.framework.Assert;
import data.classes.SapClass;
import de.ikv.medini.ocl.test.util.Utilities;
import de.ikv.medini.qvt.QVTProcessorConsts;
import de.ikv.medini.qvt.QvtProcessorImpl;
import de.ikv.medini.qvt.test.QVTTestCase;
public class TestCreateTextBlocksByQVT extends QVTTestCase {
private Object sapClass;
public void testSimpleCreateTbInverse() throws FileNotFoundException {
TextBlock testBlock = (TextBlock) this.adapter.createModelElement("TCS::textblocks::TextBlock");
LexedToken testToken = (LexedToken) this.adapter.createModelElement("TCS::textblocks::LexedToken");
testToken.setValue("TestClass2");
this.adapter.setValueForFeature(testBlock, "tokens", testToken);
this.checkTraces("testCreateTb.qvt", "testCreateTb", "source", "target", 1);
ILog log = ((QvtProcessorImpl)this.adapter.getQvtProcessor()).getLog();
log.finalReport();
assertEquals(0, log.getErrors());
Collection sapClasses = this.findElementsByType(true, "ngpm::data::classes::SapClass");
assertEquals(2, sapClasses.size());
boolean found = false;
for (Object object : sapClasses) {
if("TestClass2".equals(((SapClass) object).getName())) {
found = true;
}
}
assertEquals(true, found);
}
public void testSimpleCreateTb() throws FileNotFoundException {
this.checkTraces("testCreateTb.qvt", "testCreateTb", "target", "source", 1);
assertEquals(1, this.findElementsByType(true, "TCS::textblocks::TextBlock").size());
assertEquals(1, this.findElementsByType(true, "TCS::textblocks::LexedToken").size());
}
public void testCompleteCreateTb() throws FileNotFoundException {
this.checkTraces("testCreateCompleteTb.qvt", "testCreateTb", "target", "source", 1);
Collection<TextBlock> tbs = this.findElementsByType(true, "TCS::textblocks::TextBlock");
assertEquals(1, tbs.size());
assertEquals(1, this.findElementsByType(true, "TCS::textblocks::LexedToken").size());
assertEquals(1, this.findElementsByType(true, "TCS::textblocks::EOSToken").size());
assertEquals(1, this.findElementsByType(true, "TCS::textblocks::BOSToken").size());
TextBlock tb = (TextBlock) tbs.iterator().next();
assertEquals(3, tb.getTokens().size());
assertTrue(Bostoken.class.isAssignableFrom(tb.getTokens().get(0).getClass()));
assertTrue(Eostoken.class.isAssignableFrom(tb.getTokens().get(2).getClass()));
assertEquals(this.sapClass, tb.getCorrespondingModelElements().get(0));
}
@Override
protected void setUp() throws Exception {
metamodelIDs = new String[]{"ngpm","TCS","Reflect"};
super.setUp();
((QvtProcessorImpl)this.adapter.getQvtProcessor()).setProperty(QVTProcessorConsts.PROP_DEBUG, "true");
// topPackage
this.sapClass = this.createModelElement("ngpm::data::classes::SapClass");
this.adapter.setValueForFeature(this.sapClass, "name", "TestClass");
}
/**
* Get IDs of all model elements
*
* @param onTarget
* if true, IDs of the target model are collected
* @return
*/
protected Collection getSourceIDs(boolean onTarget) {
List result = !onTarget ? this.adapter.evaluateOnSource("ngpm::data::classes::SapClass.allInstances()") : this.adapter.evaluateOnTarget("textblocks::TextBlock.allInstances()");
Assert.assertEquals(1, result.size());
Assert.assertEquals(true, result.get(0) instanceof Collection);
Collection ids1 = new HashSet(Utilities.getIdentities((Collection) result.get(0), this.adapter));
return new ArrayList(ids1);
}
}