blob: a9a05ee929d1faeafd37efbddb033b60743909bd [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2018 Stefan Schulze, Zeligsoft Inc., 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:
* Stefan Schulze - Initial API and implementation
* Zeligsoft - Formatting and MDT OCL code conventions
*******************************************************************************/
package org.eclipse.ocl.ecore.tests;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EOperation;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EStructuralFeature;
import org.eclipse.emf.ecore.EcoreFactory;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.ocl.ecore.OperationCallExp;
import org.eclipse.ocl.ecore.PropertyCallExp;
import org.eclipse.ocl.expressions.OCLExpression;
/**
* Tests access to redefined features.
*
* @author Stefan Schulze
*/
@SuppressWarnings("nls")
public class FeatureRedefinitionTest
extends AbstractTestSuite {
EClass c3;
EOperation op3;
EAttribute attr3;
EClass c2;
EAttribute attr2;
EOperation op2;
EClass c1;
EAttribute attr1;
EOperation op1;
public void testCallOverridingMethod()
throws Exception {
helper.setContext(c3);
OCLExpression<EClassifier> expr = helper.createQuery("self.foo()");
OperationCallExp callExpr = (OperationCallExp) expr;
EOperation eop = callExpr.getReferredOperation();
// C3::foo() should accessed
assertSame(op3, eop);
}
public void testCallOverriddenMethod1()
throws Exception {
helper.setContext(c3);
OCLExpression<EClassifier> expr = helper
.createQuery("self.oclAsType(C2).foo()");
OperationCallExp callExpr = (OperationCallExp) expr;
EOperation eop = callExpr.getReferredOperation();
// C2::foo() should accessed
assertSame(op2, eop);
}
public void testCallOverriddenMethod2()
throws Exception {
helper.setContext(c3);
OCLExpression<EClassifier> expr = helper
.createQuery("self.oclAsType(C1).foo()");
OperationCallExp callExpr = (OperationCallExp) expr;
EOperation eop = callExpr.getReferredOperation();
// C1::foo() should accessed
assertSame(op1, eop);
}
public void testAccessOverridingProperty()
throws Exception {
helper.setContext(c3);
OCLExpression<EClassifier> expr = helper.createQuery("self.a");
PropertyCallExp callExpr = (PropertyCallExp) expr;
EStructuralFeature esf = callExpr.getReferredProperty();
// C3::a should accessed
assertSame(attr3, esf);
}
public void testAccessOverriddenProperty1()
throws Exception {
helper.setContext(c3);
OCLExpression<EClassifier> expr = helper
.createQuery("self.oclAsType(C2).a");
PropertyCallExp callExpr = (PropertyCallExp) expr;
EStructuralFeature esf = callExpr.getReferredProperty();
// C2::a should accessed
assertSame(attr2, esf);
}
public void testAccessOverriddenProperty2()
throws Exception {
helper.setContext(c3);
OCLExpression<EClassifier> expr = helper
.createQuery("self.oclAsType(C1).a");
PropertyCallExp callExpr = (PropertyCallExp) expr;
EStructuralFeature esf = callExpr.getReferredProperty();
// C1::a should accessed
assertSame(attr1, esf);
}
//
// Test framework
//
@Override
protected void setUp() {
super.setUp();
EcoreFactory f = EcoreFactory.eINSTANCE;
EPackage p = f.createEPackage();
p.setName("TestPackage");
/* test model:
*
* C1
* - a : EInt
* - foo() : EInt
*
* C2 --|> C1
* - a : EInt
* - foo() : EInt
*
* C3 --|> C2
* - a : EInt
* - foo() : EInt
*/
c1 = f.createEClass();
p.getEClassifiers().add(c1);
c1.setName("C1");
attr1 = f.createEAttribute();
attr1.setName("a");
attr1.setEType(EcorePackage.Literals.EINT);
c1.getEStructuralFeatures().add(attr1);
op1 = f.createEOperation();
c1.getEOperations().add(op1);
op1.setName("foo");
op1.setEType(EcorePackage.Literals.EINT);
c2 = f.createEClass();
p.getEClassifiers().add(c2);
c2.setName("C2");
c2.getESuperTypes().add(c1);
attr2 = f.createEAttribute();
attr2.setName("a");
attr2.setEType(EcorePackage.Literals.EINT);
c2.getEStructuralFeatures().add(attr2);
op2 = f.createEOperation();
c2.getEOperations().add(op2);
op2.setName("foo");
op2.setEType(EcorePackage.Literals.EINT);
c3 = f.createEClass();
p.getEClassifiers().add(c3);
c3.setName("C3");
c3.getESuperTypes().add(c2);
attr3 = f.createEAttribute();
attr3.setName("a");
attr3.setEType(EcorePackage.Literals.EINT);
c3.getEStructuralFeatures().add(attr3);
op3 = f.createEOperation();
c3.getEOperations().add(op3);
op3.setName("foo");
op3.setEType(EcorePackage.Literals.EINT);
}
}