package net.jhorstmann.i18n.tools; import antlr.RecognitionException; import antlr.TokenStreamException; import java.io.StringReader; import junit.framework.Assert; import net.jhorstmann.i18n.tools.expr.Expression; import net.jhorstmann.i18n.tools.expr.InvalidExpressionException; import net.jhorstmann.i18n.tools.expr.NotExpression; import net.jhorstmann.i18n.tools.expr.OrExpression; import org.junit.Test; public class ExprParserTest { private Expression parseExpression(String str) throws RecognitionException, TokenStreamException { ExprLexer lexer = new ExprLexer(new StringReader(str)); ExprParser parser = new ExprParser(lexer); return parser.expression(); } @Test(expected=RecognitionException.class) public void testInvalid() throws RecognitionException, TokenStreamException, InvalidExpressionException { Expression e = parseExpression("0 || "); System.out.println(e); e.validate(); } @Test public void testOrExpression() throws RecognitionException, TokenStreamException, InvalidExpressionException { Expression e = parseExpression("0 || 1 || 1"); Assert.assertNotNull(e); System.out.println(e); e.validate(); Assert.assertTrue(e instanceof OrExpression); Assert.assertTrue(e.isBool()); Assert.assertEquals(1, e.eval(0)); Assert.assertEquals(1, e.eval(1)); Assert.assertEquals(1, e.eval(2)); Assert.assertEquals("((0) || (1)) || (1)", e.toString()); } @Test public void testNotExpression() throws RecognitionException, TokenStreamException, InvalidExpressionException { Expression e = parseExpression("!(0)"); Assert.assertNotNull(e); System.out.println(e); e.validate(); Assert.assertTrue(e instanceof NotExpression); Assert.assertTrue(e.isBool()); Assert.assertEquals(1, e.eval(0)); Assert.assertEquals(1, e.eval(1)); Assert.assertEquals(1, e.eval(2)); Assert.assertEquals("!(0)", e.toString()); } @Test public void testOrExpression2() throws RecognitionException, TokenStreamException, InvalidExpressionException { Expression e = parseExpression("0 || (1 || 0)"); Assert.assertNotNull(e); System.out.println(e); e.validate(); Assert.assertTrue(e instanceof OrExpression); Assert.assertTrue(e.isBool()); Assert.assertEquals(1, e.eval(0)); Assert.assertEquals(1, e.eval(1)); Assert.assertEquals(1, e.eval(2)); Assert.assertEquals("(0) || ((1) || (0))", e.toString()); } @Test public void testAndExpression() throws RecognitionException, TokenStreamException, InvalidExpressionException { Expression e = parseExpression("0 || 1 && 1"); Assert.assertNotNull(e); System.out.println(e); e.validate(); Assert.assertTrue(e instanceof OrExpression); Assert.assertTrue(e.isBool()); Assert.assertEquals(1, e.eval(0)); Assert.assertEquals(1, e.eval(1)); Assert.assertEquals(1, e.eval(2)); Assert.assertEquals("(0) || ((1) && (1))", e.toString()); } @Test public void testAndExpression2() throws RecognitionException, TokenStreamException, InvalidExpressionException { Expression e = parseExpression("0 || 1 && 0 || 0"); Assert.assertNotNull(e); System.out.println(e); e.validate(); Assert.assertTrue(e instanceof OrExpression); Assert.assertTrue(e.isBool()); Assert.assertEquals(0, e.eval(0)); Assert.assertEquals(0, e.eval(1)); Assert.assertEquals(0, e.eval(2)); Assert.assertEquals("((0) || ((1) && (0))) || (0)", e.toString()); } }