blob: 047a048f033a1adf00aa86d3c720586467f0f21d [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2014, 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.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.pivot.Model;
import org.eclipse.ocl.pivot.resource.ASResource;
import org.eclipse.ocl.xtext.base.services.BaseLinkingService;
import org.eclipse.qvtd.pivot.qvtcore.utilities.QVTcore;
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.qvtcorecs.QVTcoreCSPackage;
import org.eclipse.xtext.resource.XtextResource;
/**
* Tests that check that an Ecore model can be serialized to OCLinEcore.
*/
public class QVTcSerializeTests extends LoadTestCase
{
protected void doSerializeRoundTripFromAS(@NonNull String stem) throws Exception {
QVTcore ocl1 = QVTcore.newInstance(QVTcore.NO_PROJECTS);
QVTcore ocl2 = QVTcore.newInstance(QVTcore.NO_PROJECTS);
URI inputURI = getProjectFileURI(stem + ".qvtcas");
Resource asResource1 = ocl1.getMetamodelManager().getASResourceSet().getResource(inputURI, true);
URI referenceURI = getProjectFileURI(stem + "ref.qvtcas");
doSerialize(inputURI, stem, referenceURI, null, true, true);
Resource asResource3 = doLoad_Concrete(ocl2, stem + ".serialized.qvtc", stem + ".serialized.qvtcas", NO_MESSAGES);
((Model)asResource3.getContents().get(0)).setExternalURI(((Model)asResource1.getContents().get(0)).getExternalURI());
assertSameModel(asResource1, asResource3);
ocl1.dispose();
ocl2.dispose();
}
protected void doSerializeRoundTripFromCS(@NonNull String stem) throws Exception {
QVTcore ocl1 = QVTcore.newInstance(QVTcore.NO_PROJECTS);
QVTcore ocl2 = QVTcore.newInstance(QVTcore.NO_PROJECTS);
Resource asResource1 = doLoad_Concrete(ocl1, stem + ".qvtc", stem + ".qvtcas", NO_MESSAGES);
URI inputURI = getProjectFileURI(stem + ".qvtcas");
URI referenceURI = getProjectFileURI(stem + "ref.qvtcas");
doSerialize(inputURI, stem, referenceURI, null, true, true);
Resource asResource3 = doLoad_Concrete(ocl2, stem + ".serialized.qvtc", stem + ".serialized.qvtcas", 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();
}
public XtextResource doSerialize(@NonNull URI inputURI, @NonNull String stem, @NonNull URI referenceURI, @Nullable Map<String, Object> options, boolean doCompare, boolean validateSaved) throws Exception {
ResourceSet resourceSet = new ResourceSetImpl();
// getProjectMap().initializeResourceSet(resourceSet);
String outputName = stem + ".serialized.qvtc";
URI outputURI = getProjectFileURI(outputName);
//
// Load QVTiAS
//
QVTcore ocl = QVTcore.newInstance(QVTcore.NO_PROJECTS);
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, outputURI, QVTcoreCSPackage.eCONTENT_TYPE);
resourceSet.getResources().clear();
return xtextResource;
}
finally {
ocl.dispose();
ocl = null;
}
}
@Override
public void setUp() throws Exception {
BaseLinkingService.DEBUG_RETRY.setState(true);
QVTcTestUtil.doQVTcoreSetup();
super.setUp();
}
public void testSerialize_Class2RDBMS() throws Exception {
doSerializeRoundTripFromCS("Class2RDBMS/Class2RDBMS");
}
public void testSerialize_HSV2HSL() throws Exception {
doSerializeRoundTripFromCS("hsv2hsl/HSV2HSL");
}
public void testSerialize_platformResource_BaseCS2AS() throws Exception {
doSerializeRoundTripFromCS("platformResource/org.eclipse.ocl.xtext.base/model/BaseCS2AS.qvtm");
}
// public void testSerialize_platformResource_Mini() throws Exception {
// doSerializeRoundTripFromCS("platformResource/org.eclipse.ocl.xtext.base/model/MiniBaseCS2AS.qvtm");
// }
/* FIXME get better source
public void testSerialize_Seq2Stm() throws Exception {
doSerializeRoundTripFromAS("Seq2Stm/SeqToStm");
} */
}