blob: ba7f13dbfb7de77ce8e36da423773564617b41f6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 2021 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.qvtimperative.tests;
import java.util.Map;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import org.eclipse.ocl.examples.xtext.tests.TestUtil;
import org.eclipse.ocl.pivot.Model;
import org.eclipse.ocl.pivot.internal.utilities.OCLInternal;
import org.eclipse.ocl.pivot.resource.ASResource;
import org.eclipse.ocl.pivot.resource.ProjectManager;
import org.eclipse.ocl.pivot.utilities.OCL;
import org.eclipse.qvtd.pivot.qvtbase.utilities.QVTbase;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperative;
import org.eclipse.qvtd.pivot.qvtimperative.utilities.QVTimperativeUtil;
import org.eclipse.qvtd.xtext.qvtbase.tests.AbstractTestQVT;
import org.eclipse.qvtd.xtext.qvtbase.tests.LoadTestCase;
import org.eclipse.qvtd.xtext.qvtbase.tests.utilities.TestsXMLUtil;
import org.eclipse.qvtd.xtext.qvtbase.tests.utilities.XtextCompilerUtil;
import org.eclipse.qvtd.xtext.qvtimperativecs.QVTimperativeCSPackage;
import org.eclipse.xtext.resource.XtextResource;
/**
* Tests that check that an Ecore model can be serialized to OCLinEcore.
*/
public class QVTiSerializeTests extends LoadTestCase
{
@Override
protected @NonNull OCLInternal createOCL() {
return QVTimperative.newInstance(getTestProjectManager(), null);
}
protected void doSerializeRoundTrip(@NonNull URI inputURI) throws Exception {
doSerializeRoundTrip(inputURI, getURIWithExtension(inputURI, "ref.qvtias"));
}
protected void doSerializeRoundTrip(@NonNull URI inputURI, @NonNull URI referenceURI) throws Exception {
URI pivotURI = getTestURIWithExtension(inputURI, QVTimperativeUtil.QVTIAS_FILE_EXTENSION);
URI serializedInputURI = getTestURIWithExtension(inputURI, "serialized.qvti");
URI serializedPivotURI = getTestURIWithExtension(inputURI, "serialized.qvtias");
ProjectManager projectManager = getTestProjectManager();
OCL ocl1 = QVTimperative.newInstance(projectManager, null);
Resource asResource1 = doLoad_Concrete(ocl1, inputURI, pivotURI, NO_MESSAGES);
ocl1.deactivate();
doSerialize(pivotURI, serializedInputURI, referenceURI, null, true, true);
OCL ocl2 = QVTimperative.newInstance(projectManager, null);
Resource asResource3 = doLoad_Concrete(ocl2, serializedInputURI, serializedPivotURI, NO_MESSAGES);
((Model)asResource3.getContents().get(0)).setExternalURI(((Model)asResource1.getContents().get(0)).getExternalURI());
TestsXMLUtil.resetTransients(asResource1);
TestsXMLUtil.resetTransients(asResource3);
assertSameModel(asResource1, asResource3);
ocl1.dispose();
ocl2.dispose();
}
protected void doSerializeRoundTripFromAS(@NonNull URI inputURI) throws Exception {
doSerializeRoundTripFromAS(inputURI, getURIWithExtension(inputURI, "ref.qvtias"));
}
protected void doSerializeRoundTripFromAS(@NonNull URI pivotURI, @NonNull URI referenceURI) throws Exception {
URI serializedInputURI = getTestURIWithExtension(pivotURI, "serialized.qvti");
URI serializedPivotURI = getTestURIWithExtension(pivotURI, "serialized.qvtias");
ProjectManager projectManager = getTestProjectManager();
OCL ocl1 = OCL.newInstance(projectManager);
OCL ocl2 = OCL.newInstance(projectManager);
Resource asResource1 = ocl1.getMetamodelManager().getASResourceSet().getResource(pivotURI, true);
doSerialize(pivotURI, serializedInputURI, referenceURI, null, true, true);
Resource asResource3 = doLoad_Concrete(ocl2, serializedInputURI, serializedPivotURI, NO_MESSAGES);
((Model)asResource3.getContents().get(0)).setExternalURI(((Model)asResource1.getContents().get(0)).getExternalURI());
assertSameModel(asResource1, asResource3);
ocl1.dispose();
ocl2.dispose();
}
public XtextResource doSerialize(@NonNull URI inputURI, @NonNull URI serializedInputURI, @NonNull URI referenceURI, @Nullable Map<String, Object> options, boolean doCompare, boolean validateSaved) throws Exception {
ResourceSet resourceSet = new ResourceSetImpl();
// getProjectMap().initializeResourceSet(resourceSet);
//
// Load QVTiAS
//
OCL ocl = QVTbase.newInstance(getTestProjectManager());
try {
ASResource asResource = AbstractTestQVT.loadQVTiAS(ocl, inputURI);
assertNoResourceErrors("Normalisation failed", asResource);
assertNoValidationErrors("Normalisation invalid", asResource);
//
// Pivot to CS
//
XtextResource xtextResource = AbstractTestQVT.as2cs(ocl, resourceSet, asResource, serializedInputURI, QVTimperativeCSPackage.eCONTENT_TYPE);
resourceSet.getResources().clear();
return xtextResource;
}
finally {
ocl.dispose();
ocl = null;
}
}
@Override
public void setUp() throws Exception {
// BaseLinkingService.DEBUG_RETRY.setState(true);
TestUtil.doCompleteOCLSetup();
XtextCompilerUtil.doQVTimperativeSetup();
super.setUp();
}
public void testQVTiSerialize_Constructors() throws Exception {
URI inputURI = getModelsURI("Constructors/Constructors.qvti");
doSerializeRoundTrip(inputURI);
}
public void testQVTiSerialize_Dependencies() throws Exception {
URI inputURI = getModelsURI("Dependencies/Dependencies.qvti");
doSerializeRoundTrip(inputURI);
}
public void testQVTiSerialize_Expressions() throws Exception {
URI inputURI = getModelsURI("Expressions/Expressions.qvti");
doSerializeRoundTrip(inputURI);
}
public void testQVTiSerialize_Graph2GraphHierarchical() throws Exception {
URI inputURI = getModelsURI("Graph2GraphHierarchical/Graph2GraphHierarchical.qvti");
doSerializeRoundTrip(inputURI);
}
public void testQVTiSerialize_Graph2GraphMinimal() throws Exception {
URI inputURI = getModelsURI("Graph2GraphMinimal/Graph2GraphMinimal.qvti");
doSerializeRoundTrip(inputURI);
}
public void testQVTiSerialize_HSV2HSL_qvti() throws Exception {
URI inputURI = getModelsURI("HSV2HSL/HSV2HSL.qvti");
doSerializeRoundTrip(inputURI);
}
public void testQVTiSerialize_HSV2HSLas_qvtias() throws Exception {
URI inputURI = getModelsURI("HSV2HSL/HSV2HSLas.qvtias");
URI referenceURI = getURIWithExtension(inputURI, "ref.qvtias");
URI serializedInputURI = getTestURIWithExtension(inputURI, "serialized.qvti");
doSerialize(inputURI, serializedInputURI, referenceURI, null, true, true);
}
public void testQVTiSerialize_KiamaRewrite_qvti() throws Exception {
URI inputURI = getModelsURI("KiamaRewrite/KiamaRewrite.qvti");
doSerializeRoundTrip(inputURI);
}
public void testQVTiSerialize_ManualUML2RDBMS_qvti() throws Exception {
URI inputURI = getModelsURI("ManualUML2RDBMS/ManualUML2RDBMS.qvti");
doSerializeRoundTrip(inputURI);
}
public void testQVTiSerialize_SimpleUML2RDBMS_qvti() throws Exception {
URI inputURI = getModelsURI("SimpleUML2RDBMS/SimpleUML2RDBMS.qvti");
doSerializeRoundTrip(inputURI);
}
public void testQVTiSerialize_Tree2TallTree_qvti() throws Exception {
URI inputURI = getModelsURI("Tree2TallTree/Tree2TallTree.qvti");
doSerializeRoundTrip(inputURI);
}
public void zztestSerialize_platformResource_BaseCS2AS() throws Exception {
URI inputURI = getModelsURI("platformResource/org.eclipse.ocl.xtext.base/model/BaseCS2AS.qvtias");
doSerializeRoundTripFromAS(inputURI);
}
public void zztestSerialize_platformResource_EssentialOCLCS2AS() throws Exception {
URI inputURI = getModelsURI("platformResource/org.eclipse.ocl.xtext.essentialocl/model/EssentialOCLCS2AS.qvtias");
doSerializeRoundTripFromAS(inputURI);
}
}