blob: 6dec65919847b0c8f517d098182665fac70a284f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2017 Willink Transformations and others.
* 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:
* E.D.Willink - initial API and implementation
*******************************************************************************/
package org.eclipse.qvtd.xtext.qvtcore.tests;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.emf.common.EMFPlugin;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.examples.codegen.dynamic.JavaFileUtil;
import org.eclipse.ocl.pivot.internal.resource.ProjectMap;
import org.eclipse.ocl.pivot.model.OCLstdlib;
import org.eclipse.ocl.pivot.resource.ProjectManager;
import org.eclipse.ocl.xtext.base.services.BaseLinkingService;
import org.eclipse.qvtd.compiler.CompilerChain;
import org.eclipse.qvtd.compiler.QVTcCompilerChain;
import org.eclipse.qvtd.compiler.QVTrCompilerChain;
import org.eclipse.qvtd.compiler.internal.qvtm2qvts.QVTm2QVTs;
import org.eclipse.qvtd.compiler.internal.qvts2qvts.merger.EarlyMerger;
import org.eclipse.qvtd.compiler.internal.qvts2qvts.merger.LateConsumerMerger;
import org.eclipse.qvtd.compiler.internal.qvts2qvts.splitter.Splitter;
import org.eclipse.qvtd.pivot.qvtimperative.ImperativeTransformation;
import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory;
import org.eclipse.qvtd.pivot.qvtschedule.ScheduledRegion;
import org.eclipse.qvtd.pivot.qvtschedule.impl.BasicMappingRegionImpl;
import org.eclipse.qvtd.pivot.qvtschedule.impl.MicroMappingRegionImpl;
import org.eclipse.qvtd.pivot.qvtschedule.utilities.QVTscheduleConstants;
import org.eclipse.qvtd.runtime.evaluation.Transformer;
import org.eclipse.qvtd.xtext.qvtbase.tests.AbstractTestQVT;
import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase;
import org.eclipse.qvtd.xtext.qvtbase.tests.utilities.XtextCompilerUtil;
import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families.FamiliesPackage;
import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Families2Persons.Families2PersonsPackage;
import org.eclipse.qvtd.xtext.qvtcore.tests.families2persons.Persons.PersonsPackage;
import org.eclipse.qvtd.xtext.qvtcore.tests.hsv2hsl.HSLTree.HSLTreePackage;
import org.eclipse.qvtd.xtext.qvtcore.tests.hsv2hsl.HSV2HSL.HSV2HSLPackage;
import org.eclipse.qvtd.xtext.qvtcore.tests.hsv2hsl.HSVTree.HSVTreePackage;
import org.eclipse.qvtd.xtext.qvtcore.tests.list2list.doublylinkedlist.DoublylinkedlistPackage;
import org.eclipse.qvtd.xtext.qvtcore.tests.list2list.list2list.List2listPackage;
import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simplerdbms.SimplerdbmsPackage;
import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simpleuml.SimpleumlPackage;
import org.eclipse.qvtd.xtext.qvtcore.tests.uml2rdbms.simpleuml2rdbms.Simpleuml2rdbmsPackage;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
/**
* Tests that QVTc files can be compiled and executed.
*/
public class QVTcCompilerTests extends LoadTestCase
{
protected class MyQVT extends AbstractTestQVT
{
protected class InstrumentedCompilerChain extends QVTcCompilerChain
{
protected InstrumentedCompilerChain(@NonNull QVTiEnvironmentFactory environmentFactory, @NonNull URI txURI, @NonNull URI prefixURI,
@Nullable Map<@NonNull String, @Nullable Map<@NonNull Key<Object>, @Nullable Object>> options) {
super(environmentFactory, txURI, prefixURI, options);
}
@Override
protected @NonNull QVTm2QVTsCompilerStep createQVTm2QVTsCompilerStep() {
return new QVTm2QVTsCompilerStep(this)
{
@Override
public @NonNull ScheduledRegion execute(@NonNull Resource pResource) throws IOException {
ScheduledRegion rootRegion = super.execute(pResource);
instrumentRegion(rootRegion);
return rootRegion;
}
};
}
}
public MyQVT(@NonNull ProjectManager projectManager, @NonNull URI testBundleURI, @NonNull URI txURI, @NonNull URI prefixURI, @NonNull URI srcFileURI, @NonNull URI binFileURI) {
super(projectManager, testBundleURI, txURI, prefixURI, srcFileURI, binFileURI);
}
@Override
protected @NonNull QVTcCompilerChain createCompilerChain(@NonNull URI txURI, @NonNull URI prefixURI,
@NonNull Map<@NonNull String, @Nullable Map<CompilerChain.@NonNull Key<Object>, @Nullable Object>> options) {
return new InstrumentedCompilerChain(getEnvironmentFactory(), txURI, prefixURI, options);
}
@Override
protected @NonNull Map<@NonNull String, @Nullable Map<CompilerChain.@NonNull Key<Object>, @Nullable Object>> createCompilerChainOptions() {
// Map<@NonNull String, @Nullable String> genModelOptions = new HashMap<>();
// genModelOptions.put(CompilerChain.GENMODEL_BASE_PREFIX, getBasePrefix());
// genModelOptions.put(CompilerChain.GENMODEL_COPYRIGHT_TEXT, "Copyright (c) 2015, 2016 Willink Transformations and others.\n;All rights reserved. This program and the accompanying materials\n;are made available under the terms of the Eclipse Public License v1.0\n;which accompanies this distribution, and is available at\n;http://www.eclipse.org/legal/epl-v10.html\n;\n;Contributors:\n; E.D.Willink - Initial API and implementation");
Map<@NonNull String, @Nullable String> traceOptions = new HashMap<@NonNull String, @Nullable String>();
// traceOptions.put(CompilerChain.TRACE_NS_URI, middleNsURI);
Map<@NonNull String, @Nullable Map<CompilerChain.@NonNull Key<Object>, @Nullable Object>> options = super.createCompilerChainOptions();
QVTrCompilerChain.setOption(options, CompilerChain.DEFAULT_STEP, CompilerChain.SAVE_OPTIONS_KEY, getSaveOptions());
QVTrCompilerChain.setOption(options, CompilerChain.JAVA_STEP, CompilerChain.URI_KEY, null);
QVTrCompilerChain.setOption(options, CompilerChain.CLASS_STEP, CompilerChain.URI_KEY, null);
QVTrCompilerChain.setOption(options, CompilerChain.TRACE_STEP, CompilerChain.TRACE_OPTIONS_KEY, traceOptions);
// QVTrCompilerChain.setOption(options, CompilerChain.GENMODEL_STEP, CompilerChain.GENMODEL_USED_GENPACKAGES_KEY, usedGenPackages);
// QVTrCompilerChain.setOption(options, CompilerChain.GENMODEL_STEP, CompilerChain.GENMODEL_OPTIONS_KEY, genModelOptions);
return options;
}
@Override
protected @NonNull List<@NonNull String> createClassProjectNames() {
List<@NonNull String> classProjectNames = super.createClassProjectNames();
classProjectNames.add(0, "org.eclipse.qvtd.xtext.qvtcore.tests");
return classProjectNames;
}
@Override
protected @NonNull ProjectManager getTestProjectManager() throws Exception {
return EMFPlugin.IS_ECLIPSE_RUNNING ? new ProjectMap(true) : QVTcCompilerTests.this.getTestProjectManager();
}
}
protected @NonNull MyQVT createQVT(@NonNull String resultPrefix, @NonNull URI txURI) throws Exception {
ProjectManager testProjectManager = getTestProjectManager();
URI prefixURI = getTestURI(resultPrefix);
URI srcFileURI = getTestFileURI(JavaFileUtil.TEST_SRC_FOLDER_NAME + "/");
URI binFileURI = getTestFileURI(JavaFileUtil.TEST_BIN_FOLDER_NAME + "/");
return new MyQVT(testProjectManager, getTestBundleURI(), txURI, prefixURI, srcFileURI, binFileURI);
}
/* (non-Javadoc)
* @see org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase#setUp()
*/
@Override
@Before
public void setUp() throws Exception {
BaseLinkingService.DEBUG_RETRY.setState(true);
QVTm2QVTs.DEBUG_GRAPHS.setState(true);
super.setUp();
OCLstdlib.install();
XtextCompilerUtil.doQVTcoreSetup();
XtextCompilerUtil.doQVTimperativeSetup();
// QVTcorePivotStandaloneSetup.doSetup();
// QVTimperativePivotStandaloneSetup.doSetup();
}
/* (non-Javadoc)
* @see org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase#tearDown()
*/
@Override
@After
public void tearDown() throws Exception {
super.tearDown();
}
@Test
public void testQVTcCompiler_Families2Persons() throws Exception {
// AbstractTransformer.INVOCATIONS.setState(true);
MyQVT myQVT = createQVT("Families2Persons", getModelsURI("families2persons/Families2Persons.qvtc"));
myQVT.loadEcoreFile(getModelsURI("families2persons/Families.ecore"), FamiliesPackage.eINSTANCE);
myQVT.loadEcoreFile(getModelsURI("families2persons/Families2Persons.ecore"), Families2PersonsPackage.eINSTANCE);
myQVT.loadEcoreFile(getModelsURI("families2persons/Persons.ecore"), PersonsPackage.eINSTANCE);
// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true);
try {
ImperativeTransformation asTransformation = myQVT.compileTransformation("person");
myQVT.createInterpretedExecutor(asTransformation);
myQVT.loadInput("family", getModelsURI("families2persons/samples/Families.xmi"));
myQVT.createModel(QVTscheduleConstants.MIDDLE_DOMAIN_NAME, getTestURI("Families2Persons_trace.xmi"));
myQVT.createModel("person", getTestURI("Persons_Interpreted.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("person", getTestURI("Persons_Interpreted.xmi"), getModelsURI("families2persons/samples/Persons_expected.xmi"), Families2PersonsNormalizer.INSTANCE);
}
finally {
myQVT.dispose();
EPackage.Registry.INSTANCE.remove(FamiliesPackage.eNS_URI);
EPackage.Registry.INSTANCE.remove(Families2PersonsPackage.eNS_URI);
EPackage.Registry.INSTANCE.remove(PersonsPackage.eNS_URI);
}
}
@Test
public void testQVTcCompiler_Families2Persons_CG() throws Exception {
// OperationDependencyAnalysis.CALL.setState(true);
// OperationDependencyAnalysis.CREATE.setState(true);
// OperationDependencyAnalysis.FINISH.setState(true);
// OperationDependencyAnalysis.PENDING.setState(true);
// OperationDependencyAnalysis.REFINING.setState(true);
// OperationDependencyAnalysis.RETURN.setState(true);
// OperationDependencyAnalysis.START.setState(true);
// AbstractTransformer.INVOCATIONS.setState(true);
// Scheduler.EDGE_ORDER.setState(true);
// Scheduler.REGION_DEPTH.setState(true);
// Scheduler.REGION_ORDER.setState(true);
// Scheduler.REGION_TRAVERSAL.setState(true);
MyQVT myQVT = createQVT("Families2Persons", getModelsURI("families2persons/Families2Persons.qvtc"));
// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true);
try {
Class<? extends Transformer> txClass = myQVT.buildTransformation_486938("person", false, "Families2Persons.genmodel"); // FIXME BUG 486938
myQVT.assertRegionCount(BasicMappingRegionImpl.class, 2);
myQVT.assertRegionCount(EarlyMerger.EarlyMergedMappingRegion.class, 0);
myQVT.assertRegionCount(LateConsumerMerger.LateMergedMappingRegion.class, 0);
myQVT.assertRegionCount(MicroMappingRegionImpl.class, 0);
//
myQVT.createGeneratedExecutor(txClass);
myQVT.loadInput("family", getModelsURI("families2persons/samples/Families.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("person", getTestURI("Persons_CG.xmi"), getModelsURI("families2persons/samples/Persons_expected.xmi"), Families2PersonsNormalizer.INSTANCE);
//
myQVT.createGeneratedExecutor(txClass);
myQVT.loadInput("family", getModelsURI("families2persons/samples/FamiliesBig.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("person", getTestURI("PersonsBig_CG.xmi"), getModelsURI("families2persons/samples/PersonsBig_expected.xmi"), Families2PersonsNormalizer.INSTANCE);
}
finally {
myQVT.dispose();
}
}
@Test
public void testQVTcCompiler_Forward2Reverse() throws Exception {
// QVTs2QVTiVisitor.POLLED_PROPERTIES.setState(true);
MyQVT myQVT = createQVT("Forward2Reverse", getModelsURI("forward2reverse/Forward2Reverse.qvtc"));
myQVT.loadEcoreFile(getModelsURI("forward2reverse/DoublyLinkedList.ecore"), DoublylinkedlistPackage.eINSTANCE);
myQVT.loadEcoreFile(getModelsURI("forward2reverse/List2List.ecore"), List2listPackage.eINSTANCE);
// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true);
try {
ImperativeTransformation asTransformation = myQVT.compileTransformation("reverse");
//
myQVT.createInterpretedExecutor(asTransformation);
myQVT.loadInput("forward", getModelsURI("forward2reverse/samples/EmptyList.xmi"));
myQVT.createModel(QVTscheduleConstants.MIDDLE_DOMAIN_NAME, getTestURI("EmptyList_trace.xmi"));
myQVT.createModel("reverse", getTestURI("EmptyList_Interpreted.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("reverse", getTestURI("EmptyList_Interpreted.xmi"), getModelsURI("forward2reverse/samples/EmptyList_expected.xmi"), Forward2ReverseNormalizer.INSTANCE);
//
myQVT.createInterpretedExecutor(asTransformation);
myQVT.loadInput("forward", getModelsURI("forward2reverse/samples/OneElementList.xmi"));
myQVT.createModel(QVTscheduleConstants.MIDDLE_DOMAIN_NAME, getTestURI("OneElementList_trace.xmi"));
myQVT.createModel("reverse", getTestURI("OneElementList_Interpreted.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("reverse", getTestURI("OneElementList_Interpreted.xmi"), getModelsURI("forward2reverse/samples/OneElementList_expected.xmi"), Forward2ReverseNormalizer.INSTANCE);
//
myQVT.createInterpretedExecutor(asTransformation);
myQVT.loadInput("forward", getModelsURI("forward2reverse/samples/TwoElementList.xmi"));
myQVT.createModel(QVTscheduleConstants.MIDDLE_DOMAIN_NAME, getTestURI("TwoElementList_trace.xmi"));
myQVT.createModel("reverse", getTestURI("TwoElementList_Interpreted.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("reverse", getTestURI("TwoElementList_Interpreted.xmi"), getModelsURI("forward2reverse/samples/TwoElementList_expected.xmi"), Forward2ReverseNormalizer.INSTANCE);
//
myQVT.createInterpretedExecutor(asTransformation);
myQVT.loadInput("forward", getModelsURI("forward2reverse/samples/ThreeElementList.xmi"));
myQVT.createModel(QVTscheduleConstants.MIDDLE_DOMAIN_NAME, getTestURI("ThreeElementList_trace.xmi"));
myQVT.createModel("reverse", getTestURI("ThreeElementList_Interpreted.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("reverse", getTestURI("ThreeElementList_Interpreted.xmi"), getModelsURI("forward2reverse/samples/ThreeElementList_expected.xmi"), Forward2ReverseNormalizer.INSTANCE);
}
finally {
myQVT.dispose();
EPackage.Registry.INSTANCE.remove(DoublylinkedlistPackage.eNS_URI);
EPackage.Registry.INSTANCE.remove(List2listPackage.eNS_URI);
}
}
@Test
public void testQVTcCompiler_Forward2Reverse_CG() throws Exception {
// Scheduler.EDGE_ORDER.setState(true);
// Scheduler.REGION_DEPTH.setState(true);
// Scheduler.REGION_LOCALITY.setState(true);
// Scheduler.REGION_ORDER.setState(true);
// Scheduler.REGION_STACK.setState(true);
// Scheduler.REGION_TRAVERSAL.setState(true);
MyQVT myQVT = createQVT("Forward2Reverse", getModelsURI("forward2reverse/Forward2Reverse.qvtc"));
// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true);
try {
Class<? extends Transformer> txClassReverse = myQVT.buildTransformation("forward", false, "List2List.genmodel");
// Class<? extends Transformer> txClassReverse = Forward2Reverse.class;
myQVT.assertRegionCount(BasicMappingRegionImpl.class, 0);
myQVT.assertRegionCount(EarlyMerger.EarlyMergedMappingRegion.class, 0);
myQVT.assertRegionCount(LateConsumerMerger.LateMergedMappingRegion.class, 0);
myQVT.assertRegionCount(MicroMappingRegionImpl.class, 9);
//
myQVT.createGeneratedExecutor(txClassReverse);
myQVT.loadInput("reverse", getModelsURI("forward2reverse/samples/ThreeElementList.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("forward", getTestURI("ThreeElementList_Reverse_CG.xmi"), getModelsURI("forward2reverse/samples/ThreeElementList_expected.xmi"), Forward2ReverseNormalizer.INSTANCE);
//
Class<? extends Transformer> txClass = myQVT.buildTransformation("reverse", false, "List2List.genmodel");
//
myQVT.createGeneratedExecutor(txClass);
myQVT.loadInput("forward", getModelsURI("forward2reverse/samples/EmptyList.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("reverse", getTestURI("EmptyList_CG.xmi"), getModelsURI("forward2reverse/samples/EmptyList_expected.xmi"), Forward2ReverseNormalizer.INSTANCE);
//
myQVT.createGeneratedExecutor(txClass);
myQVT.loadInput("forward", getModelsURI("forward2reverse/samples/OneElementList.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("reverse", getTestURI("OneElementList_CG.xmi"), getModelsURI("forward2reverse/samples/OneElementList_expected.xmi"), Forward2ReverseNormalizer.INSTANCE);
//
myQVT.createGeneratedExecutor(txClass);
myQVT.loadInput("forward", getModelsURI("forward2reverse/samples/TwoElementList.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("reverse", getTestURI("TwoElementList_CG.xmi"), getModelsURI("forward2reverse/samples/TwoElementList_expected.xmi"), Forward2ReverseNormalizer.INSTANCE);
//
myQVT.createGeneratedExecutor(txClass);
myQVT.loadInput("forward", getModelsURI("forward2reverse/samples/ThreeElementList.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("reverse", getTestURI("ThreeElementList_CG.xmi"), getModelsURI("forward2reverse/samples/ThreeElementList_expected.xmi"), Forward2ReverseNormalizer.INSTANCE);
}
finally {
myQVT.dispose();
}
}
@Test
public void testQVTcCompiler_HSVToHSL() throws Exception {
// AbstractTransformer.EXCEPTIONS.setState(true);
// AbstractTransformer.INVOCATIONS.setState(true);
MyQVT myQVT = createQVT("HSV2HSL", getModelsURI("hsv2hsl/HSV2HSL.qvtc"));
myQVT.loadEcoreFile(getModelsURI("hsv2hsl/HSV2HSL.ecore"), HSV2HSLPackage.eINSTANCE);
myQVT.loadEcoreFile(getModelsURI("hsv2hsl/HSVTree.ecore"), HSVTreePackage.eINSTANCE);
myQVT.loadEcoreFile(getModelsURI("hsv2hsl/HSLTree.ecore"), HSLTreePackage.eINSTANCE);
// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true);
try {
ImperativeTransformation asTransformation = myQVT.compileTransformation("hsl");
myQVT.createInterpretedExecutor(asTransformation);
myQVT.loadInput("hsv", getModelsURI("hsv2hsl/samples/SolarizedHSV.xmi"));
myQVT.createModel(QVTscheduleConstants.MIDDLE_DOMAIN_NAME, getTestURI("HSV2HSL_trace.xmi"));
myQVT.createModel("hsl", getTestURI("SolarizedHSL_Interpreted.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("hsl", getTestURI("SolarizedHSL_Interpreted.xmi"), getModelsURI("hsv2hsl/samples/SolarizedHSL_expected.xmi"), HSV2HSLNormalizer.INSTANCE); // FIXME Bug 490497 remove normalizer
}
finally {
myQVT.dispose();
}
}
@Test
public void testQVTcCompiler_HSVToHSL_CG() throws Exception {
// AbstractTransformer.EXCEPTIONS.setState(true);
// AbstractTransformer.INVOCATIONS.setState(true);
// Scheduler.EDGE_ORDER.setState(true);
// Scheduler.REGION_DEPTH.setState(true);
// Scheduler.REGION_ORDER.setState(true);
// Scheduler.REGION_TRAVERSAL.setState(true);
// QVTs2QVTiVisitor.POLLED_PROPERTIES.setState(true);
// AbstractMerger.EARLY.setState(true);
// AbstractMerger.FAILURE.setState(true);
// AbstractMerger.LATE.setState(true);
MyQVT myQVT = createQVT("HSV2HSL", getModelsURI("hsv2hsl/HSV2HSL.qvtc"));
try {
// myQVT.createGeneratedExecutor(hsv2hsl.class);
Class<? extends Transformer> txClass = myQVT.buildTransformation("hsl", false, "HSV2HSL.genmodel");
myQVT.assertRegionCount(BasicMappingRegionImpl.class, 1);
myQVT.assertRegionCount(EarlyMerger.EarlyMergedMappingRegion.class, 0);
myQVT.assertRegionCount(LateConsumerMerger.LateMergedMappingRegion.class, 0);
myQVT.assertRegionCount(MicroMappingRegionImpl.class, 4);
//
myQVT.createGeneratedExecutor(txClass);
myQVT.loadInput("hsv", getModelsURI("hsv2hsl/samples/SolarizedHSV.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("hsl", getTestURI("SolarizedHSL_CG.xmi"), getModelsURI("hsv2hsl/samples/SolarizedHSL_expected.xmi"), HSV2HSLNormalizer.INSTANCE); // FIXME Bug 490497 remove normalizer
}
finally {
myQVT.dispose();
}
}
@Test // fails through at least lack of multi-headed support, which may not be needed if better partitioned
public void testQVTcCompiler_SimpleUML2RDBMS() throws Exception {
// AbstractTransformer.INVOCATIONS.setState(true);
MyQVT myQVT = createQVT("SimpleUML2RDBMS", getModelsURI("uml2rdbms/SimpleUML2RDBMS.qvtcas"));
myQVT.loadEcoreFile(getModelsURI("uml2rdbms/SimpleUML2RDBMS.ecore"), Simpleuml2rdbmsPackage.eINSTANCE);
myQVT.loadEcoreFile(getModelsURI("uml2rdbms/SimpleUML.ecore"), SimpleumlPackage.eINSTANCE);
myQVT.loadEcoreFile(getModelsURI("uml2rdbms/SimpleRDBMS.ecore"), SimplerdbmsPackage.eINSTANCE);
// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true);
try {
ImperativeTransformation asTransformation = myQVT.compileTransformation("rdbms");
myQVT.createInterpretedExecutor(asTransformation);
myQVT.loadInput("uml", getModelsURI("uml2rdbms/samples/SimplerUMLPeople.xmi"));
myQVT.createModel(QVTscheduleConstants.MIDDLE_DOMAIN_NAME, getTestURI("SimplerUML2RDBMS_trace.xmi"));
myQVT.createModel("rdbms", getTestURI("SimplerRDBMSPeople_Interpreted.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("rdbms", getTestURI("SimplerRDBMSPeople_Interpreted.xmi"), getModelsURI("uml2rdbms/samples/SimplerRDBMSPeople_expected.xmi"), SimpleRDBMSNormalizer.INSTANCE);
//
myQVT.createInterpretedExecutor(asTransformation);
myQVT.loadInput("uml", getModelsURI("uml2rdbms/samples/SimplerUMLPeople2.xmi"));
myQVT.createModel(QVTscheduleConstants.MIDDLE_DOMAIN_NAME, getTestURI("SimplerUML2RDBMS2_trace.xmi"));
myQVT.createModel("rdbms", getTestURI("SimplerRDBMSPeople2_Interpreted.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("rdbms", getTestURI("SimplerRDBMSPeople2_Interpreted.xmi"), getModelsURI("uml2rdbms/samples/SimplerRDBMSPeople2_expected.xmi"), SimpleRDBMSNormalizer.INSTANCE);
//
myQVT.createInterpretedExecutor(asTransformation);
myQVT.loadInput("uml", getModelsURI("uml2rdbms/samples/SimpleUMLPeople.xmi"));
myQVT.createModel(QVTscheduleConstants.MIDDLE_DOMAIN_NAME, getTestURI("SimpleUML2RDBMS_trace.xmi"));
myQVT.createModel("rdbms", getTestURI("SimpleRDBMSPeople_Interpreted.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("rdbms", getTestURI("SimpleRDBMSPeople_Interpreted.xmi"), getModelsURI("uml2rdbms/samples/SimpleRDBMSPeople_expected.xmi"), SimpleRDBMSNormalizer.INSTANCE);
}
finally {
myQVT.dispose();
}
}
@Test
public void testQVTcCompiler_SimpleUML2RDBMS_CG() throws Exception {
// OperationDependencyAnalysis.CALL.setState(true);
// OperationDependencyAnalysis.CREATE.setState(true);
// OperationDependencyAnalysis.FINISH.setState(true);
// OperationDependencyAnalysis.PENDING.setState(true);
// OperationDependencyAnalysis.REFINING.setState(true);
// OperationDependencyAnalysis.RETURN.setState(true);
// OperationDependencyAnalysis.START.setState(true);
// AbstractTransformer.EXCEPTIONS.setState(true);
// AbstractTransformer.INVOCATIONS.setState(true);
// Scheduler.CONNECTION_ROUTING.setState(true);
// Scheduler.DEBUG_GRAPHS.setState(true);
// Scheduler.REGION_CYCLES.setState(true);
// Scheduler.REGION_DEPTH.setState(true);
// Scheduler.REGION_ORDER.setState(true);
// Scheduler.REGION_TRAVERSAL.setState(true);
Splitter.RESULT.setState(true);
Splitter.STAGES.setState(true);
Splitter.RESULT.setState(true);
MyQVT myQVT = createQVT("SimpleUML2RDBMS", getModelsURI("uml2rdbms/SimpleUML2RDBMS.qvtcas"));
myQVT.setSuppressFailureDiagnosis(true); // FIXME BUG 511028
try {
Class<? extends Transformer> txClass = myQVT.buildTransformation("rdbms", false, "SimpleUML2RDBMS.genmodel");
myQVT.assertRegionCount(BasicMappingRegionImpl.class, 11);
myQVT.assertRegionCount(EarlyMerger.EarlyMergedMappingRegion.class, 0);
myQVT.assertRegionCount(LateConsumerMerger.LateMergedMappingRegion.class, 0);
myQVT.assertRegionCount(MicroMappingRegionImpl.class, 3);
//
myQVT.createGeneratedExecutor(txClass);
myQVT.loadInput("uml", getModelsURI("uml2rdbms/samples/SimplerUMLPeople.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("rdbms", getTestURI("SimplerRDBMSPeople_CG.xmi"), getModelsURI("uml2rdbms/samples/SimplerRDBMSPeople_expected.xmi"), SimpleRDBMSNormalizer.INSTANCE);
//
myQVT.createGeneratedExecutor(txClass);
myQVT.loadInput("uml", getModelsURI("uml2rdbms/samples/SimplerUMLPeople2.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("rdbms", getTestURI("SimplerRDBMSPeople2_CG.xmi"), getModelsURI("uml2rdbms/samples/SimplerRDBMSPeople2_expected.xmi"), SimpleRDBMSNormalizer.INSTANCE);
//
myQVT.createGeneratedExecutor(txClass);
myQVT.loadInput("uml", getModelsURI("uml2rdbms/samples/SimpleUMLPeople.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("rdbms", getTestURI("SimpleRDBMSPeople_CG.xmi"), getModelsURI("uml2rdbms/samples/SimpleRDBMSPeople_expected.xmi"), SimpleRDBMSNormalizer.INSTANCE);
}
finally {
myQVT.dispose();
}
}
@Test
public void testQVTcCompiler_SimpleUML2RDBMS_example_CG() throws Exception {
// OperationDependencyAnalysis.CALL.setState(true);
// OperationDependencyAnalysis.CREATE.setState(true);
// OperationDependencyAnalysis.FINISH.setState(true);
// OperationDependencyAnalysis.PENDING.setState(true);
// OperationDependencyAnalysis.REFINING.setState(true);
// OperationDependencyAnalysis.RETURN.setState(true);
// OperationDependencyAnalysis.START.setState(true);
// AbstractTransformer.EXCEPTIONS.setState(true);
// AbstractTransformer.INVOCATIONS.setState(true);
// Scheduler.CONNECTION_ROUTING.setState(true);
// Scheduler.DEBUG_GRAPHS.setState(true);
// Scheduler.REGION_CYCLES.setState(true);
// Scheduler.REGION_DEPTH.setState(true);
// Scheduler.REGION_ORDER.setState(true);
// Scheduler.REGION_TRAVERSAL.setState(true);
Splitter.RESULT.setState(true);
Splitter.STAGES.setState(true);
Splitter.RESULT.setState(true);
String exampleProjectName = "org.eclipse.qvtd.examples.qvtcore.uml2rdbms";
URI txURI = URI.createPlatformResourceURI("/" + exampleProjectName + "/model/SimpleUML2RDBMS.qvtc", true);
MyQVT myQVT = createQVT("SimpleUML2RDBMS", txURI);
myQVT.addClasspathProjectName(exampleProjectName);
myQVT.setSuppressFailureDiagnosis(true); // FIXME BUG 511028
try {
Class<? extends Transformer> txClass = myQVT.buildTransformation("rdbms", false, "SimpleUML2RDBMS.genmodel");
myQVT.assertRegionCount(BasicMappingRegionImpl.class, 11);
myQVT.assertRegionCount(EarlyMerger.EarlyMergedMappingRegion.class, 0);
myQVT.assertRegionCount(LateConsumerMerger.LateMergedMappingRegion.class, 0);
myQVT.assertRegionCount(MicroMappingRegionImpl.class, 3);
//
URI inURI = URI.createPlatformResourceURI("/" + exampleProjectName + "/model/in/SimpleUMLPeople.xmi", true);
URI outURI = getTestURI("SimpleRDBMSPeople_CG.xmi");
URI expectedURI = URI.createPlatformResourceURI("/" + exampleProjectName + "/model/out/SimpleRDBMSPeople_expected.xmi", true);
myQVT.createGeneratedExecutor(txClass);
myQVT.loadInput("uml", inURI);
myQVT.executeTransformation();
myQVT.saveOutput("rdbms", outURI, expectedURI, SimpleRDBMSNormalizer.INSTANCE);
}
finally {
myQVT.dispose();
}
}
@Test
public void testQVTcCompiler_Upper2Lower() throws Exception {
// QVTs2QVTiVisitor.POLLED_PROPERTIES.setState(true);
MyQVT myQVT = createQVT("Upper2Lower", getModelsURI("upper2lower/Upper2Lower.qvtcas"));
// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true);
try {
ImperativeTransformation asTransformation = myQVT.compileTransformation("lowerGraph");
myQVT.createInterpretedExecutor(asTransformation);
myQVT.loadInput("upperGraph", getModelsURI("upper2lower/samples/SimpleGraph.xmi"));
myQVT.createModel(QVTscheduleConstants.MIDDLE_DOMAIN_NAME, getTestURI("Upper2Lower_trace.xmi"));
myQVT.createModel("lowerGraph", getTestURI("SimpleGraphLower_Interpreted.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("lowerGraph", getTestURI("SimpleGraphLower_Interpreted.xmi"), getModelsURI("upper2lower/samples/SimpleGraphLower_expected.xmi"), Upper2LowerNormalizer.INSTANCE);
}
finally {
myQVT.dispose();
}
}
@Test
public void testQVTcCompiler_Upper2Lower_CG() throws Exception {
// Scheduler.EDGE_ORDER.setState(true);
// Scheduler.REGION_DEPTH.setState(true);
// Scheduler.REGION_LOCALITY.setState(true);
// Scheduler.REGION_ORDER.setState(true);
// Scheduler.REGION_STACK.setState(true);
// Scheduler.REGION_TRAVERSAL.setState(true);
// AbstractMerger.EARLY.setState(true);
// AbstractMerger.FAILURE.setState(true);
// AbstractMerger.LATE.setState(true);
MyQVT myQVT = createQVT("upper2lower", getModelsURI("upper2lower/Upper2Lower.qvtcas"));
// myQVT.getEnvironmentFactory().setEvaluationTracingEnabled(true);
try {
Class<? extends Transformer> txClass = myQVT.buildTransformation("lowerGraph", false, "SimpleGraph2Graph.genmodel");
//
myQVT.createGeneratedExecutor(txClass);
myQVT.loadInput("upperGraph", getModelsURI("upper2lower/samples/SimpleGraph.xmi"));
myQVT.executeTransformation();
myQVT.saveOutput("lowerGraph", getTestURI("SimpleGraphLower_CG.xmi"), getModelsURI("upper2lower/samples/SimpleGraphLower_expected.xmi"), Upper2LowerNormalizer.INSTANCE);
}
finally {
myQVT.dispose();
}
}
}