package uk.co.badgersinfoil.metaas; import java.io.StringWriter; import uk.co.badgersinfoil.metaas.dom.ASBinaryExpression; import uk.co.badgersinfoil.metaas.dom.Expression; import uk.co.badgersinfoil.metaas.dom.ASPrefixExpression; import uk.co.badgersinfoil.metaas.impl.AS3FragmentParser; import uk.co.badgersinfoil.metaas.impl.ASTExpression; import uk.co.badgersinfoil.metaas.impl.ASTPrinter; import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree; import junit.framework.TestCase; public class ExpressionParseTests extends TestCase { private ActionScriptFactory fact = new ActionScriptFactory(); public void testAdd() { Expression expr = fact.newExpression("1+1"); assertTrue(expr instanceof ASBinaryExpression); ASBinaryExpression add = (ASBinaryExpression)expr; assertEquals(ASBinaryExpression.Op.ADD, add.getOperator()); } public void testMultiplyAddPresidence() { // addition has lower presidence, so appears higher in AST Expression expr = fact.newExpression("1+2*2"); assertTrue(expr instanceof ASBinaryExpression); ASBinaryExpression add = (ASBinaryExpression)expr; assertEquals(ASBinaryExpression.Op.ADD, add.getOperator()); ASBinaryExpression right = (ASBinaryExpression)add.getRightSubexpression(); assertEquals(ASBinaryExpression.Op.MUL, right.getOperator()); // addition still has lower presidence, so appears higher in AST expr = fact.newExpression("2*2+1"); assertTrue(expr instanceof ASBinaryExpression); add = (ASBinaryExpression)expr; assertEquals(ASBinaryExpression.Op.ADD, add.getOperator()); ASBinaryExpression left = (ASBinaryExpression)add.getLeftSubexpression(); assertEquals(ASBinaryExpression.Op.MUL, left.getOperator()); } public void testPreIncrement() { Expression expr = fact.newExpression("++i"); assertTrue(expr instanceof ASPrefixExpression); ASPrefixExpression inc = (ASPrefixExpression)expr; assertEquals(ASPrefixExpression.Op.PREINC, inc.getOperator()); } public void testInvokeInvocation() { Expression expr = fact.newExpression("a().b()"); StringWriter buff = new StringWriter(); LinkedListTree ast = ((ASTExpression)expr).getAST(); CodeMirror.assertTokenStreamNotDisjoint(ast); new ASTPrinter(buff).print(ast); LinkedListTree parsed = AS3FragmentParser.parseExpr(buff.toString()); CodeMirror.assertASTMatch(ast, parsed); } }