package ql.tests.ast; import org.junit.Test; import ql.ast.expression.And; import ql.ast.expression.Gt; import ql.ast.expression.Not; import ql.ast.expression.Or; import ql.tests.TestHelper; import ql.util.ParserHelper; import static org.junit.Assert.assertNotNull; /** * Created by bore on 17/02/15. */ public class LogicalExpr { @Test public void notExpr() { Not a = TestHelper.as(ParserHelper.ParseExpression("!x"), Not.class); assertNotNull(a); } @Test public void notExprNested() { Not a = TestHelper.as(ParserHelper.ParseExpression("!!x"), Not.class); assertNotNull(a); TestHelper.assertChildType(a.getOperand(), Not.class); } @Test public void andExpr() { And a = TestHelper.as(ParserHelper.ParseExpression("x&&y"), And.class); assertNotNull(a); } @Test public void andExprThreeArgs() { And a = TestHelper.as(ParserHelper.ParseExpression("x&&y&&z"), And.class); assertNotNull(a); TestHelper.assertChildType(a.getLeft(), And.class); } @Test public void andExprNestedLeft() { And a = TestHelper.as(ParserHelper.ParseExpression("(x&&y)&&z"), And.class); assertNotNull(a); TestHelper.assertChildType(a.getLeft(), And.class); } @Test public void andExprNestedRight() { And a = TestHelper.as(ParserHelper.ParseExpression("x&&(y&&z)"), And.class); assertNotNull(a); TestHelper.assertChildType(a.getRight(), And.class); } @Test public void orExpr() { Or a = TestHelper.as(ParserHelper.ParseExpression("x||y"), Or.class); assertNotNull(a); } @Test public void orExprThreeArgs() { Or a = TestHelper.as(ParserHelper.ParseExpression("x||y||z"), Or.class); assertNotNull(a); TestHelper.assertChildType(a.getLeft(), Or.class); } @Test public void orExprNestedLeft() { Or a = TestHelper.as(ParserHelper.ParseExpression("(x||y)||z"), Or.class); assertNotNull(a); TestHelper.assertChildType(a.getLeft(), Or.class); } @Test public void orExprNestedRight() { Or a = TestHelper.as(ParserHelper.ParseExpression("x||(y||z)"), Or.class); assertNotNull(a); TestHelper.assertChildType(a.getRight(), Or.class); } @Test public void orAnd() { And a = TestHelper.as(ParserHelper.ParseExpression("x||y&&z"), And.class); assertNotNull(a); TestHelper.assertChildType(a.getLeft(), Or.class); } @Test public void orInParenAnd() { And a = TestHelper.as(ParserHelper.ParseExpression("(x||y)&&z"), And.class); assertNotNull(a); TestHelper.assertChildType(a.getLeft(), Or.class); } @Test public void orAndInParen() { Or a = TestHelper.as(ParserHelper.ParseExpression("x||(y&&z)"), Or.class); assertNotNull(a); TestHelper.assertChildType(a.getRight(), And.class); } @Test public void orNot() { Or a = TestHelper.as(ParserHelper.ParseExpression("x||!y"), Or.class); assertNotNull(a); TestHelper.assertChildType(a.getRight(), Not.class); } @Test public void notAnd() { Not a = TestHelper.as(ParserHelper.ParseExpression("!(x&&y)"), Not.class); assertNotNull(a); TestHelper.assertChildType(a.getOperand(), And.class); } @Test public void orGtAnd() { And a = TestHelper.as(ParserHelper.ParseExpression("x||y>z&&w"), And.class); assertNotNull(a); Or left = TestHelper.as(a.getLeft(), Or.class); TestHelper.assertChildType(left.getRight(), Gt.class); } }