diff options
author | Ed Willink | 2017-12-12 21:18:00 +0000 |
---|---|---|
committer | Ed Willink | 2018-01-18 12:00:05 +0000 |
commit | 0cf39e6ee25a196b600406f08b68b6a59376837c (patch) | |
tree | 2537bb1fc6f94b8e525ef90723a760d670f761e0 | |
parent | ff30822c8be355a4d32243288e9444712fd8df93 (diff) | |
download | org.eclipse.qvtd-0cf39e6ee25a196b600406f08b68b6a59376837c.tar.gz org.eclipse.qvtd-0cf39e6ee25a196b600406f08b68b6a59376837c.tar.xz org.eclipse.qvtd-0cf39e6ee25a196b600406f08b68b6a59376837c.zip |
[526558] Re-use AbstractTestQVT for ATL tests
9 files changed, 108 insertions, 342 deletions
diff --git a/tests/org.eclipse.qvtd.all.tests/.launches/All QVTd ATL Tests.launch b/tests/org.eclipse.qvtd.all.tests/.launches/All QVTd ATL Tests.launch index 61f2ce7a5..00e75af32 100644 --- a/tests/org.eclipse.qvtd.all.tests/.launches/All QVTd ATL Tests.launch +++ b/tests/org.eclipse.qvtd.all.tests/.launches/All QVTd ATL Tests.launch @@ -13,4 +13,5 @@ <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.qvtd.atl.tests.AllATLTests"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.qvtd.atl.tests"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/>
+<stringAttribute key="org.eclipse.jdt.launching.WORKING_DIRECTORY" value="${workspace_loc}"/>
</launchConfiguration>
diff --git a/tests/org.eclipse.qvtd.all.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.qvtd.all.tests/META-INF/MANIFEST.MF index bb40168fb..2a7fdf024 100644 --- a/tests/org.eclipse.qvtd.all.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.qvtd.all.tests/META-INF/MANIFEST.MF @@ -20,7 +20,8 @@ Require-Bundle: org.eclipse.core.runtime;bundle-version="[3.5.0,4.0.0)", org.eclipse.qvtd.doc.bigmde2016.tests, org.eclipse.qvtd.doc.exe2016.tests, org.eclipse.qvtd.doc.minioclcs.xtext.tests, - org.eclipse.qvtd.cs2as.compiler.tests + org.eclipse.qvtd.cs2as.compiler.tests, + org.eclipse.qvtd.atl.tests Bundle-ActivationPolicy: lazy Bundle-Vendor: %providerName Bundle-Localization: plugin diff --git a/tests/org.eclipse.qvtd.all.tests/src/org/eclipse/qvtd/all/tests/AllQVTdTests.java b/tests/org.eclipse.qvtd.all.tests/src/org/eclipse/qvtd/all/tests/AllQVTdTests.java index 48528324d..2f6c3fecb 100644 --- a/tests/org.eclipse.qvtd.all.tests/src/org/eclipse/qvtd/all/tests/AllQVTdTests.java +++ b/tests/org.eclipse.qvtd.all.tests/src/org/eclipse/qvtd/all/tests/AllQVTdTests.java @@ -11,7 +11,7 @@ package org.eclipse.qvtd.all.tests; import java.util.Arrays; - +import org.eclipse.qvtd.atl.tests.AllATLTests; import org.eclipse.qvtd.compiler.tests.AllCompilerTests; import org.eclipse.qvtd.cs2as.compiler.tests.OCL2QVTiTestCases; import org.eclipse.qvtd.doc.bigmde2016.tests.AllbigMDE2016Tests; @@ -47,7 +47,7 @@ public class AllQVTdTests extends TestCase result.addTestSuite(GrammarTests.class); result.addTestSuite(OCL2QVTiTestCases.class); result.addTest(AllUMLXTests.suite()); - // result.addTest(AllATLTests.suite()); // ATL uses a different ANTLR to Xtext - must be run separately + result.addTest(AllATLTests.suite()); result.addTest(AllbigMDE2016Tests.suite()); // NB this is very slow since we are -ea result.addTest(Allexe2016Tests.suite()); // NB this is very slow since we are -ea result.addTestSuite(MiniOCLCSParsingTest.class); diff --git a/tests/org.eclipse.qvtd.atl.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.qvtd.atl.tests/META-INF/MANIFEST.MF index e2210ac82..c7ae31e9b 100644 --- a/tests/org.eclipse.qvtd.atl.tests/META-INF/MANIFEST.MF +++ b/tests/org.eclipse.qvtd.atl.tests/META-INF/MANIFEST.MF @@ -17,5 +17,6 @@ Require-Bundle: org.junit, org.eclipse.m2m.atl.emftvm.compiler;bundle-version="[4.0.0,5.0.0)", org.eclipse.m2m.atl.dsls;bundle-version="[4.0.0,5.0.0)", org.eclipse.m2m.atl.emftvm;bundle-version="[4.0.0,5.0.0)", - org.eclipse.m2m.atl.engine;bundle-version="[4.0.0,5.0.0)" + org.eclipse.m2m.atl.engine;bundle-version="[4.0.0,5.0.0)", + org.eclipse.qvtd.xtext.qvtbase.tests Automatic-Module-Name: org.eclipse.qvtd.atl.tests diff --git a/tests/org.eclipse.qvtd.atl.tests/models/families2persons/Families2Persons_expected.qvtras b/tests/org.eclipse.qvtd.atl.tests/models/families2persons/Families2Persons_expected.qvtras index 58398dbb6..08a39681a 100644 --- a/tests/org.eclipse.qvtd.atl.tests/models/families2persons/Families2Persons_expected.qvtras +++ b/tests/org.eclipse.qvtd.atl.tests/models/families2persons/Families2Persons_expected.qvtras @@ -2,7 +2,7 @@ <qvtr:RelationModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pivot="http://www.eclipse.org/ocl/2015/Pivot" xmlns:qvtb="http://www.eclipse.org/qvt/2015/QVTbase" xmlns:qvtr="http://www.eclipse.org/qvt/2015/QVTrelation" xmlns:qvtt="http://www.eclipse.org/qvt/2015/QVTtemplate" xsi:schemaLocation="http://www.eclipse.org/ocl/2015/Pivot java://org.eclipse.ocl.pivot.PivotPackage http://www.eclipse.org/qvt/2015/QVTbase java://org.eclipse.qvtd.pivot.qvtbase.QVTbasePackage http://www.eclipse.org/qvt/2015/QVTrelation java://org.eclipse.qvtd.pivot.qvtrelation.QVTrelationPackage http://www.eclipse.org/qvt/2015/QVTtemplate java://org.eclipse.qvtd.pivot.qvttemplate.QVTtemplatePackage" - xmi:id="AAAAA" externalURI="platform:/resource/org.eclipse.qvtd.atl.tests/models/families2persons/Families2Persons_CG.qvtras" + xmi:id="AAAAA" externalURI="platform:/resource/QVTd_ATLExampleTests__testATL2QVTr_Families2Persons_CG/Families2Persons_CG.qvtras" name="Families2Persons_CG.qvtras" xmiidVersion="1"> <ownedPackages xmi:id="6Fh3I" name=""> <ownedClasses xsi:type="qvtr:RelationalTransformation" xmi:id="lSZ2I" name="Families2Persons"> diff --git a/tests/org.eclipse.qvtd.atl.tests/src/org/eclipse/qvtd/atl/tests/ATLExampleTests.java b/tests/org.eclipse.qvtd.atl.tests/src/org/eclipse/qvtd/atl/tests/ATLExampleTests.java index 441528e57..eed71f008 100644 --- a/tests/org.eclipse.qvtd.atl.tests/src/org/eclipse/qvtd/atl/tests/ATLExampleTests.java +++ b/tests/org.eclipse.qvtd.atl.tests/src/org/eclipse/qvtd/atl/tests/ATLExampleTests.java @@ -10,49 +10,126 @@ *******************************************************************************/ package org.eclipse.qvtd.atl.tests; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + import org.eclipse.emf.common.util.EList; 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.xmi.XMLResource; import org.eclipse.jdt.annotation.NonNull; +import org.eclipse.jdt.annotation.Nullable; +import org.eclipse.m2m.atl.core.emf.EMFModel; +import org.eclipse.m2m.atl.dsls.core.EMFTCSInjector; +import org.eclipse.m2m.atl.emftvm.EmftvmFactory; +import org.eclipse.m2m.atl.emftvm.compiler.AtlResourceFactoryImpl; +import org.eclipse.m2m.atl.engine.parser.AtlParser; +import org.eclipse.ocl.examples.codegen.dynamic.JavaFileUtil; +import org.eclipse.ocl.pivot.resource.ASResource; +import org.eclipse.ocl.pivot.resource.ProjectManager; +import org.eclipse.ocl.pivot.utilities.XMIUtil; +import org.eclipse.qvtd.compiler.AbstractCompilerChain; +import org.eclipse.qvtd.compiler.CompilerChain.Key; +import org.eclipse.qvtd.compiler.QVTrCompilerChain; import org.eclipse.qvtd.pivot.qvtimperative.model.QVTimperativeLibrary; -import org.eclipse.qvtd.pivot.qvtrelation.utilities.QVTrelationToStringVisitor; import org.eclipse.qvtd.runtime.evaluation.InvalidEvaluationException; 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.junit.Test; -import junit.framework.TestCase; - /** * Tests that ATL-based examples work. */ -public class ATLExampleTests extends TestCase +public class ATLExampleTests extends LoadTestCase { - protected void doATLExampleTest_CG(@NonNull URI testFolderURI, @NonNull String testName) throws Exception { - ATLTestQVT myQVT = new ATLTestQVT(testName.toLowerCase()); + protected static class MyQVT extends AbstractTestQVT + { + public final static @NonNull Map<Object, Object> defaultSavingOptions; + + // FIXME use a better default strategy for the saving options + static { + defaultSavingOptions = new HashMap<Object, Object>(); + defaultSavingOptions.put(XMLResource.OPTION_ENCODING, "UTF-8"); + defaultSavingOptions.put(XMLResource.OPTION_LINE_DELIMITER, "\n"); + defaultSavingOptions.put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE); + defaultSavingOptions.put(XMLResource.OPTION_SCHEMA_LOCATION_IMPLEMENTATION, Boolean.TRUE); + defaultSavingOptions.put(XMLResource.OPTION_LINE_WIDTH, Integer.valueOf(132)); + defaultSavingOptions.put(ASResource.OPTION_NORMALIZE_CONTENTS, Boolean.TRUE); + } + + public MyQVT(@NonNull ProjectManager projectManager, @NonNull String testProjectName, @NonNull URI testBundleURI, @NonNull URI txURI, @NonNull URI prefixURI, @NonNull URI srcFileURI, @NonNull URI binFileURI) { + super(projectManager, testProjectName, testBundleURI, txURI, prefixURI, srcFileURI, binFileURI); + environmentFactory.getResourceSet().getResourceFactoryRegistry().getExtensionToFactoryMap().put("atl", new AtlResourceFactoryImpl()); + // getMetamodelManager().getASResourceSet().getResourceFactoryRegistry().getExtensionToFactoryMap().put("atl", new AtlResourceFactoryImpl()); // FIXME wrong ResourceSet + // Ensure ATL parser support is on classpath + AtlParser.class.getName(); + EMFModel.class.getName(); + EMFTCSInjector.class.getName(); + EmftvmFactory.class.getName(); + } + + protected void checkOutput(@NonNull Resource outputResource, @NonNull URI referenceModelURI) throws IOException, InterruptedException { + Resource referenceResource = outputResource.getResourceSet().getResource(referenceModelURI, true); + assert referenceResource != null; + assertSameModel(referenceResource, outputResource); + } + + @Override + protected @NonNull AbstractCompilerChain createCompilerChain(@NonNull URI txURI, @NonNull URI prefixURI, + @NonNull Map<@NonNull String, @Nullable Map<@NonNull Key<Object>, @Nullable Object>> options) { + return new QVTrCompilerChain(getEnvironmentFactory(), txURI, prefixURI, options); + } + + @Override + protected @NonNull String getBasePrefix() { + return "org.eclipse.qvtd.atl.tests"; + } + + @Override + public @NonNull Map<Object, Object> getSaveOptions() { + Map<Object, Object> saveOptions = new HashMap<>(defaultSavingOptions); + saveOptions.put(ASResource.OPTION_NORMALIZE_CONTENTS, Boolean.TRUE); + return saveOptions; + } + } + + 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, getTestProject().getName(), getTestBundleURI(), txURI, prefixURI, srcFileURI, binFileURI); + } + + protected void doATLExampleTest_CG(@NonNull String resultPrefix, @NonNull URI atlURI) throws Exception { + MyQVT myQVT = createQVT(resultPrefix, atlURI); try { Class<?> txClass = Class.forName("org.eclipse.qvtd.atl.atl2qvtr.ATL2QVTr"); // FIXME Use direct reference once generation works redliably @SuppressWarnings({"unchecked", "null"}) @NonNull Class<? extends Transformer> txCastClass = (Class<? extends Transformer>)txClass; myQVT.createGeneratedExecutor(txCastClass); - URI atlURI = testFolderURI.appendSegment(testName + ".atl"); - URI atlXMIURI = myQVT.makeWriteable(atlURI.appendFileExtension("xmi")); + URI atlXMIURI = getTestURIWithExtension(atlURI, "xmi"); Resource atlResource = myQVT.loadInput("atl", atlURI); assert atlResource != null; EList<@NonNull EObject> contents = atlResource.getContents(); assert !contents.isEmpty() : "ATL's ANTLR cannot co-exist with Xext's ANTLR - run test separately"; Resource atlXmiResource = atlResource.getResourceSet().createResource(atlXMIURI); atlXmiResource.getContents().addAll(contents); - atlXmiResource.save(null); + atlXmiResource.save(XMIUtil.createSaveOptions()); contents.addAll(atlXmiResource.getContents()); - URI outputURI = testFolderURI.appendSegment(testName + "_CG.qvtras"); + String name = atlURI.trimFileExtension().lastSegment(); + URI outputURI = getTestURIWithExtension(atlURI.trimSegments(1).appendSegment(name + "_CG.qvtras"), "qvtras"); try { @SuppressWarnings("unused") Transformer executeTransformation = myQVT.executeTransformation(); - myQVT.saveOutput("qvtr", outputURI, testFolderURI.appendSegment(testName + "_expected.qvtras")); + myQVT.saveOutput("qvtr", outputURI, atlURI.trimSegments(1).appendSegment(name + "_expected.qvtras"), null); } catch (InvalidEvaluationException e) { - myQVT.saveOutput("qvtr", outputURI, null); + myQVT.saveOutput("qvtr", outputURI, null, null); throw e; } } @@ -61,14 +138,19 @@ public class ATLExampleTests extends TestCase } } + @Override + protected void setUp() throws Exception { + QVTimperativeLibrary.install(); + XtextCompilerUtil.doQVTrelationSetup(); + super.setUp(); + } + @Test public void testATL2QVTr_Families2Persons_CG() throws Exception { // AbstractTransformer.EXCEPTIONS.setState(true); // AbstractTransformer.INVOCATIONS.setState(true); - // PivotStandaloneSetup.init(); - QVTimperativeLibrary.install(); - QVTrelationToStringVisitor.FACTORY.getClass(); - doATLExampleTest_CG(URI.createPlatformResourceURI("org.eclipse.qvtd.atl.tests/models/families2persons", true), "Families2Persons"); + // QVTrelationToStringVisitor.FACTORY.getClass(); + doATLExampleTest_CG("Families2Persons", getModelsURI("families2persons/Families2Persons.atl")); } /* @Test diff --git a/tests/org.eclipse.qvtd.atl.tests/src/org/eclipse/qvtd/atl/tests/ATLTestQVT.java b/tests/org.eclipse.qvtd.atl.tests/src/org/eclipse/qvtd/atl/tests/ATLTestQVT.java deleted file mode 100644 index d3d9f8715..000000000 --- a/tests/org.eclipse.qvtd.atl.tests/src/org/eclipse/qvtd/atl/tests/ATLTestQVT.java +++ /dev/null @@ -1,319 +0,0 @@ -/******************************************************************************* - * 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.atl.tests; - -import java.io.File; -import java.io.IOException; -import java.nio.charset.Charset; -import java.util.Collection; -import java.util.HashMap; -import java.util.Map; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IWorkspaceRoot; -import org.eclipse.core.resources.ResourcesPlugin; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.emf.common.EMFPlugin; -import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.EObject; -import org.eclipse.emf.ecore.EPackage; -import org.eclipse.emf.ecore.EPackage.Registry; -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.emf.ecore.EStructuralFeature.Setting; -import org.eclipse.emf.ecore.InternalEObject; -import org.eclipse.emf.ecore.resource.Resource; -import org.eclipse.emf.ecore.resource.ResourceSet; -import org.eclipse.emf.ecore.util.EcoreUtil; -import org.eclipse.emf.ecore.xmi.XMLResource; -import org.eclipse.jdt.annotation.NonNull; -import org.eclipse.jdt.annotation.Nullable; -import org.eclipse.m2m.atl.core.emf.EMFModel; -import org.eclipse.m2m.atl.dsls.core.EMFTCSInjector; -import org.eclipse.m2m.atl.emftvm.EmftvmFactory; -import org.eclipse.m2m.atl.emftvm.compiler.AtlResourceFactoryImpl; -import org.eclipse.m2m.atl.emftvm.compiler.AtlResourceImpl; -import org.eclipse.m2m.atl.engine.parser.AtlParser; -import org.eclipse.ocl.pivot.internal.resource.ProjectMap; -import org.eclipse.ocl.pivot.internal.resource.StandaloneProjectMap; -import org.eclipse.ocl.pivot.resource.ASResource; -import org.eclipse.ocl.pivot.utilities.ClassUtil; -import org.eclipse.ocl.pivot.utilities.PivotUtil; -import org.eclipse.qvtd.pivot.qvtimperative.evaluation.BasicQVTiExecutor; -import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiEnvironmentFactory; -import org.eclipse.qvtd.pivot.qvtimperative.evaluation.QVTiTransformationExecutor; -import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperative; -import org.eclipse.qvtd.pivot.qvtrelation.utilities.QVTrelationASResourceFactory; -import org.eclipse.qvtd.runtime.evaluation.InvalidEvaluationException; -import org.eclipse.qvtd.runtime.evaluation.InvocationManager; -import org.eclipse.qvtd.runtime.evaluation.Transformer; -import org.eclipse.xtext.util.EmfFormatter; -import junit.framework.TestCase; - -public class ATLTestQVT extends QVTimperative -{ - public class AtlResourceFactoryImpl_514599 extends AtlResourceFactoryImpl // FIXME workaround BUG 514599 - { - @Override - public Resource createResource(URI uri) { - return new AtlResourceImpl_514599(uri); - } - } - - public static class AtlResourceImpl_514599 extends AtlResourceImpl // FIXME workaround BUG 514599 - { - public AtlResourceImpl_514599(URI uri) { - super(uri); - } - - @Override - protected Charset getCharset() throws IOException { - final URI uri = getURI(); - if (uri != null && uri.isPlatformResource() && EMFPlugin.IS_ECLIPSE_RUNNING) { - final IWorkspaceRoot wr = ResourcesPlugin.getWorkspace().getRoot(); - final IResource r = wr.findMember(uri.toPlatformString(true)); - if (r instanceof IFile) { - try { - return Charset.forName(((IFile)r).getCharset()); - } catch (CoreException e) { - throw new ATLIOException(e); - } - } - } - return Charset.defaultCharset(); - } - - /** - * Registers any dynamic EPackage URIs in <code>res</code>. - * - * @param res - * the resource containing the EPackages - * @throws IOException - * if the nsURIs from EPackages from r are already registered by other EPackages - */ - @Override - protected void registerEPackages(final Resource res) throws IOException { - final ResourceSet rs = getResourceSet(); - final Registry r = rs.getPackageRegistry(); - for (EObject o : res.getContents()) { - if (o instanceof EPackage) { - EPackage p = (EPackage)o; - Object existing = r.get(p.getNsURI()); - if (existing instanceof EPackage.Descriptor) { - existing = ((EPackage.Descriptor)existing).getEPackage(); - } - if (existing != null && existing != p) { - throw new IOException(String.format("EPackage with URI \"%s\" already registered by another EPackage instance", - p.getNsURI())); - } - r.put(p.getNsURI(), p); - } - } - } - } - - static final @NonNull String PROJECT_NAME = "org.eclipse.qvtd.atl.tests"; - // static final @NonNull URI TESTS_BASE_URI = URI.createPlatformResourceURI("/" + PROJECT_NAME + "/bin/" + PROJECT_NAME.replace(".", "/"), true); - - private static StandaloneProjectMap projectMap = null; - - public static @NonNull StandaloneProjectMap getProjectMap() { - StandaloneProjectMap projectMap2 = projectMap; - if (projectMap2 == null) { - projectMap = projectMap2 = EMFPlugin.IS_ECLIPSE_RUNNING ? new ProjectMap(false) : new StandaloneProjectMap(false); - } - return projectMap2; - } - - public final static @NonNull Map<Object, Object> defaultSavingOptions; - - // FIXME use a better default strategy for the saving options - static { - defaultSavingOptions = new HashMap<Object, Object>(); - defaultSavingOptions.put(XMLResource.OPTION_ENCODING, "UTF-8"); - defaultSavingOptions.put(XMLResource.OPTION_LINE_DELIMITER, "\n"); - defaultSavingOptions.put(XMLResource.OPTION_SCHEMA_LOCATION, Boolean.TRUE); - defaultSavingOptions.put(XMLResource.OPTION_SCHEMA_LOCATION_IMPLEMENTATION, Boolean.TRUE); - defaultSavingOptions.put(XMLResource.OPTION_LINE_WIDTH, Integer.valueOf(132)); - defaultSavingOptions.put(ASResource.OPTION_NORMALIZE_CONTENTS, Boolean.TRUE); - } - - public static void assertSameModel(@NonNull Resource expectedResource, @NonNull Resource actualResource) throws IOException, InterruptedException { - String expected = EmfFormatter.listToStr(expectedResource.getContents()); - String actual = EmfFormatter.listToStr(actualResource.getContents()); - TestCase.assertEquals(expected, actual); - } - - // protected final @NonNull URI testFolderURI; - private BasicQVTiExecutor interpretedExecutor = null; - private QVTiTransformationExecutor generatedExecutor = null; - - public ATLTestQVT(@NonNull String testFolderName) { - super(new QVTiEnvironmentFactory(getProjectMap(), null)); - // this.testFolderURI = TESTS_BASE_URI.appendSegment(testFolderName); - getMetamodelManager().getASResourceSet().getResourceFactoryRegistry().getExtensionToFactoryMap().put("atl", new AtlResourceFactoryImpl_514599()); // FIXME wrong ResourceSet - // Ensure ATL parser support is classpath - AtlParser.class.getName(); - EMFModel.class.getName(); - EMFTCSInjector.class.getName(); - EmftvmFactory.class.getName(); - } - - protected void checkOutput(@NonNull Resource outputResource, @NonNull URI referenceModelURI) throws IOException, InterruptedException { - Resource referenceResource = outputResource.getResourceSet().getResource(referenceModelURI, true); - assert referenceResource != null; - assertSameModel(referenceResource, outputResource); - } - - public QVTiTransformationExecutor createGeneratedExecutor(@NonNull Class<? extends Transformer> txClass) throws Exception { - return generatedExecutor = new QVTiTransformationExecutor(getEnvironmentFactory(), txClass); - } - - // public @Nullable Resource createModel(@NonNull String modelName, @NonNull String modelFile) { - // URI modelURI = testFolderURI.appendSegment(modelFile); - // return interpretedExecutor.createModel(modelName, modelURI, null); - // } - - @Override - public synchronized void dispose() { - super.dispose(); - if (interpretedExecutor != null) { - interpretedExecutor.dispose(); - } - } - - public Transformer executeTransformation() throws Exception { - if (interpretedExecutor != null) { - interpretedExecutor.execute(); - interpretedExecutor.saveModels(defaultSavingOptions); - return null; - } - else { - Transformer transformer = generatedExecutor.getTransformer(); - // transformer.run(); // FIXME BUG 511028 - if (!transformer.run()) { - InvocationManager invocationManager = transformer.getInvocationManager(); - invocationManager.flush(); - // if (!suppressFailureDiagnosis) { // FIXME BUG 511028 - StringBuilder s = new StringBuilder(); - invocationManager.diagnoseWorkLists(s); - throw new InvalidEvaluationException("Failed to execute" + s.toString()); - // } - } - return transformer; - } - } - - public @NonNull Collection<@NonNull ? extends Object> getRootObjects(@NonNull String modelName) { - if (interpretedExecutor != null) { - return interpretedExecutor.getRootObjects(modelName); - } - else { - return generatedExecutor.getTransformer().getRootObjects(modelName); - } - } - - public @NonNull Map<Object, Object> getSaveOptions() { - Map<Object, Object> saveOptions = new HashMap<>(defaultSavingOptions); - saveOptions.put(ASResource.OPTION_NORMALIZE_CONTENTS, Boolean.TRUE); - return saveOptions; - } - - public @Nullable Resource loadInput(@NonNull String modelName, @NonNull URI modelURI) { - if (interpretedExecutor != null) { - return interpretedExecutor.loadModel(modelName, modelURI); - } - else { - ResourceSet resourceSet = environmentFactory.getMetamodelManager().getASResourceSet(); // FIXME get package registrations in exteranl RespurcSet - PivotUtil.initializeLoadOptionsToSupportSelfReferences(resourceSet); - Resource inputResource = resourceSet.getResource(modelURI, true); - generatedExecutor.getTransformer().addRootObjects(modelName, ClassUtil.nonNullState(inputResource.getContents())); - return inputResource; - } - } - - public @NonNull URI makeWriteable(@NonNull URI uri) { - assert uri.isPlatformResource(); - if (EMFPlugin.IS_ECLIPSE_RUNNING) { - String projectName = uri.segment(1); - /* Bundle bundle = Platform.getBundle(projectName); - String location = bundle.getLocation(); - if (location.startsWith("initial@")) { - try { - bundle.start(); - } catch (BundleException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - location = bundle.getLocation(); - } - assert location.startsWith("reference:file:") : "Unexpected prefix for " + location + " for " + projectName; - assert location.endsWith("/") : "Unexpected suffix for " + location + " for " + projectName; - URI locationURI = URI.createFileURI(location.substring(15, location.length()-1)); - assert locationURI != null; - for (int i = 2; i < uri.segmentCount(); i++) { - locationURI = locationURI.appendSegment(uri.segment(i)); - } */ - File projectFile; - try { - projectFile = File.createTempFile("qvtdtest", uri.lastSegment()); - projectFile.deleteOnExit(); - uri = URI.createFileURI(projectFile.toString()); - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - else { - // FIXME delete any old file - } - return uri; - } - - // FIXME null referenceModelURI used as proxy rescue - public @NonNull Resource saveOutput(@NonNull String modelName, @NonNull URI modelURI, @Nullable URI referenceModelURI) throws IOException, InterruptedException { - ResourceSet resourceSet = /*getResourceSet()*/environmentFactory.getMetamodelManager().getASResourceSet(); - resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().put("qvtras", new QVTrelationASResourceFactory()); - Resource outputResource; - URI writeableModelURI = makeWriteable(modelURI); - if (interpretedExecutor != null) { - interpretedExecutor.setExternalURI(modelName, modelURI); - outputResource = interpretedExecutor.saveModel(modelName, writeableModelURI, null, getSaveOptions()); - } - else { - generatedExecutor.getTransformer().setExternalURI(modelName, modelURI); - outputResource = resourceSet.createResource(writeableModelURI); - outputResource.getContents().addAll(generatedExecutor.getTransformer().getRootEObjects(modelName)); - if (referenceModelURI == null) { - Map<EObject, Collection<Setting>> find = EcoreUtil.UnresolvedProxyCrossReferencer.find(outputResource); - for (EObject eObject : find.keySet()) { - assert eObject != null; - outputResource.getContents().add(eObject); - Collection<Setting> settings = find.get(eObject); - assert settings != null; - for (Setting s : settings) { - @SuppressWarnings("unused") EObject eObject2 = s.getEObject(); - @SuppressWarnings("unused") EStructuralFeature eStructuralFeature = s.getEStructuralFeature(); - } - ((InternalEObject)eObject).eSetProxyURI(null); - }; - } - // ((XMLResource)outputResource).getEObjectToIDMap().clear(); - // ((XMLResource)outputResource).getIDToEObjectMap().clear(); - outputResource.save(getSaveOptions()); - } - assert outputResource != null; - if (referenceModelURI != null) { - checkOutput(outputResource, referenceModelURI); - } - return outputResource; - } -}
\ No newline at end of file diff --git a/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/XtextTestCase.java b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/XtextTestCase.java index cd21f94f9..e6ce95831 100644 --- a/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/XtextTestCase.java +++ b/tests/org.eclipse.qvtd.xtext.qvtbase.tests/src/org/eclipse/qvtd/xtext/qvtbase/tests/XtextTestCase.java @@ -354,7 +354,7 @@ public class XtextTestCase extends PivotTestCase protected @NonNull TestProject getTestProject() { TestProject testProject2 = testProject; if (testProject2 == null) { - String testProjectName = getClass().getSimpleName() + "__" + getTestName(); + String testProjectName = "QVTd_" + getClass().getSimpleName() + "__" + getTestName(); testProject = testProject2 = getTestFileSystem().getTestProject(testProjectName, true); } return testProject2; diff --git a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/models/families2persons/Families2Persons_expected.qvtras b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/models/families2persons/Families2Persons_expected.qvtras index 608f4d355..f3554b3d5 100644 --- a/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/models/families2persons/Families2Persons_expected.qvtras +++ b/tests/org.eclipse.qvtd.xtext.qvtrelation.tests/models/families2persons/Families2Persons_expected.qvtras @@ -2,7 +2,7 @@ <qvtr:RelationModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:pivot="http://www.eclipse.org/ocl/2015/Pivot" xmlns:qvtb="http://www.eclipse.org/qvt/2015/QVTbase" xmlns:qvtr="http://www.eclipse.org/qvt/2015/QVTrelation" xmlns:qvtt="http://www.eclipse.org/qvt/2015/QVTtemplate" xsi:schemaLocation="http://www.eclipse.org/ocl/2015/Pivot java://org.eclipse.ocl.pivot.PivotPackage http://www.eclipse.org/qvt/2015/QVTbase java://org.eclipse.qvtd.pivot.qvtbase.QVTbasePackage http://www.eclipse.org/qvt/2015/QVTrelation java://org.eclipse.qvtd.pivot.qvtrelation.QVTrelationPackage http://www.eclipse.org/qvt/2015/QVTtemplate java://org.eclipse.qvtd.pivot.qvttemplate.QVTtemplatePackage" - xmi:id="AAAAA" externalURI="platform:/resource/QVTrCompilerTests__testQVTrCompiler_ATL2QVTr_CG/Families2Persons_CG.qvtras" + xmi:id="AAAAA" externalURI="platform:/resource/QVTd_QVTrCompilerTests__testQVTrCompiler_ATL2QVTr_CG/Families2Persons_CG.qvtras" name="Families2Persons_CG.qvtras" xmiidVersion="1"> <ownedPackages xmi:id="6Fh3I" name=""> <ownedClasses xsi:type="qvtr:RelationalTransformation" xmi:id="lSZ2I" name="Families2Persons"> |