package com.sap.emf.ocl.prepared.test;
import junit.framework.TestCase;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EcorePackage;
import org.eclipse.ocl.ParserException;
import org.eclipse.ocl.ecore.BooleanLiteralExp;
import org.eclipse.ocl.ecore.IntegerLiteralExp;
import org.eclipse.ocl.ecore.OCL.Helper;
import org.eclipse.ocl.ecore.OCLExpression;
import org.eclipse.ocl.ecore.OperationCallExp;
import org.eclipse.ocl.ecore.StringLiteralExp;
import org.junit.Test;
import com.sap.emf.ocl.prepared.PreparedOCLExpression;
public class TestPreparedOCLExpressions extends TestCase {
@Test
public void testIntegerParameterizedExpressionMixingLiteralsWithValues() throws ParserException {
Helper helper = org.eclipse.ocl.examples.impactanalyzer.util.OCL.newInstance().createOCLHelper();
EClass eClassClass = EcorePackage.eINSTANCE.getEClass();
helper.setContext(eClassClass);
OCLExpression e = helper.createQuery("self.eStructuralFeatures->size() > 1111");
IntegerLiteralExp ile = (IntegerLiteralExp) ((OperationCallExp) e).getArgument().get(0);
PreparedOCLExpression prepared = new PreparedOCLExpression(e, ile);
assertEquals(true, prepared.evaluate(eClassClass, prepared.createParameterValue(1111, 3)));
assertEquals(false, prepared.evaluate(eClassClass, prepared.createParameterValue(1111, 100)));
}
@Test
public void testIntegerParameterizedExpressionAccessByValue() throws ParserException {
Helper helper = org.eclipse.ocl.examples.impactanalyzer.util.OCL.newInstance().createOCLHelper();
EClass eClassClass = EcorePackage.eINSTANCE.getEClass();
helper.setContext(eClassClass);
OCLExpression e = helper.createQuery("self.eStructuralFeatures->size() > 1111");
PreparedOCLExpression prepared = new PreparedOCLExpression(e, 1111);
assertEquals(true, prepared.evaluate(eClassClass, prepared.createParameterValue(1111, 3)));
assertEquals(false, prepared.evaluate(eClassClass, prepared.createParameterValue(1111, 100)));
}
@Test
public void testIntegerParameterizedExpressionAccessByPosition() throws ParserException {
Helper helper = org.eclipse.ocl.examples.impactanalyzer.util.OCL.newInstance().createOCLHelper();
EClass eClassClass = EcorePackage.eINSTANCE.getEClass();
helper.setContext(eClassClass);
OCLExpression e = helper.createQuery("self.eStructuralFeatures->size() > 1111");
PreparedOCLExpression prepared = new PreparedOCLExpression(e, 1111);
assertEquals(true, prepared.evaluate(eClassClass, prepared.createPositionalParameterValue(0, 3)));
assertEquals(false, prepared.evaluate(eClassClass, prepared.createPositionalParameterValue(0, 100)));
}
@Test
public void testBooleanParameterizedExpressionWithPositionalAccess() throws ParserException {
Helper helper = org.eclipse.ocl.examples.impactanalyzer.util.OCL.newInstance().createOCLHelper();
EClass eClassClass = EcorePackage.eINSTANCE.getEClass();
helper.setContext(eClassClass);
OCLExpression e = helper.createQuery("true and self.eStructuralFeatures->size() > 3");
BooleanLiteralExp ble = (BooleanLiteralExp) ((OperationCallExp) e).getSource();
PreparedOCLExpression prepared = new PreparedOCLExpression(e, ble);
assertEquals(true, prepared.evaluate(eClassClass, prepared.createPositionalParameterValue(0, true)));
assertEquals(false, prepared.evaluate(eClassClass, prepared.createPositionalParameterValue(0, false)));
}
@Test
public void testStringParameterizedExpression() throws ParserException {
Helper helper = org.eclipse.ocl.examples.impactanalyzer.util.OCL.newInstance().createOCLHelper();
EClass eClassClass = EcorePackage.eINSTANCE.getEClass();
helper.setContext(eClassClass);
OCLExpression e = helper.createQuery("self.name = '?'");
StringLiteralExp ble = (StringLiteralExp) ((OperationCallExp) e).getArgument().get(0);
PreparedOCLExpression prepared = new PreparedOCLExpression(e, ble);
assertEquals(true, prepared.evaluate(eClassClass, prepared.createParameterValue("?", "EClass")));
assertEquals(false, prepared.evaluate(eClassClass, prepared.createParameterValue("?", "SomethingElse")));
}
}