| /******************************************************************************* |
| * Copyright (c) 2012, 2019 Willink Transformations and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v2.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v20.html |
| * |
| * Contributors: |
| * E.D.Willink - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.qvtd.xtext.qvtrelation.tests; |
| |
| import java.util.List; |
| |
| import org.eclipse.emf.common.util.URI; |
| import org.eclipse.jdt.annotation.NonNull; |
| import org.eclipse.jdt.annotation.Nullable; |
| import org.eclipse.ocl.pivot.internal.library.ImplementationManager; |
| import org.eclipse.ocl.pivot.internal.resource.EnvironmentFactoryAdapter; |
| import org.eclipse.ocl.pivot.internal.utilities.OCLInternal; |
| import org.eclipse.ocl.pivot.utilities.OCL; |
| import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbase; |
| import org.eclipse.qvtd.pivot.qvtrelation.utilities.QVTrelation; |
| import org.eclipse.qvtd.pivot.qvtrelation.utilities.QVTrelationUtil; |
| import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase; |
| import org.eclipse.qvtd.xtext.qvtbase.tests.utilities.XtextCompilerUtil; |
| |
| /** |
| * Tests that load a model and verify that there are no unresolved proxies as a result. |
| */ |
| public class QVTrLoadTests extends LoadTestCase |
| { |
| @Override |
| protected @NonNull OCLInternal createOCL() { |
| return QVTrelation.newInstance(getTestProjectManager(), null); |
| } |
| |
| public void doLoad_ModelMorf(@NonNull String stem, @NonNull String @NonNull [] messages) throws Exception { |
| URI inputURI = URI.createPlatformResourceURI("/org.eclipse.qvtd.examples.qvtrelation.modelmorf/models/" + stem + ".qvtr", true); |
| URI pivotURI = getTestURI(stem + ".qvtras"); |
| doLoad_Concrete(inputURI, pivotURI, messages); |
| } |
| |
| protected void doLoad_Concrete(@NonNull URI inputURI, @NonNull URI pivotURI, @NonNull String @NonNull [] messages) throws Exception { |
| ClassLoader cl0 = getClass().getClassLoader(); |
| assert cl0 != null; |
| OCL ocl = QVTrelation.newInstance(getTestProjectManager()); |
| EnvironmentFactoryAdapter environmentFactoryAdapter = EnvironmentFactoryAdapter.find(ocl.getResourceSet()); |
| assert environmentFactoryAdapter != null; |
| ImplementationManager implementationManager = environmentFactoryAdapter.getMetamodelManager().getImplementationManager(); |
| @NonNull List<@NonNull ClassLoader> classLoaders = implementationManager.getClassLoaders(); |
| if (!classLoaders.contains(cl0)) { |
| implementationManager.addClassLoader(cl0); |
| } |
| doLoad_Concrete(ocl, inputURI, pivotURI, messages); |
| ocl.dispose(); |
| } |
| |
| @Override |
| public void doLoad_Concrete(@NonNull URI inputURI, @NonNull String @Nullable [] messages) throws Exception { |
| OCL ocl = QVTbase.newInstance(getTestProjectManager(), null); |
| // OCL ocl = OCL.newInstance(getProjectMap()); |
| URI pivotURI = getTestURIWithExtension(inputURI, QVTrelationUtil.QVTRAS_FILE_EXTENSION); |
| doLoad_Concrete(ocl, inputURI, pivotURI, messages); |
| ocl.dispose(); |
| } |
| |
| |
| @Override |
| protected void setUp() throws Exception { |
| // BaseLinkingService.DEBUG_RETRY.setState(true); |
| XtextCompilerUtil.doQVTrelationSetup(); |
| super.setUp(); |
| // getProjectMap(). |
| // ProjectMap.getAdapter(resourceSet); |
| } |
| |
| public void testQVTrLoad_AbstractToConcrete_qvtr() throws Exception { |
| doLoad_ModelMorf("AbstractToConcrete/AbstractToConcrete", new @NonNull String[] { |
| "The 'Key::IdentifiesIsNotAbstract' constraint is violated for 'key ClassMM::Type {ClassMM::Type::name}'" |
| }); |
| } |
| |
| public void testQVTrLoad_ClassModelToClassModel_qvtr() throws Exception { |
| doLoad_ModelMorf("ClassModelToClassModel/ClassModelToClassModel", new @NonNull String[] { |
| "The 'RelationCallExp::WhereInvocationIsANonTopRelation' constraint is violated for 'classToClass(c1, c2)'" |
| }); |
| } |
| |
| public void testQVTrLoad_DNF_bbox_qvtr() throws Exception { |
| doLoad_ModelMorf("DNF_bbox/DNF_bbox", NO_MESSAGES); |
| } |
| |
| public void testQVTrLoad_DNF_qvtr() throws Exception { |
| doLoad_ModelMorf("DNF/DNF", NO_MESSAGES); |
| } |
| |
| public void testQVTrLoad_HstmToStm_qvtr() throws Exception { |
| doLoad_ModelMorf("HstmToStm/hstmtostm", NO_MESSAGES); |
| } |
| |
| public void testQVTrLoad_Import_qvtr() throws Exception { |
| doLoad_ModelMorf("Import/UmlToRdbms_1", NO_MESSAGES); |
| } |
| |
| public void testQVTrLoad_Keys_qvtr() throws Exception { |
| doLoad_Concrete(getModelsURI("misc/Keys.qvtr"), new @NonNull String[] { // FIXME delete once Bug 512532 resolved |
| "The 'Key::IdentifiesIsUnique' constraint is violated for 'key QVTRelation::Key {QVTRelation::Key::identifies}'", |
| "The 'Key::IdentifiesIsUnique' constraint is violated for 'key QVTRelation::Key {QVTRelation::Key::identifies, QVTRelation::Key::part}'", |
| "The 'Key::NoSuperKeys' constraint is violated for 'key EMOF::Class {EMOF::NamedElement::name}'", |
| "The 'Key::IdentifiesIsNotAbstract' constraint is violated for 'key EMOF::NamedElement {EMOF::NamedElement::name}'" |
| }); |
| } |
| |
| public void testQVTrLoad_MiToSiSimple_qvtr() throws Exception { |
| // doLoad_ModelMorf("MiToSi/mitosi"); |
| doLoad_Concrete(getModelsURI("mitosi/MiToSiSimple.qvtr"), NO_MESSAGES); |
| } |
| |
| public void testQVTrLoad_Packages_qvtr() throws Exception { |
| doLoad_Concrete(getModelsURI("misc/Packages.qvtr"), NO_MESSAGES); |
| } |
| |
| public void testQVTrLoad_ATL2QVTr_qvtr() throws Exception { |
| // ProjectMap.getAdapter(resourceSet); |
| URI inputURI = URI.createPlatformResourceURI("/org.eclipse.qvtd.atl/model/ATL2QVTr.qvtr", true); |
| URI pivotURI = getTestURI("ATL2QVTr.qvtras"); |
| doLoad_Concrete(inputURI, pivotURI, new @NonNull String[] {}); |
| } |
| |
| public void testQVTrLoad_RelToCore_qvtr() throws Exception { |
| // ProjectMap.getAdapter(resourceSet); |
| URI inputURI = URI.createPlatformResourceURI("/org.eclipse.qvtd.examples.qvtrelation.reltocore/model/RelToCore.qvtr", true); |
| URI pivotURI = getTestURI("RelToCore.qvtras"); |
| doLoad_Concrete(inputURI, pivotURI, new @NonNull String[] { // FIXME delete once Bug 512532 resolved |
| "The 'Key::IdentifiesIsNotAbstract' constraint is violated for 'key EMOF::Type {EMOF::NamedElement::name}'", |
| "The 'Key::NoSuperKeys' constraint is violated for 'key EMOF::Class {EMOF::NamedElement::name}'", |
| "The 'Key::NoSuperKeys' constraint is violated for 'key QVTBase::Transformation {EMOF::NamedElement::name}'", |
| "The 'RelationCallExp::WhereInvocationIsANonTopRelation' constraint is violated for 'RelationalTransformationToMappingTransformation(rt, mt)'" |
| }); |
| } |
| |
| public void testQVTrLoad_SimplerRelToCore_qvtr() throws Exception { |
| // ProjectMap.getAdapter(resourceSet); |
| URI inputURI = URI.createPlatformResourceURI("/org.eclipse.qvtd.examples.qvtrelation.reltocore/model/SimplerRelToCore.qvtr", true); |
| URI pivotURI = getTestURI("SimplerRelToCore.qvtras"); |
| doLoad_Concrete(inputURI, pivotURI, new @NonNull String[] { // FIXME delete once Bug 512532 resolved |
| "The 'Key::IdentifiesIsNotAbstract' constraint is violated for 'key EMOF::Type {EMOF::NamedElement::name}'", |
| "The 'Key::NoSuperKeys' constraint is violated for 'key EMOF::Class {EMOF::NamedElement::name}'", |
| "The 'Key::NoSuperKeys' constraint is violated for 'key QVTBase::Transformation {EMOF::NamedElement::name}'", |
| "The 'RelationCallExp::WhereInvocationIsANonTopRelation' constraint is violated for 'RelationalTransformationToMappingTransformation(rt, mt)'", |
| "The 'Rule::AbstractRuleIsOverridden' constraint is violated for 'relation RExpToMExp'" |
| }); |
| } |
| |
| public void testQVTrLoad_SeqToStm_qvtr() throws Exception { |
| doLoad_ModelMorf("SeqToStm/SeqToStm", NO_MESSAGES); |
| } |
| |
| public void testQVTrLoad_SeqToStmc_CT_qvtr() throws Exception { |
| doLoad_ModelMorf("SeqToStmc_CT/SeqToStmc", NO_MESSAGES); |
| } |
| |
| public void testQVTrLoad_UmlToRdbms_qvtr() throws Exception { |
| doLoad_ModelMorf("UmlToRdbms/UmlToRdbms", NO_MESSAGES); |
| } |
| |
| public void testQVTrLoad_UmlToRel_qvtr() throws Exception { |
| doLoad_ModelMorf("UmlToRel/UmlToRel", NO_MESSAGES); |
| } |
| } |