Author: dion Date: Mon Mar 20 23:29:02 2006 New Revision: 387450 URL: http://svn.apache.org/viewcvs?rev=387450&view=rev Log: Basic Implementation of bitwise or
Modified: jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseOrNode.java jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java jakarta/commons/proper/jexl/trunk/xdocs/changes.xml Modified: jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseOrNode.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseOrNode.java?rev=387450&r1=387449&r2=387450&view=diff ============================================================================== --- jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseOrNode.java (original) +++ jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseOrNode.java Mon Mar 20 23:29:02 2006 @@ -2,6 +2,17 @@ package org.apache.commons.jexl.parser; +import org.apache.commons.jexl.JexlContext; +import org.apache.commons.jexl.util.Coercion; + +/** + * Bitwise Or. Syntax: + * a | b + * Result is a Long + * @author Dion Gillard + * @since 1.0.1 + */ + public class ASTBitwiseOrNode extends SimpleNode { public ASTBitwiseOrNode(int id) { super(id); @@ -15,5 +26,18 @@ /** Accept the visitor. **/ public Object jjtAccept(ParserVisitor visitor, Object data) { return visitor.visit(this, data); + } + + /** + * @return a [EMAIL PROTECTED] Long} which is the bitwise or of the two operands. + */ + public Object value(JexlContext context) throws Exception + { + Object left = ((SimpleNode) jjtGetChild(0)).value(context); + Object right = ((SimpleNode) jjtGetChild(1)).value(context); + + Long l = left == null ? new Long(0) : Coercion.coerceLong(left); + Long r = right == null ? new Long(0) : Coercion.coerceLong(right); + return new Long(l.longValue() | r.longValue()); } } Modified: jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java?rev=387450&r1=387449&r2=387450&view=diff ============================================================================== --- jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java (original) +++ jakarta/commons/proper/jexl/trunk/src/test/org/apache/commons/jexl/BitwiseOperatorTest.java Mon Mar 20 23:29:02 2006 @@ -108,4 +108,51 @@ Object o = e.evaluate(jc); assertEquals("Result is wrong", new Long(-16), o); } + + public void testOrWithTwoNulls() throws Exception { + Expression e = ExpressionFactory.createExpression("null | null"); + JexlContext jc = JexlHelper.createContext(); + Object o = e.evaluate(jc); + assertEquals("Result is wrong", new Long(0), o); + } + + public void testOrWithLeftNull() throws Exception { + Expression e = ExpressionFactory.createExpression("null | 1"); + JexlContext jc = JexlHelper.createContext(); + Object o = e.evaluate(jc); + assertEquals("Result is wrong", new Long(1), o); + } + + public void testOrWithRightNull() throws Exception { + Expression e = ExpressionFactory.createExpression("1 | null"); + JexlContext jc = JexlHelper.createContext(); + Object o = e.evaluate(jc); + assertEquals("Result is wrong", new Long(1), o); + } + + public void testOrSimple() throws Exception { + Expression e = ExpressionFactory.createExpression("12 | 3"); + JexlContext jc = JexlHelper.createContext(); + Object o = e.evaluate(jc); + assertEquals("Result is wrong", new Long(15), o); + } + + public void testOrVariableNumberCoercion() throws Exception { + Expression e = ExpressionFactory.createExpression("x | y"); + JexlContext jc = JexlHelper.createContext(); + jc.getVars().put("x", new Integer(12)); + jc.getVars().put("y", new Short((short)3)); + Object o = e.evaluate(jc); + assertEquals("Result is wrong", new Long(15), o); + } + + public void testOrVariableStringCoercion() throws Exception { + Expression e = ExpressionFactory.createExpression("x | y"); + JexlContext jc = JexlHelper.createContext(); + jc.getVars().put("x", new Integer(12)); + jc.getVars().put("y", "3"); + Object o = e.evaluate(jc); + assertEquals("Result is wrong", new Long(15), o); + } + } Modified: jakarta/commons/proper/jexl/trunk/xdocs/changes.xml URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/xdocs/changes.xml?rev=387450&r1=387449&r2=387450&view=diff ============================================================================== --- jakarta/commons/proper/jexl/trunk/xdocs/changes.xml (original) +++ jakarta/commons/proper/jexl/trunk/xdocs/changes.xml Mon Mar 20 23:29:02 2006 @@ -25,7 +25,7 @@ </properties> <body> <release version="1.0.1-SNAPSHOT" date="in SVN"> - <action dev="dion" type="add">Added implementation for bitwise and operator, plus bitiwse complement.</action> + <action dev="dion" type="add">Added implementation for bitwise operators: and, complement, or.</action> <action dev="dion" type="add">Added implementation for the foreach statement.</action> <action dev="dion" type="add">Added implementation for the while statement.</action> <action dev="dion" type="add">Added implementation for block statements, e.g. curly braces containing multiple statements.</action> --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]