You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gr...@apache.org on 2009/06/16 06:33:00 UTC

svn commit: r785074 - in /commons/proper/jexl/branches/2.0/src: java/org/apache/commons/jexl/ java/org/apache/commons/jexl/parser/ java/org/apache/commons/jexl/util/ java/org/apache/commons/jexl/util/introspection/ test/org/apache/commons/jexl/ test/or...

Author: grobmeier
Date: Tue Jun 16 04:32:59 2009
New Revision: 785074

URL: http://svn.apache.org/viewvc?rev=785074&view=rev
Log:
added svn:eol-style native

Modified:
    commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/Arithmetic.java   (props changed)
    commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/Debugger.java   (props changed)
    commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/Interpreter.java   (props changed)
    commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/JexlArithmetic.java   (props changed)
    commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/JexlEngine.java   (props changed)
    commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/JexlException.java   (props changed)
    commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/parser/JEXLNode.java   (props changed)
    commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/parser/VisitorAdapter.java   (props changed)
    commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/ArrayListWrapper.java   (contents, props changed)
    commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/MapGetExecutor.java   (props changed)
    commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/introspection/IntrospectionUtils.java   (contents, props changed)
    commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ArithmeticTest.java   (contents, props changed)
    commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ArrayAccessTest.java   (contents, props changed)
    commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/AssignTest.java   (props changed)
    commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/MethodTest.java   (contents, props changed)
    commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ParseFailuresTest.java   (props changed)
    commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/util/introspection/MethodKeyTest.java   (props changed)

Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/Arithmetic.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/Debugger.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/Interpreter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/JexlArithmetic.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/JexlEngine.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/JexlException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/parser/JEXLNode.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/parser/VisitorAdapter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/ArrayListWrapper.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/ArrayListWrapper.java?rev=785074&r1=785073&r2=785074&view=diff
==============================================================================
--- commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/ArrayListWrapper.java (original)
+++ commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/ArrayListWrapper.java Tue Jun 16 04:32:59 2009
@@ -1,58 +1,58 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.jexl.util;
-
-import java.lang.reflect.Array;
-import java.util.AbstractList;
-
-/**
- * A class that wraps an array with a List interface.
- * 
- * @author Chris Schultz <chris@christopherschultz.net$gt;
- * @version $Revision$ $Date: 2006-04-14 19:40:41 $
- */
-public class ArrayListWrapper extends AbstractList {
-    /** the array to wrap. */
-    private Object array;
-
-    /**
-     * Create the wrapper.
-     * @param array {@link #array}
-     */
-    // CSOFF: HiddenField
-    public ArrayListWrapper(Object array) {
-        this.array = array;
-    }
-    // CSON: HiddenField
-
-    /** {@inheritDoc} */
-    public Object get(int index) {
-        return Array.get(array, index);
-    }
-
-    /** {@inheritDoc} */
-    public Object set(int index, Object element) {
-        Object old = get(index);
-        Array.set(array, index, element);
-        return old;
-    }
-
-    /** {@inheritDoc} */
-    public int size() {
-        return Array.getLength(array);
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.jexl.util;
+
+import java.lang.reflect.Array;
+import java.util.AbstractList;
+
+/**
+ * A class that wraps an array with a List interface.
+ * 
+ * @author Chris Schultz <chris@christopherschultz.net$gt;
+ * @version $Revision$ $Date: 2006-04-14 19:40:41 $
+ */
+public class ArrayListWrapper extends AbstractList {
+    /** the array to wrap. */
+    private Object array;
+
+    /**
+     * Create the wrapper.
+     * @param array {@link #array}
+     */
+    // CSOFF: HiddenField
+    public ArrayListWrapper(Object array) {
+        this.array = array;
+    }
+    // CSON: HiddenField
+
+    /** {@inheritDoc} */
+    public Object get(int index) {
+        return Array.get(array, index);
+    }
+
+    /** {@inheritDoc} */
+    public Object set(int index, Object element) {
+        Object old = get(index);
+        Array.set(array, index, element);
+        return old;
+    }
+
+    /** {@inheritDoc} */
+    public int size() {
+        return Array.getLength(array);
+    }
+}

Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/ArrayListWrapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/MapGetExecutor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/introspection/IntrospectionUtils.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/introspection/IntrospectionUtils.java?rev=785074&r1=785073&r2=785074&view=diff
==============================================================================
--- commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/introspection/IntrospectionUtils.java (original)
+++ commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/introspection/IntrospectionUtils.java Tue Jun 16 04:32:59 2009
@@ -1,172 +1,172 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.commons.jexl.util.introspection;
-
-/**
- * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
- * @author <a href="mailto:bob@werken.com">Bob McWhirter</a>
- * @author <a href="mailto:Christoph.Reck@dlr.de">Christoph Reck</a>
- * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
- * @author <a href="mailto:szegedia@freemail.hu">Attila Szegedi</a>
- * @author Nathan Bubna
- * @version $Id: IntrospectionUtils.java 476785 2006-11-19 10:06:21Z henning $
- */
-public class IntrospectionUtils {
-
-    /**
-     * Determines whether a type represented by a class object is
-     * convertible to another type represented by a class object using a
-     * method invocation conversion, treating object types of primitive
-     * types as if they were primitive types (that is, a Boolean actual
-     * parameter type matches boolean primitive formal type). This behavior
-     * is because this method is used to determine applicable methods for
-     * an actual parameter list, and primitive types are represented by
-     * their object duals in reflective method calls.
-     *
-     * @param formal         the formal parameter type to which the actual
-     *                       parameter type should be convertible
-     * @param actual         the actual parameter type.
-     * @param possibleVarArg whether or not we're dealing with the last parameter
-     *                       in the method declaration
-     * @return true if either formal type is assignable from actual type,
-     *         or formal is a primitive type and actual is its corresponding object
-     *         type or an object type of a primitive type that can be converted to
-     *         the formal type.
-     */
-    public static boolean isMethodInvocationConvertible(Class formal,
-                                                        Class actual,
-                                                        boolean possibleVarArg) {
-        /* if it's a null, it means the arg was null */
-        if (actual == null && !formal.isPrimitive()) {
-            return true;
-        }
-
-        /* Check for identity or widening reference conversion */
-        if (actual != null && formal.isAssignableFrom(actual)) {
-            return true;
-        }
-
-        // CSOFF: NeedBraces
-        /* Check for boxing with widening primitive conversion. Note that
-         * actual parameters are never primitives. */
-        if (formal.isPrimitive()) {
-            if (formal == Boolean.TYPE && actual == Boolean.class)
-                return true;
-            if (formal == Character.TYPE && actual == Character.class)
-                return true;
-            if (formal == Byte.TYPE && actual == Byte.class)
-                return true;
-            if (formal == Short.TYPE 
-                && (actual == Short.class || actual == Byte.class))
-                return true;
-            if (formal == Integer.TYPE 
-                && (actual == Integer.class || actual == Short.class 
-                    || actual == Byte.class))
-                return true;
-            if (formal == Long.TYPE 
-                && (actual == Long.class || actual == Integer.class 
-                    || actual == Short.class || actual == Byte.class))
-                return true;
-            if (formal == Float.TYPE 
-                && (actual == Float.class || actual == Long.class
-                    || actual == Integer.class || actual == Short.class
-                    || actual == Byte.class))
-                return true;
-            if (formal == Double.TYPE 
-                && (actual == Double.class || actual == Float.class
-                    || actual == Long.class || actual == Integer.class
-                    || actual == Short.class || actual == Byte.class))
-                return true;
-        }
-        // CSON: NeedBraces
-
-        /* Check for vararg conversion. */
-        if (possibleVarArg && formal.isArray()) {
-            if (actual.isArray()) {
-                actual = actual.getComponentType();
-            }
-            return isMethodInvocationConvertible(formal.getComponentType(),
-                    actual, false);
-        }
-        return false;
-    }
-
-    /**
-     * Determines whether a type represented by a class object is
-     * convertible to another type represented by a class object using a
-     * method invocation conversion, without matching object and primitive
-     * types. This method is used to determine the more specific type when
-     * comparing signatures of methods.
-     *
-     * @param formal         the formal parameter type to which the actual
-     *                       parameter type should be convertible
-     * @param actual         the actual parameter type.
-     * @param possibleVarArg whether or not we're dealing with the last parameter
-     *                       in the method declaration
-     * @return true if either formal type is assignable from actual type,
-     *         or formal and actual are both primitive types and actual can be
-     *         subject to widening conversion to formal.
-     */
-    public static boolean isStrictMethodInvocationConvertible(Class formal,
-                                                              Class actual,
-                                                              boolean possibleVarArg) {
-        /* we shouldn't get a null into, but if so */
-        if (actual == null && !formal.isPrimitive()) {
-            return true;
-        }
-
-        /* Check for identity or widening reference conversion */
-        if (formal.isAssignableFrom(actual)) {
-            return true;
-        }
-
-        // CSOFF: NeedBraces
-        /* Check for widening primitive conversion. */
-        if (formal.isPrimitive()) {
-            if (formal == Short.TYPE && (actual == Byte.TYPE))
-                return true;
-            if (formal == Integer.TYPE
-                && (actual == Short.TYPE || actual == Byte.TYPE))
-                return true;
-            if (formal == Long.TYPE
-                && (actual == Integer.TYPE || actual == Short.TYPE
-                    || actual == Byte.TYPE))
-                return true;
-            if (formal == Float.TYPE
-                && (actual == Long.TYPE || actual == Integer.TYPE
-                    || actual == Short.TYPE || actual == Byte.TYPE))
-                return true;
-            if (formal == Double.TYPE
-                && (actual == Float.TYPE || actual == Long.TYPE
-                    || actual == Integer.TYPE || actual == Short.TYPE
-                    || actual == Byte.TYPE))
-                return true;
-        }
-        // CSON: NeedBraces
-        
-        /* Check for vararg conversion. */
-        if (possibleVarArg && formal.isArray()) {
-            if (actual.isArray()) {
-                actual = actual.getComponentType();
-            }
-            return isStrictMethodInvocationConvertible(formal.getComponentType(),
-                    actual, false);
-        }
-        return false;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.jexl.util.introspection;
+
+/**
+ * @author <a href="mailto:jvanzyl@apache.org">Jason van Zyl</a>
+ * @author <a href="mailto:bob@werken.com">Bob McWhirter</a>
+ * @author <a href="mailto:Christoph.Reck@dlr.de">Christoph Reck</a>
+ * @author <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
+ * @author <a href="mailto:szegedia@freemail.hu">Attila Szegedi</a>
+ * @author Nathan Bubna
+ * @version $Id: IntrospectionUtils.java 476785 2006-11-19 10:06:21Z henning $
+ */
+public class IntrospectionUtils {
+
+    /**
+     * Determines whether a type represented by a class object is
+     * convertible to another type represented by a class object using a
+     * method invocation conversion, treating object types of primitive
+     * types as if they were primitive types (that is, a Boolean actual
+     * parameter type matches boolean primitive formal type). This behavior
+     * is because this method is used to determine applicable methods for
+     * an actual parameter list, and primitive types are represented by
+     * their object duals in reflective method calls.
+     *
+     * @param formal         the formal parameter type to which the actual
+     *                       parameter type should be convertible
+     * @param actual         the actual parameter type.
+     * @param possibleVarArg whether or not we're dealing with the last parameter
+     *                       in the method declaration
+     * @return true if either formal type is assignable from actual type,
+     *         or formal is a primitive type and actual is its corresponding object
+     *         type or an object type of a primitive type that can be converted to
+     *         the formal type.
+     */
+    public static boolean isMethodInvocationConvertible(Class formal,
+                                                        Class actual,
+                                                        boolean possibleVarArg) {
+        /* if it's a null, it means the arg was null */
+        if (actual == null && !formal.isPrimitive()) {
+            return true;
+        }
+
+        /* Check for identity or widening reference conversion */
+        if (actual != null && formal.isAssignableFrom(actual)) {
+            return true;
+        }
+
+        // CSOFF: NeedBraces
+        /* Check for boxing with widening primitive conversion. Note that
+         * actual parameters are never primitives. */
+        if (formal.isPrimitive()) {
+            if (formal == Boolean.TYPE && actual == Boolean.class)
+                return true;
+            if (formal == Character.TYPE && actual == Character.class)
+                return true;
+            if (formal == Byte.TYPE && actual == Byte.class)
+                return true;
+            if (formal == Short.TYPE 
+                && (actual == Short.class || actual == Byte.class))
+                return true;
+            if (formal == Integer.TYPE 
+                && (actual == Integer.class || actual == Short.class 
+                    || actual == Byte.class))
+                return true;
+            if (formal == Long.TYPE 
+                && (actual == Long.class || actual == Integer.class 
+                    || actual == Short.class || actual == Byte.class))
+                return true;
+            if (formal == Float.TYPE 
+                && (actual == Float.class || actual == Long.class
+                    || actual == Integer.class || actual == Short.class
+                    || actual == Byte.class))
+                return true;
+            if (formal == Double.TYPE 
+                && (actual == Double.class || actual == Float.class
+                    || actual == Long.class || actual == Integer.class
+                    || actual == Short.class || actual == Byte.class))
+                return true;
+        }
+        // CSON: NeedBraces
+
+        /* Check for vararg conversion. */
+        if (possibleVarArg && formal.isArray()) {
+            if (actual.isArray()) {
+                actual = actual.getComponentType();
+            }
+            return isMethodInvocationConvertible(formal.getComponentType(),
+                    actual, false);
+        }
+        return false;
+    }
+
+    /**
+     * Determines whether a type represented by a class object is
+     * convertible to another type represented by a class object using a
+     * method invocation conversion, without matching object and primitive
+     * types. This method is used to determine the more specific type when
+     * comparing signatures of methods.
+     *
+     * @param formal         the formal parameter type to which the actual
+     *                       parameter type should be convertible
+     * @param actual         the actual parameter type.
+     * @param possibleVarArg whether or not we're dealing with the last parameter
+     *                       in the method declaration
+     * @return true if either formal type is assignable from actual type,
+     *         or formal and actual are both primitive types and actual can be
+     *         subject to widening conversion to formal.
+     */
+    public static boolean isStrictMethodInvocationConvertible(Class formal,
+                                                              Class actual,
+                                                              boolean possibleVarArg) {
+        /* we shouldn't get a null into, but if so */
+        if (actual == null && !formal.isPrimitive()) {
+            return true;
+        }
+
+        /* Check for identity or widening reference conversion */
+        if (formal.isAssignableFrom(actual)) {
+            return true;
+        }
+
+        // CSOFF: NeedBraces
+        /* Check for widening primitive conversion. */
+        if (formal.isPrimitive()) {
+            if (formal == Short.TYPE && (actual == Byte.TYPE))
+                return true;
+            if (formal == Integer.TYPE
+                && (actual == Short.TYPE || actual == Byte.TYPE))
+                return true;
+            if (formal == Long.TYPE
+                && (actual == Integer.TYPE || actual == Short.TYPE
+                    || actual == Byte.TYPE))
+                return true;
+            if (formal == Float.TYPE
+                && (actual == Long.TYPE || actual == Integer.TYPE
+                    || actual == Short.TYPE || actual == Byte.TYPE))
+                return true;
+            if (formal == Double.TYPE
+                && (actual == Float.TYPE || actual == Long.TYPE
+                    || actual == Integer.TYPE || actual == Short.TYPE
+                    || actual == Byte.TYPE))
+                return true;
+        }
+        // CSON: NeedBraces
+        
+        /* Check for vararg conversion. */
+        if (possibleVarArg && formal.isArray()) {
+            if (actual.isArray()) {
+                actual = actual.getComponentType();
+            }
+            return isStrictMethodInvocationConvertible(formal.getComponentType(),
+                    actual, false);
+        }
+        return false;
+    }
+}

Propchange: commons/proper/jexl/branches/2.0/src/java/org/apache/commons/jexl/util/introspection/IntrospectionUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ArithmeticTest.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ArithmeticTest.java?rev=785074&r1=785073&r2=785074&view=diff
==============================================================================
--- commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ArithmeticTest.java (original)
+++ commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ArithmeticTest.java Tue Jun 16 04:32:59 2009
@@ -1,115 +1,115 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.jexl;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.apache.commons.jexl.junit.Asserter;
-
-import junit.framework.TestCase;
-
-public class ArithmeticTest extends TestCase {
-    private Asserter asserter;
-
-    public void setUp() {
-        asserter = new Asserter();
-    }
-
-    public void testBigDecimal() throws Exception {
-        asserter.setVariable("left", new BigDecimal(2));
-        asserter.setVariable("right", new BigDecimal(6));
-        asserter.assertExpression("left + right", new BigDecimal(8));
-        asserter.assertExpression("right - left", new BigDecimal(4));
-        asserter.assertExpression("right * left", new BigDecimal(12));
-        asserter.assertExpression("right / left", new BigDecimal(3));
-        asserter.assertExpression("right % left", new BigDecimal(0));
-    }
-
-    public void testBigInteger() throws Exception {
-        asserter.setVariable("left", new BigInteger("2"));
-        asserter.setVariable("right", new BigInteger("6"));
-        asserter.assertExpression("left + right", new BigInteger("8"));
-        asserter.assertExpression("right - left", new BigInteger("4"));
-        asserter.assertExpression("right * left", new BigInteger("12"));
-        asserter.assertExpression("right / left", new BigInteger("3"));
-        asserter.assertExpression("right % left", new BigInteger("0"));
-    }
-
-    /**
-     * test some simple mathematical calculations
-     */
-    public void testUnaryMinus() throws Exception {
-        asserter.setVariable("aByte", new Byte((byte) 1));
-        asserter.setVariable("aShort", new Short((short) 2));
-        asserter.setVariable("anInteger", new Integer(3));
-        asserter.setVariable("aLong", new Long(4));
-        asserter.setVariable("aFloat", new Float(5.5));
-        asserter.setVariable("aDouble", new Double(6.6));
-        asserter.setVariable("aBigInteger", new BigInteger("7"));
-        asserter.setVariable("aBigDecimal", new BigDecimal("8.8"));
-
-        asserter.assertExpression("-3", new Integer("-3"));
-        asserter.assertExpression("-3.0", new Float("-3.0"));
-        asserter.assertExpression("-aByte", new Byte((byte) -1));
-        asserter.assertExpression("-aShort", new Short((short) -2));
-        asserter.assertExpression("-anInteger", new Integer(-3));
-        asserter.assertExpression("-aLong", new Long(-4));
-        asserter.assertExpression("-aFloat", new Float(-5.5));
-        asserter.assertExpression("-aDouble", new Double(-6.6));
-        asserter.assertExpression("-aBigInteger", new BigInteger("-7"));
-        asserter.assertExpression("-aBigDecimal", new BigDecimal("-8.8"));
-    }
-
-    /**
-     * test some simple mathematical calculations
-     */
-    public void testCalculations() throws Exception {
-
-        asserter.setVariable("foo", new Integer(2));
-
-        asserter.assertExpression("foo + 2", new Long(4));
-        asserter.assertExpression("3 + 3", new Long(6));
-        asserter.assertExpression("3 + 3 + foo", new Long(8));
-        asserter.assertExpression("3 * 3", new Long(9));
-        asserter.assertExpression("3 * 3 + foo", new Long(11));
-        asserter.assertExpression("3 * 3 - foo", new Long(7));
-
-        /*
-         * test some floaty stuff
-         */
-        asserter.assertExpression("3 * \"3.0\"", new Double(9));
-        asserter.assertExpression("3 * 3.0", new Double(9));
-
-        /*
-         * test / and %
-         */
-        asserter.assertExpression("6 / 3", new Double(6 / 3));
-        asserter.assertExpression("6.4 / 3", new Double(6.4 / 3));
-        asserter.assertExpression("0 / 3", new Double(0 / 3));
-        asserter.assertExpression("3 / 0", new Double(0));
-        asserter.assertExpression("4 % 3", new Long(1));
-        asserter.assertExpression("4.8 % 3", new Double(4.8 % 3));
-
-        /*
-         * test new null coersion
-         */
-        asserter.setVariable("imanull", null);
-        asserter.assertExpression("imanull + 2", new Long(2));
-        asserter.assertExpression("imanull + imanull", new Long(0));
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.jexl;
+
+import java.math.BigDecimal;
+import java.math.BigInteger;
+
+import org.apache.commons.jexl.junit.Asserter;
+
+import junit.framework.TestCase;
+
+public class ArithmeticTest extends TestCase {
+    private Asserter asserter;
+
+    public void setUp() {
+        asserter = new Asserter();
+    }
+
+    public void testBigDecimal() throws Exception {
+        asserter.setVariable("left", new BigDecimal(2));
+        asserter.setVariable("right", new BigDecimal(6));
+        asserter.assertExpression("left + right", new BigDecimal(8));
+        asserter.assertExpression("right - left", new BigDecimal(4));
+        asserter.assertExpression("right * left", new BigDecimal(12));
+        asserter.assertExpression("right / left", new BigDecimal(3));
+        asserter.assertExpression("right % left", new BigDecimal(0));
+    }
+
+    public void testBigInteger() throws Exception {
+        asserter.setVariable("left", new BigInteger("2"));
+        asserter.setVariable("right", new BigInteger("6"));
+        asserter.assertExpression("left + right", new BigInteger("8"));
+        asserter.assertExpression("right - left", new BigInteger("4"));
+        asserter.assertExpression("right * left", new BigInteger("12"));
+        asserter.assertExpression("right / left", new BigInteger("3"));
+        asserter.assertExpression("right % left", new BigInteger("0"));
+    }
+
+    /**
+     * test some simple mathematical calculations
+     */
+    public void testUnaryMinus() throws Exception {
+        asserter.setVariable("aByte", new Byte((byte) 1));
+        asserter.setVariable("aShort", new Short((short) 2));
+        asserter.setVariable("anInteger", new Integer(3));
+        asserter.setVariable("aLong", new Long(4));
+        asserter.setVariable("aFloat", new Float(5.5));
+        asserter.setVariable("aDouble", new Double(6.6));
+        asserter.setVariable("aBigInteger", new BigInteger("7"));
+        asserter.setVariable("aBigDecimal", new BigDecimal("8.8"));
+
+        asserter.assertExpression("-3", new Integer("-3"));
+        asserter.assertExpression("-3.0", new Float("-3.0"));
+        asserter.assertExpression("-aByte", new Byte((byte) -1));
+        asserter.assertExpression("-aShort", new Short((short) -2));
+        asserter.assertExpression("-anInteger", new Integer(-3));
+        asserter.assertExpression("-aLong", new Long(-4));
+        asserter.assertExpression("-aFloat", new Float(-5.5));
+        asserter.assertExpression("-aDouble", new Double(-6.6));
+        asserter.assertExpression("-aBigInteger", new BigInteger("-7"));
+        asserter.assertExpression("-aBigDecimal", new BigDecimal("-8.8"));
+    }
+
+    /**
+     * test some simple mathematical calculations
+     */
+    public void testCalculations() throws Exception {
+
+        asserter.setVariable("foo", new Integer(2));
+
+        asserter.assertExpression("foo + 2", new Long(4));
+        asserter.assertExpression("3 + 3", new Long(6));
+        asserter.assertExpression("3 + 3 + foo", new Long(8));
+        asserter.assertExpression("3 * 3", new Long(9));
+        asserter.assertExpression("3 * 3 + foo", new Long(11));
+        asserter.assertExpression("3 * 3 - foo", new Long(7));
+
+        /*
+         * test some floaty stuff
+         */
+        asserter.assertExpression("3 * \"3.0\"", new Double(9));
+        asserter.assertExpression("3 * 3.0", new Double(9));
+
+        /*
+         * test / and %
+         */
+        asserter.assertExpression("6 / 3", new Double(6 / 3));
+        asserter.assertExpression("6.4 / 3", new Double(6.4 / 3));
+        asserter.assertExpression("0 / 3", new Double(0 / 3));
+        asserter.assertExpression("3 / 0", new Double(0));
+        asserter.assertExpression("4 % 3", new Long(1));
+        asserter.assertExpression("4.8 % 3", new Double(4.8 % 3));
+
+        /*
+         * test new null coersion
+         */
+        asserter.setVariable("imanull", null);
+        asserter.assertExpression("imanull + 2", new Long(2));
+        asserter.assertExpression("imanull + imanull", new Long(0));
+    }
+}

Propchange: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ArithmeticTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ArrayAccessTest.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ArrayAccessTest.java?rev=785074&r1=785073&r2=785074&view=diff
==============================================================================
--- commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ArrayAccessTest.java (original)
+++ commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ArrayAccessTest.java Tue Jun 16 04:32:59 2009
@@ -1,148 +1,148 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.jexl;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.commons.jexl.junit.Asserter;
-
-import junit.framework.TestCase;
-
-/**
- * Tests for array access operator []
- * 
- * @since 2.0
- */
-public class ArrayAccessTest extends TestCase {
-
-    private Asserter asserter;
-
-    protected static final String GET_METHOD_STRING = "GetMethod string";
-    protected static final String[] GET_METHOD_ARRAY =
-        new String[] { "One", "Two", "Three" };
-
-    protected static final String[][] GET_METHOD_ARRAY2 =
-        new String[][] { {"One", "Two", "Three"},{"Four", "Five", "Six"} };
-
-    public void setUp() {
-        asserter = new Asserter();
-    }
-
-    /**
-     * test simple array access
-     */
-    public void testArrayAccess() throws Exception {
-
-        /*
-         * test List access
-         */
-
-        List l = new ArrayList();
-        l.add(new Integer(1));
-        l.add(new Integer(2));
-        l.add(new Integer(3));
-
-        asserter.setVariable("list", l);
-
-        asserter.assertExpression("list[1]", new Integer(2));
-        asserter.assertExpression("list[1+1]", new Integer(3));
-        asserter.setVariable("loc", new Integer(1));
-        asserter.assertExpression("list[loc+1]", new Integer(3));
-
-        /*
-         * test array access
-         */
-
-        String[] args = { "hello", "there" };
-        asserter.setVariable("array", args);
-        asserter.assertExpression("array[0]", "hello");
-
-        /*
-         * to think that this was an intentional syntax...
-         */
-        asserter.assertExpression("array.0", "hello");
-
-        /*
-         * test map access
-         */
-        Map m = new HashMap();
-        m.put("foo", "bar");
-
-        asserter.setVariable("map", m);
-        asserter.setVariable("key", "foo");
-
-        asserter.assertExpression("map[\"foo\"]", "bar");
-        asserter.assertExpression("map[key]", "bar");
-
-        /*
-         * test bean access
-         */
-        asserter.setVariable("foo", new Foo());
-        asserter.assertExpression("foo[\"bar\"]", GET_METHOD_STRING);
-        asserter.assertExpression("foo[\"bar\"] == foo.bar", Boolean.TRUE);
-    }
-
-    /**
-     * test some simple double array lookups
-     */
-    public void testDoubleArrays() throws Exception {
-        Object[][] foo = new Object[2][2];
-        foo[0][0] = "one";
-        foo[0][1] = "two";
-
-        asserter.setVariable("foo", foo);
-
-        asserter.assertExpression("foo[0][1]", "two");
-    }
-
-    public void testArrayProperty() throws Exception {
-        Foo foo = new Foo();
-
-        asserter.setVariable("foo", foo);
-
-        asserter.assertExpression("foo.array[1]", GET_METHOD_ARRAY[1]);
-        asserter.assertExpression("foo.array.1", GET_METHOD_ARRAY[1]);
-        asserter.assertExpression("foo.array2[1][1]", GET_METHOD_ARRAY2[1][1]);
-        // asserter.assertExpression("foo.array2.1.1", GET_METHOD_ARRAY2[1][1]);
-    }
-    
-    // This is JEXL-26
-    public void testArrayAndDottedConflict() throws Exception {
-        Object[] objects = new Object[] {"an", "array", new Long(0)};
-        
-        asserter.setVariable("objects", objects);
-        asserter.setVariable("status", "Enabled");
-        asserter.assertExpression("objects[1].status", null);
-        
-        asserter.setVariable("base.status", "Ok");
-        asserter.assertExpression("base.objects[1].status", null);
-    }
-
-    public void testArrayMethods() throws Exception {
-        Object[] objects = new Object[] {"an", "array", new Long(0)};
-        
-        asserter.setVariable("objects", objects);
-        asserter.assertExpression("objects.get(1)", "array");
-        asserter.assertExpression("objects.size()", new Integer(3));
-        // setting an index returns the old value
-        asserter.assertExpression("objects.set(1, 'dion')", "array");
-        asserter.assertExpression("objects[1]", "dion");
-    }
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.jexl;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.jexl.junit.Asserter;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for array access operator []
+ * 
+ * @since 2.0
+ */
+public class ArrayAccessTest extends TestCase {
+
+    private Asserter asserter;
+
+    protected static final String GET_METHOD_STRING = "GetMethod string";
+    protected static final String[] GET_METHOD_ARRAY =
+        new String[] { "One", "Two", "Three" };
+
+    protected static final String[][] GET_METHOD_ARRAY2 =
+        new String[][] { {"One", "Two", "Three"},{"Four", "Five", "Six"} };
+
+    public void setUp() {
+        asserter = new Asserter();
+    }
+
+    /**
+     * test simple array access
+     */
+    public void testArrayAccess() throws Exception {
+
+        /*
+         * test List access
+         */
+
+        List l = new ArrayList();
+        l.add(new Integer(1));
+        l.add(new Integer(2));
+        l.add(new Integer(3));
+
+        asserter.setVariable("list", l);
+
+        asserter.assertExpression("list[1]", new Integer(2));
+        asserter.assertExpression("list[1+1]", new Integer(3));
+        asserter.setVariable("loc", new Integer(1));
+        asserter.assertExpression("list[loc+1]", new Integer(3));
+
+        /*
+         * test array access
+         */
+
+        String[] args = { "hello", "there" };
+        asserter.setVariable("array", args);
+        asserter.assertExpression("array[0]", "hello");
+
+        /*
+         * to think that this was an intentional syntax...
+         */
+        asserter.assertExpression("array.0", "hello");
+
+        /*
+         * test map access
+         */
+        Map m = new HashMap();
+        m.put("foo", "bar");
+
+        asserter.setVariable("map", m);
+        asserter.setVariable("key", "foo");
+
+        asserter.assertExpression("map[\"foo\"]", "bar");
+        asserter.assertExpression("map[key]", "bar");
+
+        /*
+         * test bean access
+         */
+        asserter.setVariable("foo", new Foo());
+        asserter.assertExpression("foo[\"bar\"]", GET_METHOD_STRING);
+        asserter.assertExpression("foo[\"bar\"] == foo.bar", Boolean.TRUE);
+    }
+
+    /**
+     * test some simple double array lookups
+     */
+    public void testDoubleArrays() throws Exception {
+        Object[][] foo = new Object[2][2];
+        foo[0][0] = "one";
+        foo[0][1] = "two";
+
+        asserter.setVariable("foo", foo);
+
+        asserter.assertExpression("foo[0][1]", "two");
+    }
+
+    public void testArrayProperty() throws Exception {
+        Foo foo = new Foo();
+
+        asserter.setVariable("foo", foo);
+
+        asserter.assertExpression("foo.array[1]", GET_METHOD_ARRAY[1]);
+        asserter.assertExpression("foo.array.1", GET_METHOD_ARRAY[1]);
+        asserter.assertExpression("foo.array2[1][1]", GET_METHOD_ARRAY2[1][1]);
+        // asserter.assertExpression("foo.array2.1.1", GET_METHOD_ARRAY2[1][1]);
+    }
+    
+    // This is JEXL-26
+    public void testArrayAndDottedConflict() throws Exception {
+        Object[] objects = new Object[] {"an", "array", new Long(0)};
+        
+        asserter.setVariable("objects", objects);
+        asserter.setVariable("status", "Enabled");
+        asserter.assertExpression("objects[1].status", null);
+        
+        asserter.setVariable("base.status", "Ok");
+        asserter.assertExpression("base.objects[1].status", null);
+    }
+
+    public void testArrayMethods() throws Exception {
+        Object[] objects = new Object[] {"an", "array", new Long(0)};
+        
+        asserter.setVariable("objects", objects);
+        asserter.assertExpression("objects.get(1)", "array");
+        asserter.assertExpression("objects.size()", new Integer(3));
+        // setting an index returns the old value
+        asserter.assertExpression("objects.set(1, 'dion')", "array");
+        asserter.assertExpression("objects[1]", "dion");
+    }
 }
\ No newline at end of file

Propchange: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ArrayAccessTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/AssignTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/MethodTest.java
URL: http://svn.apache.org/viewvc/commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/MethodTest.java?rev=785074&r1=785073&r2=785074&view=diff
==============================================================================
--- commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/MethodTest.java (original)
+++ commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/MethodTest.java Tue Jun 16 04:32:59 2009
@@ -1,88 +1,88 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.commons.jexl;
-
-import org.apache.commons.jexl.junit.Asserter;
-
-import junit.framework.TestCase;
-
-/**
- * Tests for calling methods on objects
- * 
- * @since 2.0
- */
-public class MethodTest extends TestCase {
-
-    private Asserter asserter;
-
-    private static final String METHOD_STRING = "Method string";
-
-    public static class TestClass {
-        public String testVarArgs(Integer[] args) {
-            return "Test";
-        }
-    }
-
-    public void setUp() {
-        asserter = new Asserter();
-    }
-
-    public void testCallVarArgMethod() throws Exception {
-        asserter.setVariable("test", new TestClass());
-        asserter.assertExpression("test.testVarArgs(1,2,3,4,5)", "Test");
-    }
-
-    /**
-     * test a simple method expression
-     */
-    public void testMethod() throws Exception {
-        // tests a simple method expression
-        asserter.setVariable("foo", new Foo());
-        asserter.assertExpression("foo.bar()", METHOD_STRING);
-    }
-
-    public void testMulti() throws Exception {
-        asserter.setVariable("foo", new Foo());
-        asserter.assertExpression("foo.innerFoo.bar()", METHOD_STRING);
-    }
-
-    /**
-     * test some String method calls
-     */
-    public void testStringMethods() throws Exception {
-        asserter.setVariable("foo", "abcdef");
-        asserter.assertExpression("foo.substring(3)", "def");
-        asserter.assertExpression("foo.substring(0,(size(foo)-3))", "abc");
-        asserter.assertExpression("foo.substring(0,size(foo)-3)", "abc");
-        asserter.assertExpression("foo.substring(0,foo.length()-3)", "abc");
-        asserter.assertExpression("foo.substring(0, 1+1)", "ab");
-    }
-
-    /**
-     * Ensures static methods on objects can be called.
-     */
-    public void testStaticMethodInvocation() throws Exception {
-        asserter.setVariable("aBool", Boolean.FALSE);
-        asserter.assertExpression("aBool.valueOf('true')", Boolean.TRUE);
-    }
-
-    public void testStaticMethodInvocationOnClasses() throws Exception {
-        asserter.setVariable("Boolean", Boolean.class);
-        asserter.assertExpression("Boolean.valueOf('true')", Boolean.TRUE);
-    }
-
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.jexl;
+
+import org.apache.commons.jexl.junit.Asserter;
+
+import junit.framework.TestCase;
+
+/**
+ * Tests for calling methods on objects
+ * 
+ * @since 2.0
+ */
+public class MethodTest extends TestCase {
+
+    private Asserter asserter;
+
+    private static final String METHOD_STRING = "Method string";
+
+    public static class TestClass {
+        public String testVarArgs(Integer[] args) {
+            return "Test";
+        }
+    }
+
+    public void setUp() {
+        asserter = new Asserter();
+    }
+
+    public void testCallVarArgMethod() throws Exception {
+        asserter.setVariable("test", new TestClass());
+        asserter.assertExpression("test.testVarArgs(1,2,3,4,5)", "Test");
+    }
+
+    /**
+     * test a simple method expression
+     */
+    public void testMethod() throws Exception {
+        // tests a simple method expression
+        asserter.setVariable("foo", new Foo());
+        asserter.assertExpression("foo.bar()", METHOD_STRING);
+    }
+
+    public void testMulti() throws Exception {
+        asserter.setVariable("foo", new Foo());
+        asserter.assertExpression("foo.innerFoo.bar()", METHOD_STRING);
+    }
+
+    /**
+     * test some String method calls
+     */
+    public void testStringMethods() throws Exception {
+        asserter.setVariable("foo", "abcdef");
+        asserter.assertExpression("foo.substring(3)", "def");
+        asserter.assertExpression("foo.substring(0,(size(foo)-3))", "abc");
+        asserter.assertExpression("foo.substring(0,size(foo)-3)", "abc");
+        asserter.assertExpression("foo.substring(0,foo.length()-3)", "abc");
+        asserter.assertExpression("foo.substring(0, 1+1)", "ab");
+    }
+
+    /**
+     * Ensures static methods on objects can be called.
+     */
+    public void testStaticMethodInvocation() throws Exception {
+        asserter.setVariable("aBool", Boolean.FALSE);
+        asserter.assertExpression("aBool.valueOf('true')", Boolean.TRUE);
+    }
+
+    public void testStaticMethodInvocationOnClasses() throws Exception {
+        asserter.setVariable("Boolean", Boolean.class);
+        asserter.assertExpression("Boolean.valueOf('true')", Boolean.TRUE);
+    }
+
 }
\ No newline at end of file

Propchange: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/MethodTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/ParseFailuresTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: commons/proper/jexl/branches/2.0/src/test/org/apache/commons/jexl/util/introspection/MethodKeyTest.java
------------------------------------------------------------------------------
    svn:eol-style = native