package uk.co.badgersinfoil.metaas;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
import uk.co.badgersinfoil.metaas.dom.Expression;
import uk.co.badgersinfoil.metaas.dom.ASIntegerLiteral;
import uk.co.badgersinfoil.metaas.dom.ASInvocationExpression;
import uk.co.badgersinfoil.metaas.dom.ASStringLiteral;
import uk.co.badgersinfoil.metaas.dom.Invocation;
import uk.co.badgersinfoil.metaas.impl.AS3FragmentParser;
import uk.co.badgersinfoil.metaas.impl.ASTExpression;
import uk.co.badgersinfoil.metaas.impl.ASTInvocation;
import uk.co.badgersinfoil.metaas.impl.ASTPrinter;
import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
import junit.framework.TestCase;
public class InvocationExpressionTests extends TestCase {
protected ActionScriptFactory fact = new ActionScriptFactory();
protected Expression sub;
protected Invocation expr;
protected List args;
public void setUp() {
args = new ArrayList();
sub = fact.newExpression("com.example.MyClass");
}
public void tearDown() {
StringWriter buff = new StringWriter();
if (expr != null) {
LinkedListTree ast = ((ASTInvocation)expr).getAST();
new ASTPrinter(buff).print(ast);
LinkedListTree parsed = AS3FragmentParser.parseExpr(buff.toString());
CodeMirror.assertASTMatch(ast, parsed);
}
}
protected Invocation newTestExpr(Expression sub, List args) {
return fact.newInvocationExpression(sub, args);
}
public void testBasic() {
args.add(fact.newIntegerLiteral(1));
expr = newTestExpr(sub, args);
assertEquals(sub, expr.getTargetExpression());
List actualArgs = expr.getArguments();
assertEquals(1, actualArgs.size());
}
public void testSetExpression() {
expr = newTestExpr(sub, args);
sub = fact.newExpression("Replacement");
expr.setTargetExpression(sub);
assertEquals(sub, expr.getTargetExpression());
}
public void testSetArguments() {
expr = newTestExpr(sub, args);
List newArgs = new ArrayList();
ASIntegerLiteral arg1 = fact.newIntegerLiteral(1);
newArgs.add(arg1);
ASStringLiteral arg2 = fact.newStringLiteral("foo");
newArgs.add(arg2);
expr.setArguments(newArgs);
assertEquals(2, expr.getArguments().size());
assertEquals(arg1, expr.getArguments().get(0));
assertEquals(arg2, expr.getArguments().get(1));
}
public void testReplaceArguments() {
expr = newTestExpr(sub, args);
List args = new ArrayList();
ASIntegerLiteral arg = fact.newIntegerLiteral(1);
args.add(arg);
expr.setArguments(args);
List newArgs = new ArrayList();
ASStringLiteral newArg = fact.newStringLiteral("foo");
newArgs.add(newArg);
expr.setArguments(newArgs);
assertEquals(1, expr.getArguments().size());
assertEquals(newArg, expr.getArguments().get(0));
}
}