package uk.co.badgersinfoil.metaas;
import uk.co.badgersinfoil.metaas.dom.ASBinaryExpression;
import uk.co.badgersinfoil.metaas.dom.Expression;
import uk.co.badgersinfoil.metaas.impl.ASTExpression;
import uk.co.badgersinfoil.metaas.impl.ASTUtils;
import uk.co.badgersinfoil.metaas.impl.antlr.LinkedListTree;
import junit.framework.TestCase;
public class BinaryExpressionTests extends TestCase {
private Expression left;
private Expression right;
private ActionScriptFactory fact = new ActionScriptFactory();
private ASBinaryExpression expr;
public void setUp() {
left = fact.newIntegerLiteral(1);
right = fact.newIntegerLiteral(2);
expr = null;
}
public void tearDown() {
if (expr != null) {
assertEquals(left,
expr.getLeftSubexpression());
assertEquals(right,
expr.getRightSubexpression());
}
}
public void testAdd() {
expr = fact.newAddExpression(left, right);
assertOp(ASBinaryExpression.Op.ADD);
}
public void testAnd() {
expr = fact.newAndExpression(left, right);
assertOp(ASBinaryExpression.Op.AND);
}
public void testBitAnd() {
expr = fact.newBitAndExpression(left, right);
assertOp(ASBinaryExpression.Op.BITAND);
}
public void testBitOr() {
expr = fact.newBitOrExpression(left, right);
assertOp(ASBinaryExpression.Op.BITOR);
}
public void testBitXor() {
expr = fact.newBitXorExpression(left, right);
assertOp(ASBinaryExpression.Op.BITXOR);
}
public void testDivision() {
expr = fact.newDivisionExpression(left, right);
assertOp(ASBinaryExpression.Op.DIV);
}
public void testEquals() {
expr = fact.newEqualsExpression(left, right);
assertOp(ASBinaryExpression.Op.EQ);
}
public void testGreaterEquals() {
expr = fact.newGreaterEqualsExpression(left, right);
assertOp(ASBinaryExpression.Op.GE);
}
public void testGreaterThan() {
expr = fact.newGreaterThanExpression(left, right);
assertOp(ASBinaryExpression.Op.GT);
}
public void testLessEquals() {
expr = fact.newLessEqualsExpression(left, right);
assertOp(ASBinaryExpression.Op.LE);
}
public void testLessThan() {
expr = fact.newLessThanExpression(left, right);
assertOp(ASBinaryExpression.Op.LT);
}
public void testModulo() {
expr = fact.newModuloExpression(left, right);
assertOp(ASBinaryExpression.Op.MOD);
}
public void testMultiply() {
expr = fact.newMultiplyExpression(left, right);
assertOp(ASBinaryExpression.Op.MUL);
}
public void testNotEquals() {
expr = fact.newNotEqualsExpression(left, right);
assertOp(ASBinaryExpression.Op.NE);
}
public void testOr() {
expr = fact.newOrExpression(left, right);
assertOp(ASBinaryExpression.Op.OR);
}
public void testShiftLeft() {
expr = fact.newShiftLeftExpression(left, right);
assertOp(ASBinaryExpression.Op.SL);
}
public void testShiftRight() {
expr = fact.newShiftRightExpression(left, right);
assertOp(ASBinaryExpression.Op.SR);
}
public void testShiftRightUnsigned() {
expr = fact.newShiftRightUnsignedExpression(left, right);
assertOp(ASBinaryExpression.Op.SRU);
}
public void testSubtract() {
expr = fact.newSubtractExpression(left, right);
assertOp(ASBinaryExpression.Op.SUB);
}
private void assertOp(ASBinaryExpression.Op expected) {
LinkedListTree ast = ((ASTExpression)expr).getAST();
Expression expr = fact.newExpression(ASTUtils.stringifyNode(ast));
assertEquals(expected, ((ASBinaryExpression)expr).getOperator());
}
public void testOpString() throws IllegalArgumentException, IllegalAccessException {
EnumAssert.assertValidEnumConstants(ASBinaryExpression.Op.class);
}
public void testSetOp() {
expr = fact.newAddExpression(left, right);
assertOp(ASBinaryExpression.Op.ADD);
expr.setOperator(ASBinaryExpression.Op.SUB);
assertOp(ASBinaryExpression.Op.SUB);
}
public void testSetLeft() {
expr = fact.newAddExpression(left, right);
left = fact.newIntegerLiteral(24);
expr.setLeftSubexpression(left);
}
public void testSetRight() {
expr = fact.newAddExpression(left, right);
right = fact.newIntegerLiteral(24);
expr.setRightSubexpression(right);
}
}