package org.modeldriven.fuml.test.library;
import java.io.File;
import junit.framework.Test;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.modeldriven.fuml.Fuml;
import org.modeldriven.fuml.environment.Environment;
import org.modeldriven.fuml.environment.ExecutionEnvironment;
import org.modeldriven.fuml.test.FUMLTest;
import org.modeldriven.fuml.test.FUMLTestSetup;
import fUML.Semantics.CommonBehaviors.BasicBehaviors.ParameterValueList;
import fUML.Syntax.CommonBehaviors.BasicBehaviors.Behavior;
/**
*
*/
public class FunctionExecutionTestCase extends FUMLTest {
private static Log log = LogFactory.getLog(FunctionExecutionTestCase.class);
private static Environment environment; // JUnit creates a new test class for every test!
public static Test suite() {
return FUMLTestSetup.newTestSetup(FunctionExecutionTestCase.class);
}
public void setUp() throws Exception {
// called for every test
if (environment == null) {
String filename = "./target/test-classes/mdxml/fUML-Tests.mdxml";
File file = new File(filename);
assertTrue("file '" + filename + "' does not exist", file.exists());
Fuml.loadIncrementally(file, filename);
environment = Environment.getInstance();
log.info("loaded " + filename);
}
}
public void testTestIntegerFunctions() throws Exception {
log.info("testTestIntegerFunctions");
ParameterValueList output = execute("TestIntegerFunctions");
assertEqualValues("TestTestIntegerFunctions.NegResult", output, "NegResult", -3);
assertEqualValues("TestTestIntegerFunctions.PlusResult", output, "PlusResult", 5);
assertEqualValues("TestTestIntegerFunctions.MinusResult", output, "MinusResult", 1);
assertEqualValues("TestTestIntegerFunctions.TimesResult", output, "TimesResult", 6);
assertEqualValues("TestTestIntegerFunctions.DivResult", output, "DivResult", 1);
assertEqualValues("TestTestIntegerFunctions.ModResult", output, "ModResult", 1);
assertEqualValues("TestTestIntegerFunctions.MaxResult", output, "MaxResult", 3);
assertEqualValues("TestTestIntegerFunctions.MinResult", output, "MinResult", 2);
assertEqualValues("TestTestIntegerFunctions.AbsResult", output, "AbsResult", 2);
log.info("done");
}
public void testTestIntegerComparisonFunctions() throws Exception {
log.info("testTestIntegerComparisonFunctions");
ParameterValueList output = execute("TestIntegerComparisonFunctions");
assertEqualValues("TestIntegerComparisonFunctions.LTResult", output, "LTResult", false);
assertEqualValues("TestIntegerComparisonFunctions.LEResult", output, "LEResult", false);
assertEqualValues("TestIntegerComparisonFunctions.GTResult", output, "GTResult", true);
assertEqualValues("TestIntegerComparisonFunctions.GEResult", output, "GEResult", true);
log.info("done");
}
public void testTestRealFunctions() throws Exception {
log.info("testTestRealFunctions");
ParameterValueList output = execute("TestRealFunctions");
assertEqualValues("TestRealFunctions.NegResult", output, "NegResult", -3.1f);
assertEqualValues("TestRealFunctions.PlusResult", output, "PlusResult", 3.6f);
assertEqualValues("TestRealFunctions.MinusResult", output, "MinusResult", 2.6f);
assertEqualValues("TestRealFunctions.InvResult", output, "InvResult", 2.0f);
assertEqualValues("TestRealFunctions.TimesResult", output, "TimesResult", 1.55f);
assertEqualValues("TestRealFunctions.DivideResult", output, "DivideResult", 6.2f);
assertEqualValues("TestRealFunctions.MaxResult", output, "MaxResult", 3.1f);
assertEqualValues("TestRealFunctions.MinResult", output, "MinResult", 0.5f);
assertEqualValues("TestRealFunctions.AbsResult", output, "AbsResult", 2.3f);
assertEqualValues("TestRealFunctions.FloorResult", output, "FloorResult", -3);
assertEqualValues("TestRealFunctions.RoundResult", output, "RoundResult", -2);
assertEqualValues("TestRealFunctions.ToIntegerResult", output, "ToIntegerResult", -2);
log.info("done");
}
public void testTestRealComparisonFunctions() throws Exception {
log.info("testTestRealComparisonFunctions");
ParameterValueList output = execute("TestRealComparisonFunctions");
assertEqualValues("TestRealComparisonFunctions.LTResult", output, "LTResult", false);
assertEqualValues("TestRealComparisonFunctions.LEResult", output, "LEResult", false);
assertEqualValues("TestRealComparisonFunctions.GTResult", output, "GTResult", true);
assertEqualValues("TestRealComparisonFunctions.GEResult", output, "GEResult", true);
log.info("done");
}
public void testTestBooleanFunctions() throws Exception {
log.info("testTestBooleanFunctions");
ParameterValueList output = execute("TestBooleanFunctions");
assertEqualValues("TestBooleanFunctions.NotResult", output, "NotResult", false, true);
assertEqualValues("TestBooleanFunctions.AndResult", output, "AndResult", true, false, false, false);
assertEqualValues("TestBooleanFunctions.OrResult", output, "OrResult", true, true, true, false);
assertEqualValues("TestBooleanFunctions.ImpliesResult", output, "ImpliesResult", true, false, true, true);
assertEqualValues("TestBooleanFunctions.XorResult", output, "XorResult", false, true, true, false);
log.info("done");
}
public void testTestStringFunctions() throws Exception {
log.info("testTestStringFunctions");
ParameterValueList output = execute("TestStringFunctions");
assertEqualValues("TestStringFunctions.SizeResult", output, "SizeResult", 9);
assertEqualValues("TestStringFunctions.Substring1Result", output, "Substring1Result", "12345");
assertEqualValues("TestStringFunctions.Substring2Result", output, "Substring2Result", "6789");
assertEqualValues("TestStringFunctions.ConcatResult", output, "ConcatResult", "123456789");
log.info("done");
}
public void testTestUnlimitedNaturalFunctions() throws Exception {
log.info("testTestUnlimitedNaturalFunctions");
ParameterValueList output = execute("TestUnlimitedNaturalFunctions");
assertEqualValues("TestUnlimitedNaturalFunctions.LTResult", output, "LTResult", false);
assertEqualValues("TestUnlimitedNaturalFunctions.LEResult", output, "LEResult", false);
assertEqualValues("TestUnlimitedNaturalFunctions.GTResult", output, "GTResult", true);
assertEqualValues("TestUnlimitedNaturalFunctions.GEResult", output, "GEResult", true);
assertEqualValues("TestUnlimitedNaturalFunctions.LTResult*", output, "LTResult*", true);
assertEqualValues("TestUnlimitedNaturalFunctions.LEResult*", output, "LEResult*", true);
assertEqualValues("TestUnlimitedNaturalFunctions.GTResult*", output, "GTResult*", false);
assertEqualValues("TestUnlimitedNaturalFunctions.GEResult*", output, "GEResult*", false);
assertEqualValues("TestUnlimitedNaturalFunctions.MaxResult", output, "MaxResult", -1);
assertEqualValues("TestUnlimitedNaturalFunctions.MinResult", output, "MinResult", 2);
log.info("done");
}
public void testTestListFunctions() throws Exception {
log.info("testTestListFunctions");
ParameterValueList output = execute("TestListFunctions");
assertEqualValues("TestListFunctions.size", output, "size", 3);
assertEqualValues("TestListFunctions.element", output, "element", 2);
assertEqualValues("TestListFunctions.concat", output, "concat", 1, 2, 3, 1, 2, 3);
log.info("done");
}
public void testHelloWorld() throws Exception {
log.info("testHelloWorld");
execute("HelloWorld");
log.info("done");
}
private ParameterValueList execute(String activityName)
{
Behavior behavior = environment.findBehavior(activityName);
if (behavior == null)
throw new RuntimeException("invalid behavior, " + activityName);
log.info("executing behavior: " + behavior.name);
ExecutionEnvironment execution = new ExecutionEnvironment(environment);
return execution.execute(behavior);
}
}