Author: dion Date: Mon Mar 20 23:34:40 2006 New Revision: 387452 URL: http://svn.apache.org/viewcvs?rev=387452&view=rev Log: Basic Implementation of bitwise xor
Modified: jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseXorNode.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/ASTBitwiseXorNode.java URL: http://svn.apache.org/viewcvs/jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseXorNode.java?rev=387452&r1=387451&r2=387452&view=diff ============================================================================== --- jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseXorNode.java (original) +++ jakarta/commons/proper/jexl/trunk/src/java/org/apache/commons/jexl/parser/ASTBitwiseXorNode.java Mon Mar 20 23:34:40 2006 @@ -2,6 +2,16 @@ 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 ASTBitwiseXorNode extends SimpleNode { public ASTBitwiseXorNode(int id) { super(id); @@ -15,5 +25,17 @@ /** Accept the visitor. **/ public Object jjtAccept(ParserVisitor visitor, Object data) { return visitor.visit(this, data); + } + /** + * @return a [EMAIL PROTECTED] Long} which is the bitwise xor 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=387452&r1=387451&r2=387452&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:34:40 2006 @@ -155,4 +155,49 @@ assertEquals("Result is wrong", new Long(15), o); } + public void testXorWithTwoNulls() 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 testXorWithLeftNull() 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 testXorWithRightNull() 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 testXorSimple() throws Exception { + Expression e = ExpressionFactory.createExpression("1 ^ 3"); + JexlContext jc = JexlHelper.createContext(); + Object o = e.evaluate(jc); + assertEquals("Result is wrong", new Long(2), o); + } + + public void testXorVariableNumberCoercion() throws Exception { + Expression e = ExpressionFactory.createExpression("x ^ y"); + JexlContext jc = JexlHelper.createContext(); + jc.getVars().put("x", new Integer(1)); + jc.getVars().put("y", new Short((short)3)); + Object o = e.evaluate(jc); + assertEquals("Result is wrong", new Long(2), o); + } + + public void testXorVariableStringCoercion() throws Exception { + Expression e = ExpressionFactory.createExpression("x ^ y"); + JexlContext jc = JexlHelper.createContext(); + jc.getVars().put("x", new Integer(1)); + jc.getVars().put("y", "3"); + Object o = e.evaluate(jc); + assertEquals("Result is wrong", new Long(2), 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=387452&r1=387451&r2=387452&view=diff ============================================================================== --- jakarta/commons/proper/jexl/trunk/xdocs/changes.xml (original) +++ jakarta/commons/proper/jexl/trunk/xdocs/changes.xml Mon Mar 20 23:34:40 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 operators: and, complement, or.</action> + <action dev="dion" type="add">Added implementation for bitwise operators: and, complement, or, xor.</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]