package com.javadude.annotation.processors.template; import org.junit.Assert; import org.junit.Test; public class TestConditionParser { private ConditionParser conditionParser = new ConditionParser(); @Test public void t1() { try { conditionParser.parse("", 0); } catch(ExpressionException e) { Assert.assertEquals("Missing expression on line 0", e.getMessage()); } } @Test public void t2() { try { conditionParser.parse(")", 0); } catch(ExpressionException e) { Assert.assertEquals("Expected '!', '(' or variable; found ')' in expression ')' on line 0", e.getMessage()); } } @Test public void t3() { try { conditionParser.parse("&", 0); } catch(ExpressionException e) { Assert.assertEquals("Expected '!', '(' or variable; found '&' in expression '&' on line 0", e.getMessage()); } } @Test public void t4() { try { conditionParser.parse("|", 0); } catch(ExpressionException e) { Assert.assertEquals("Expected '!', '(' or variable; found '|' in expression '|' on line 0", e.getMessage()); } } @Test public void t5() { Condition condition = conditionParser.parse("x", 0); Assert.assertEquals(VariableTest.class, condition.getClass()); Assert.assertEquals("VariableTest[variable=x]", condition.toString()); } @Test public void t5a() { Condition condition = conditionParser.parse("(x)", 0); Assert.assertEquals(VariableTest.class, condition.getClass()); Assert.assertEquals("VariableTest[variable=x]", condition.toString()); } @Test public void t6() { Condition condition = conditionParser.parse(" x ", 0); Assert.assertEquals(VariableTest.class, condition.getClass()); Assert.assertEquals("VariableTest[variable=x]", condition.toString()); } @Test public void t6a() { Condition condition = conditionParser.parse(" ( x ) ", 0); Assert.assertEquals(VariableTest.class, condition.getClass()); Assert.assertEquals("VariableTest[variable=x]", condition.toString()); } @Test public void t7() { Condition condition = conditionParser.parse("x & y", 0); Assert.assertEquals(And.class, condition.getClass()); Assert.assertEquals("And[op1=VariableTest[variable=x],op2=VariableTest[variable=y]]", condition.toString()); } @Test public void t7a() { Condition condition = conditionParser.parse("(x & y)", 0); Assert.assertEquals(And.class, condition.getClass()); Assert.assertEquals("And[op1=VariableTest[variable=x],op2=VariableTest[variable=y]]", condition.toString()); } @Test public void t8() { Condition condition = conditionParser.parse("x | y", 0); Assert.assertEquals(Or.class, condition.getClass()); Assert.assertEquals("Or[op1=VariableTest[variable=x],op2=VariableTest[variable=y]]", condition.toString()); } @Test public void t8a() { Condition condition = conditionParser.parse("(x | y)", 0); Assert.assertEquals(Or.class, condition.getClass()); Assert.assertEquals("Or[op1=VariableTest[variable=x],op2=VariableTest[variable=y]]", condition.toString()); } @Test public void t9() { Condition condition = conditionParser.parse("(x | y) & z | a", 0); Assert.assertEquals(Or.class, condition.getClass()); Assert.assertEquals("Or[op1=And[op1=Or[op1=VariableTest[variable=x],op2=VariableTest[variable=y]],op2=VariableTest[variable=z]],op2=VariableTest[variable=a]]", condition.toString()); } @Test public void t9a() { Condition condition = conditionParser.parse("(((x | y) & z | a))", 0); Assert.assertEquals(Or.class, condition.getClass()); Assert.assertEquals("Or[op1=And[op1=Or[op1=VariableTest[variable=x],op2=VariableTest[variable=y]],op2=VariableTest[variable=z]],op2=VariableTest[variable=a]]", condition.toString()); } @Test public void t9b() { Condition condition = conditionParser.parse("((x | y) & z) | a", 0); Assert.assertEquals(Or.class, condition.getClass()); Assert.assertEquals("Or[op1=And[op1=Or[op1=VariableTest[variable=x],op2=VariableTest[variable=y]],op2=VariableTest[variable=z]],op2=VariableTest[variable=a]]", condition.toString()); } @Test public void t10() { try { conditionParser.parse("((x | y) & z | a", 0); } catch (ExpressionException e) { Assert.assertEquals("End-of-expression found when expecting ')' in expression '((x | y) & z | a' on line 0", e.getMessage()); } } @Test public void t11() { Condition condition = conditionParser.parse("(!(x | y) & z) | a", 0); Assert.assertEquals(Or.class, condition.getClass()); Assert.assertEquals("Or[op1=And[op1=Not[op=Or[op1=VariableTest[variable=x],op2=VariableTest[variable=y]]],op2=VariableTest[variable=z]],op2=VariableTest[variable=a]]", condition.toString()); } }