blob: 82a9264b824e487abc18bd2ad81ab16e3e07e56d [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2008 E.D.Willink 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
*
* </copyright>
*
* $Id: QVTRelationConsistencyTest.java,v 1.7 2009/11/19 10:49:25 ewillink Exp $
*/
package org.eclipse.qvt.declarative.test.emof.qvtrelation;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.qvt.declarative.ecore.mappings.IMappingMetaDataRegistry;
import org.eclipse.qvt.declarative.ecore.mappings.MappingConfigurationException;
import org.eclipse.qvt.declarative.emof.QVTBase.QVTBasePackage;
import org.eclipse.qvt.declarative.emof.QVTRelation.QVTRelationPackage;
import org.eclipse.qvt.declarative.emof.QVTRelation.util.QVTRelationMappingMetaData;
import org.eclipse.qvt.declarative.emof.QVTTemplate.QVTTemplatePackage;
import org.eclipse.qvt.declarative.test.emof.emof.EMOFConsistencyTest;
import org.eclipse.qvt.declarative.test.emof.essentialocl.AbstractEssentialOCLConsistencyTest;
import org.eclipse.qvt.declarative.test.emof.essentialocl.EssentialOCLConsistencyTest;
import org.eclipse.qvt.declarative.test.emof.qvtbase.QVTBaseConsistencyTest;
import org.eclipse.qvt.declarative.test.emof.qvttemplate.QVTTemplateConsistencyTest;
import org.eclipse.qvt.declarative.test.emof.tools.EcoreDifference;
import org.eclipse.qvt.declarative.test.emof.tools.EquivalenceHelper;
import org.eclipse.qvt.declarative.test.emof.tools.EquivalenceMap;
public class QVTRelationConsistencyTest extends AbstractEssentialOCLConsistencyTest
{
public static void expectedEcoreDifferences(Set<EcoreDifference> differences, EquivalenceHelper helper, ResourceSet rightResourceSet) {
changeOfURI(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.eINSTANCE);
changeOfPrefix(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.eINSTANCE);
//
// Ecore limitation on EBoolean rather than EBooleanObject
//
changeOfUnsettable(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.RELATION__IS_TOP_LEVEL);
//
// Ecore added value
//
changeOfObject(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.KEY__OPPOSITE_PART, EcorePackage.Literals.ETYPED_ELEMENT__ETYPE);
changeOfSize(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.RELATION, EcorePackage.Literals.ECLASS__EOPERATIONS);
missingOperation(differences, helper, getOperation(org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.RELATIONAL_TRANSFORMATION, "getRelation"));
changeOfSize(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.RELATIONAL_TRANSFORMATION, EcorePackage.Literals.ECLASS__EOPERATIONS);
missingOperation(differences, helper, getOperation(org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.RELATION, "getRelationalTransformation"));
missingConstraint(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.DOMAIN_PATTERN);
missingConstraint(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.KEY);
missingConstraint(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.OPPOSITE_PROPERTY_CALL_EXP);
missingConstraint(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.RELATION);
missingConstraint(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.RELATION_CALL_EXP);
missingConstraint(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.RELATION_DOMAIN);
missingConstraint(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.RELATION_DOMAIN_ASSIGNMENT);
missingConstraint(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.RELATION_IMPLEMENTATION);
missingConstraint(differences, helper, org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.Literals.RELATIONAL_TRANSFORMATION);
}
public static void expectedEmofDifferences(Set<EcoreDifference> differences, EquivalenceHelper helper, ResourceSet rightResourceSet) {
changeOfURI(differences, helper, QVTRelationPackage.eINSTANCE);
changeOfPrefix(differences, helper, QVTRelationPackage.eINSTANCE);
changeOfName(differences, helper, QVTRelationPackage.eINSTANCE);
//
// Support for opposite navigation
//
changeOfSize(differences, helper, QVTRelationPackage.eINSTANCE, EcorePackage.Literals.EPACKAGE__ECLASSIFIERS);
}
public static void expectedEmof2OmgEmofDifferences(Set<EcoreDifference> differences, EquivalenceHelper helper, ResourceSet rightResourceSet) {
missingURI(differences, helper, QVTRelationPackage.eINSTANCE);
missingPrefix(differences, helper, QVTRelationPackage.eINSTANCE);
changeOfName(differences, helper, QVTRelationPackage.eINSTANCE);
//
// Support for opposite navigation
//
changeOfSize(differences, helper, QVTRelationPackage.eINSTANCE, EcorePackage.Literals.EPACKAGE__ECLASSIFIERS);
}
@Override
protected Set<EcoreDifference> getExpectedEcore2EmofDifferences(EquivalenceHelper helper, EPackage rightPackage) {
ResourceSet rightResourceSet = rightPackage.eResource().getResourceSet();
Set<EcoreDifference> differences = new HashSet<EcoreDifference>();
QVTRelationConsistencyTest.expectedEcoreDifferences(differences, helper, rightResourceSet);
helper.setLogStream(null);
EssentialOCLConsistencyTest.expectedEcoreDifferences(differences, helper, rightResourceSet);
EMOFConsistencyTest.expectedEcore2RoseDifferences(helper, differences, rightResourceSet);
return differences;
}
@Override
protected Set<EcoreDifference> getExpectedEmof2OmgEcoreDifferences(EquivalenceHelper helper, EPackage rightPackage) {
ResourceSet rightResourceSet = rightPackage.eResource().getResourceSet();
Set<EcoreDifference> differences = new HashSet<EcoreDifference>();
expectedEmofDifferences(differences, helper, rightResourceSet);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION_CALL_EXP__ARGUMENT);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION_CALL_EXP__REFERRED_RELATION);
changeOfContainment(differences, helper, QVTRelationPackage.Literals.RELATION__OPERATIONAL_IMPL);
changeOfTransient(differences, helper, QVTRelationPackage.Literals.RELATION_IMPLEMENTATION__RELATION);
changeOfOrdered(differences, helper, QVTRelationPackage.Literals.KEY__PART);
changeOfOrdered(differences, helper, QVTRelationPackage.Literals.RELATION__OPERATIONAL_IMPL);
changeOfOrdered(differences, helper, QVTRelationPackage.Literals.RELATION__VARIABLE);
changeOfOrdered(differences, helper, QVTRelationPackage.Literals.RELATION_DOMAIN__DEFAULT_ASSIGNMENT);
changeOfOrdered(differences, helper, QVTRelationPackage.Literals.RELATIONAL_TRANSFORMATION__OWNED_KEY);
missingOpposite(differences, helper, QVTRelationPackage.Literals.RELATION__WHEN);
missingOpposite(differences, helper, QVTRelationPackage.Literals.RELATION__WHERE);
missingOpposite(differences, helper, QVTRelationPackage.Literals.RELATION_DOMAIN__DEFAULT_ASSIGNMENT);
missingOpposite(differences, helper, QVTRelationPackage.Literals.RELATION_DOMAIN_ASSIGNMENT__VALUE_EXP);
missingOpposite(differences, helper, QVTRelationPackage.Literals.RELATION_DOMAIN_ASSIGNMENT__VARIABLE);
//
// Support for opposite navigation
//
changeOfSize(differences, helper, QVTRelationPackage.eINSTANCE, EcorePackage.Literals.EPACKAGE__ECLASSIFIERS);
missingObject(differences, helper, QVTRelationPackage.Literals.OPPOSITE_PROPERTY_CALL_EXP);
changeOfLower(differences, helper, QVTRelationPackage.Literals.KEY__PART);
changeOfSize(differences, helper, QVTRelationPackage.Literals.KEY, EcorePackage.Literals.ECLASS__ESTRUCTURAL_FEATURES);
missingObject(differences, helper, QVTRelationPackage.Literals.KEY__OPPOSITE_PART);
missingOppositeAnnotation(differences, helper, QVTRelationPackage.Literals.KEY__OPPOSITE_PART);
helper.setLogStream(null);
QVTTemplateConsistencyTest.expectedEmofDifferences(differences, helper, rightResourceSet);
QVTBaseConsistencyTest.expectedEmofDifferences(differences, helper, rightResourceSet);
EMOFConsistencyTest.expectedEmofDifferences(differences, helper, rightResourceSet);
EssentialOCLConsistencyTest.expectedEmofDifferences(differences, helper, rightResourceSet);
return differences;
}
@Override
protected Set<EcoreDifference> getExpectedEmof2OmgEmofDifferences(EquivalenceHelper helper, EPackage rightPackage) {
Set<EcoreDifference> differences = new HashSet<EcoreDifference>();
missingURI(differences, helper, QVTRelationPackage.eINSTANCE);
changeOfName(differences, helper, QVTRelationPackage.eINSTANCE);
changeOfContainment(differences, helper, QVTRelationPackage.Literals.RELATION__OPERATIONAL_IMPL);
changeOfTransient(differences, helper, QVTRelationPackage.Literals.KEY__TRANSFORMATION);
changeOfTransient(differences, helper, QVTRelationPackage.Literals.RELATION_IMPLEMENTATION__RELATION);
changeOfLower(differences, helper, QVTRelationPackage.Literals.DOMAIN_PATTERN__TEMPLATE_EXPRESSION);
changeOfLower(differences, helper, QVTRelationPackage.Literals.KEY__TRANSFORMATION);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION__IS_TOP_LEVEL);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION__OPERATIONAL_IMPL);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION__VARIABLE);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION__WHEN);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION__WHERE);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION_CALL_EXP__ARGUMENT);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION_DOMAIN__DEFAULT_ASSIGNMENT);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION_DOMAIN__PATTERN);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION_IMPLEMENTATION__RELATION);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATIONAL_TRANSFORMATION__OWNED_KEY);
missingOpposite(differences, helper, QVTRelationPackage.Literals.RELATION__WHEN);
missingOpposite(differences, helper, QVTRelationPackage.Literals.RELATION__WHERE);
missingOpposite(differences, helper, QVTRelationPackage.Literals.RELATION_DOMAIN__DEFAULT_ASSIGNMENT);
missingOpposite(differences, helper, QVTRelationPackage.Literals.RELATION_DOMAIN_ASSIGNMENT__VALUE_EXP);
missingOpposite(differences, helper, QVTRelationPackage.Literals.RELATION_DOMAIN_ASSIGNMENT__VARIABLE);
//
// Support for opposite navigation
//
changeOfSize(differences, helper, QVTRelationPackage.eINSTANCE, EcorePackage.Literals.EPACKAGE__ECLASSIFIERS);
missingObject(differences, helper, QVTRelationPackage.Literals.OPPOSITE_PROPERTY_CALL_EXP);
changeOfLower(differences, helper, QVTRelationPackage.Literals.KEY__PART);
changeOfSize(differences, helper, QVTRelationPackage.Literals.KEY, EcorePackage.Literals.ECLASS__ESTRUCTURAL_FEATURES);
missingObject(differences, helper, QVTRelationPackage.Literals.KEY__OPPOSITE_PART);
missingOppositeAnnotation(differences, helper, QVTRelationPackage.Literals.KEY__OPPOSITE_PART);
helper.setLogStream(null);
ResourceSet rightResourceSet = rightPackage.eResource().getResourceSet();
missingPrefix(differences, helper, QVTRelationPackage.eINSTANCE);
QVTTemplateConsistencyTest.expectedEmof2OmgEmofDifferences(differences, helper, rightResourceSet);
QVTBaseConsistencyTest.expectedEmof2OmgEmofDifferences(differences, helper, rightResourceSet);
EssentialOCLConsistencyTest.expectedEmof2OmgEmofDifferences(differences, helper, rightResourceSet);
EMOFConsistencyTest.expectedEmof2OmgEmofDifferences(differences, helper, rightResourceSet);
return differences;
}
@Override
protected Set<EcoreDifference> getExpectedEmof2OmgRoseDifferences(EquivalenceHelper helper, EPackage rightPackage) {
ResourceSet rightResourceSet = rightPackage.eResource().getResourceSet();
Set<EcoreDifference> differences = new HashSet<EcoreDifference>();
expectedEmofDifferences(differences, helper, rightResourceSet);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION_CALL_EXP__ARGUMENT);
changeOfLower(differences, helper, QVTRelationPackage.Literals.RELATION_CALL_EXP__REFERRED_RELATION);
//
// Support for opposite navigation
//
changeOfSize(differences, helper, QVTRelationPackage.eINSTANCE, EcorePackage.Literals.EPACKAGE__ECLASSIFIERS);
missingObject(differences, helper, QVTRelationPackage.Literals.OPPOSITE_PROPERTY_CALL_EXP);
changeOfLower(differences, helper, QVTRelationPackage.Literals.KEY__PART);
changeOfSize(differences, helper, QVTRelationPackage.Literals.KEY, EcorePackage.Literals.ECLASS__ESTRUCTURAL_FEATURES);
missingObject(differences, helper, QVTRelationPackage.Literals.KEY__OPPOSITE_PART);
missingOppositeAnnotation(differences, helper, QVTRelationPackage.Literals.KEY__OPPOSITE_PART);
helper.setLogStream(null);
QVTTemplateConsistencyTest.expectedEmofDifferences(differences, helper, rightResourceSet);
QVTBaseConsistencyTest.expectedEmofDifferences(differences, helper, rightResourceSet);
EMOFConsistencyTest.expectedEmofDifferences(differences, helper, rightResourceSet);
EssentialOCLConsistencyTest.expectedEmofDifferences(differences, helper, rightResourceSet);
return differences;
}
@Override
protected Set<EcoreDifference> getExpectedEmof2RoseDifferences(EquivalenceHelper helper, EPackage rightPackage) {
Set<EcoreDifference> differences = new HashSet<EcoreDifference>();
changeOfPrefix(differences, helper, QVTRelationPackage.eINSTANCE);
return differences;
}
@Override
protected IMappingMetaDataRegistry getMappingMetaDataRegistry() {
IMappingMetaDataRegistry mappingMetaDataRegistry = super.getMappingMetaDataRegistry();
QVTRelationMappingMetaData.INSTANCE.getFactory(mappingMetaDataRegistry);
return mappingMetaDataRegistry;
}
@Override
public String getPackageName() {
return QVTRELATION_PACKAGE_NAME;
}
@Override
protected void installEcoreEclipseMappings(EquivalenceMap comparator, ResourceSet resourceSet) {
super.installEcoreEclipseMappings(comparator, resourceSet);
comparator.putEquivalence(org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.eINSTANCE, getPackage(resourceSet, QVTRELATION_PACKAGE_NAME));
}
@Override
protected void installEmofEclipseMappings(EquivalenceMap comparator, ResourceSet resourceSet) {
super.installEmofEclipseMappings(comparator, resourceSet);
// comparator.putEquivalence(QVTBasePackage.eINSTANCE, getPackage(resourceSet, QVTBASE_PACKAGE_NAME));
comparator.putEquivalence(QVTRelationPackage.eINSTANCE, getPackage(resourceSet, QVTRELATION_PACKAGE_NAME));
}
@Override
protected void installEmofOmgMappings(EquivalenceMap comparator, ResourceSet resourceSet) {
super.installEmofOmgMappings(comparator, resourceSet);
comparator.putEquivalence(QVTBasePackage.eINSTANCE, getPackage(resourceSet, QVTBASE_PACKAGE_NAME.toLowerCase()));
comparator.putEquivalence(QVTTemplatePackage.eINSTANCE, getPackage(resourceSet, QVTTEMPLATE_PACKAGE_NAME.toLowerCase()));
comparator.putEquivalence(QVTRelationPackage.eINSTANCE, getPackage(resourceSet, QVTRELATION_PACKAGE_NAME.toLowerCase()));
}
@Override
protected void installEmof2EmofMappings(EquivalenceMap comparator, ResourceSet resourceSet) {
super.installEmof2EmofMappings(comparator, resourceSet);
comparator.putEquivalence(QVTBasePackage.eINSTANCE, getPackage(resourceSet, QVTBASE_PACKAGE_NAME.toLowerCase()));
comparator.putEquivalence(QVTTemplatePackage.eINSTANCE, getPackage(resourceSet, QVTTEMPLATE_PACKAGE_NAME.toLowerCase()));
comparator.putEquivalence(QVTRelationPackage.eINSTANCE, getPackage(resourceSet, QVTRELATION_PACKAGE_NAME.toLowerCase()));
}
public void testQVTRelationConsistency() throws IOException, MappingConfigurationException {
Map<InconsistencyKey, InconsistencyValue> ecoreInconsistencies = new HashMap<InconsistencyKey, InconsistencyValue>();
Map<InconsistencyKey, InconsistencyValue> adaptingInconsistencies = new HashMap<InconsistencyKey, InconsistencyValue>();
htmlStream.setEnabled(false);
getExpectedDerivedPackageInconsistencies(ecoreInconsistencies, adaptingInconsistencies);
htmlStream.setEnabled(true);
ecore2EmofAdapterConsistencyTest(ecoreInconsistencies, adaptingInconsistencies);
emof2OmgRoseConsistencyTest(QVTRelationPackage.eNS_URI, "qvtrelation.ecore");
emof2OmgEcoreConsistencyTest(QVTRelationPackage.eNS_URI, "qvtrelation.ecore");
emof2OmgEmofConsistencyTest(QVTRelationPackage.eNS_URI);
emof2RoseConsistencyTest(QVTRelationPackage.eNS_URI, "QVTRelation.ecore");
ecore2EmofConsistencyTest(org.eclipse.qvt.declarative.ecore.QVTRelation.QVTRelationPackage.eNS_URI,
QVTRelationPackage.eINSTANCE,
org.eclipse.qvt.declarative.emof.EssentialOCL.EssentialOCLPackage.eINSTANCE,
org.eclipse.qvt.declarative.emof.EMOF.EMOFPackage.eINSTANCE);
}
}