import ch.bfh.CalculatorLexer; import ch.bfh.parser.ExpressionParser; import org.junit.Test; import static org.junit.Assert.assertEquals; public class ExpressionParserTest { // Only testing correct expressions first @Test public void emptyExpression() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer(""); ExpressionParser ep = new ExpressionParser(cl); assertEquals(0.0, ep.getValue(), 0.0); } @Test public void oneFactor() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer("10"); ExpressionParser ep = new ExpressionParser(cl); assertEquals(10.0, ep.getValue(), 0.0); } @Test public void oneParenthesisedFactor() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer("(10)"); ExpressionParser ep = new ExpressionParser(cl); assertEquals(10.0, ep.getValue(), 0.0); } @Test public void oneNegativeFactor() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer("-10"); ExpressionParser ep = new ExpressionParser(cl); assertEquals(-10.0, ep.getValue(), 0.0); } @Test public void oneNegativeParenthesisedFactor() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer("-(10)"); ExpressionParser ep = new ExpressionParser(cl); assertEquals(-10.0, ep.getValue(), 0.0); } @Test public void oneNegativeParenthesisedNegativeFactor() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer("-(-10)"); ExpressionParser ep = new ExpressionParser(cl); assertEquals(10.0, ep.getValue(), 0.0); } @Test public void twoFactorSum() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer("2+3"); ExpressionParser ep = new ExpressionParser(cl); assertEquals(5.0, ep.getValue(), 0.0); } @Test public void twoFactorSub() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer("2-3"); ExpressionParser ep = new ExpressionParser(cl); assertEquals(-1.0, ep.getValue(), 0.0); } @Test public void twoFactorSumWithSub() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer("2--3"); ExpressionParser ep = new ExpressionParser(cl); assertEquals(5.0, ep.getValue(), 0.0); } @Test public void twoFactorSumWithSubParenthesised() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer("2-(-3)"); ExpressionParser ep = new ExpressionParser(cl); assertEquals(5.0, ep.getValue(), 0.0); } @Test public void twoFactorMul() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer("2*3"); ExpressionParser ep = new ExpressionParser(cl); assertEquals(6.0, ep.getValue(), 0.0); } @Test public void twoFactorDiv() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer("11/4"); ExpressionParser ep = new ExpressionParser(cl); assertEquals(2.75, ep.getValue(), 0.0); } @Test public void completeArithmeticOperationWithPriorities() { CalculatorLexer cl = new CalculatorLexer(); cl.initLexer("(4+5)*3/4"); ExpressionParser ep = new ExpressionParser(cl); assertEquals(6.75, ep.getValue(), 0.0); } //TODO - test error messages }