package com.sap.runlet.expressionpad.tests;
import com.sap.runlet.abstractexpressionpad.Evaluator.ExecuteResult;
import com.sap.runlet.abstractinterpreter.objects.MultiValuedObject;
import com.sap.runlet.abstractinterpreter.objects.RunletObject;
import com.sap.runlet.abstractinterpreter.util.Fraction;
import com.sap.runlet.interpreter.objects.ValueObject;
import data.classes.AssociationEnd;
import data.classes.ClassTypeDefinition;
import data.classes.TypeDefinition;
public class ObjectParameterizedClassesTests extends RunletTestCase {
public void testInitializationConversion() throws Exception {
ExecuteResult<AssociationEnd, TypeDefinition, ClassTypeDefinition> executeResult = main.execute(
"OPC1|1| o1 = value OPC1|2|()",
"OPC1|2| o2 = value OPC1|2|()",
"o1.n()",
"o2.n()");
RunletObject<AssociationEnd, TypeDefinition, ClassTypeDefinition>[] result = executeResult.getResult();
String[] errors = executeResult.getErrors();
assertEquals(4, result.length);
assertEquals(0, errors.length);
assertNOEquals(new Fraction(1), result[2]);
assertNOEquals(new Fraction(2), result[3]);
}
public void testAssignmentConversion() throws Exception {
ExecuteResult<AssociationEnd, TypeDefinition, ClassTypeDefinition> executeResult = main.execute(
"OPC1|1| o1",
"o1 = value OPC1|2|()",
"o1.n()");
RunletObject<AssociationEnd, TypeDefinition, ClassTypeDefinition>[] result = executeResult.getResult();
String[] errors = executeResult.getErrors();
assertEquals(3, result.length);
assertEquals(0, errors.length);
assertNOEquals(new Fraction(1), result[2]);
}
public void testMultiObjectConversion() throws Exception {
ExecuteResult<AssociationEnd, TypeDefinition, ClassTypeDefinition> executeResult = main.execute(
"OPC1|2|[] o2s",
"o2s = o2s->including(value OPC1|2|())",
"o2s = o2s->including(value OPC1|2|())",
"o2s = o2s->including(value OPC1|2|())",
"OPC1|1|[] o1s = o2s",
"o1s.n()");
RunletObject<AssociationEnd, TypeDefinition, ClassTypeDefinition>[] result = executeResult.getResult();
String[] errors = executeResult.getErrors();
assertEquals(6, result.length);
assertEquals(0, errors.length);
assertTrue(result[5] instanceof MultiValuedObject<?, ?, ?>);
for (RunletObject<AssociationEnd, TypeDefinition, ClassTypeDefinition> ro : result[5]) {
assertTrue(ro instanceof ValueObject);
ValueObject vo = (ValueObject) ro;
assertNOEquals(new Fraction(1), vo);
}
}
public void testObjectParameterizedFeatureInOPC() throws Exception {
ExecuteResult<AssociationEnd, TypeDefinition, ClassTypeDefinition> executeResult = main.execute(
"var o=value OPCWithFeature|2|(feature: value OPC1|3|())",
"o.feature.n()");
RunletObject<AssociationEnd, TypeDefinition, ClassTypeDefinition>[] result = executeResult.getResult();
String[] errors = executeResult.getErrors();
assertEquals(2, result.length);
assertEquals(0, errors.length);
assertNOEquals(new Fraction(2), result[1]);
}
public void testOptionalObjectParameters() throws Exception {
ExecuteResult<AssociationEnd, TypeDefinition, ClassTypeDefinition> executeResult = main.execute(
"var o=value OPCWithOptional()",
"o.getPrecision()",
"o.getRoundingRule()",
"OPCWithOptional|1| o2",
"o2=o",
"o2.getPrecision()");
RunletObject<AssociationEnd, TypeDefinition, ClassTypeDefinition>[] result = executeResult.getResult();
String[] errors = executeResult.getErrors();
assertEquals(6, result.length);
assertEquals(0, errors.length);
assertNOEquals(new Fraction(-1), result[1]);
assertNOEquals(new Fraction(0), result[2]);
assertNOEquals(new Fraction(1), result[5]);
}
}