package uk.co.badgersinfoil.metaas;
import java.io.IOException;
import uk.co.badgersinfoil.metaas.dom.ASAssignmentExpression;
import uk.co.badgersinfoil.metaas.dom.ASClassType;
import uk.co.badgersinfoil.metaas.dom.ASCompilationUnit;
import uk.co.badgersinfoil.metaas.dom.ASExpressionStatement;
import uk.co.badgersinfoil.metaas.dom.ASFunctionExpression;
import uk.co.badgersinfoil.metaas.dom.ASMethod;
import uk.co.badgersinfoil.metaas.dom.Visibility;
import junit.framework.TestCase;
public class FunctionExpressionTests extends TestCase {
private ActionScriptFactory fact = new ActionScriptFactory();
private ASCompilationUnit unit;
private ASMethod meth;
private ASCompilationUnit reflect;
protected void setUp() {
unit = fact.newClass("Test");
ASClassType clazz = (ASClassType)unit.getType();
meth = clazz.newMethod("test", Visibility.PUBLIC, null);
reflect = null;
}
protected void tearDown() throws IOException {
if (reflect == null) {
reflect = assertReflection();
}
}
private ASCompilationUnit assertReflection() throws IOException {
return CodeMirror.assertReflection(fact, unit);
}
public void testIt() {
ASFunctionExpression func = fact.newFunctionExpression();
assertNotNull(func);
func.addParam("foo", "String");
meth.newExprStmt(fact.newAssignExpression(fact.newExpression("myFunc"), func));
func.addStmt("trace('hello world')");
}
public void testParse() {
ASExpressionStatement exprStmt = (ASExpressionStatement)meth.addStmt("theFunc = function () { trace('foo!'); }");
ASAssignmentExpression assign = (ASAssignmentExpression)exprStmt.getExpression();
ExtraAssertions.assertInstanceof(assign.getRightSubexpression(), ASFunctionExpression.class);
}
public void testParseNamed() {
ASExpressionStatement exprStmt = (ASExpressionStatement)meth.addStmt("theFunc = function fn() { trace('foo!'); }");
ASAssignmentExpression assign = (ASAssignmentExpression)exprStmt.getExpression();
ExtraAssertions.assertInstanceof(assign.getRightSubexpression(), ASFunctionExpression.class);
}
}