Author: henrib
Date: Fri Jun 26 10:23:51 2015
New Revision: 1687737

URL: http://svn.apache.org/r1687737
Log:
JEXL:
Added test on ranges;
Issues updated

Added:
    
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/internal/RangeTest.java
   (with props)
Modified:
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/IntegerRange.java
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/LongRange.java
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java
    
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/ArithmeticOperatorTest.java
    
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/IssuesTest.java
    
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/JXLTTest.java

Modified: 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/IntegerRange.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/IntegerRange.java?rev=1687737&r1=1687736&r2=1687737&view=diff
==============================================================================
--- 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/IntegerRange.java
 (original)
+++ 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/IntegerRange.java
 Fri Jun 26 10:23:51 2015
@@ -19,6 +19,7 @@ package org.apache.commons.jexl3.interna
 import java.lang.reflect.Array;
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.NoSuchElementException;
 
 /**
  * A range of integers.
@@ -45,6 +46,32 @@ public class IntegerRange implements Col
     }
 
     @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 13 * hash + this.low;
+        hash = 13 * hash + this.high;
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final IntegerRange other = (IntegerRange) obj;
+        if (this.low != other.low) {
+            return false;
+        }
+        if (this.high != other.high) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
     public Iterator<Integer> iterator() {
         return new IntegerIterator(low, high);
     }
@@ -176,7 +203,7 @@ class IntegerIterator implements Iterato
             cursor += 1;
             return Integer.valueOf(next);
         } else {
-            return null;
+            throw new NoSuchElementException();
         }
     }
 

Modified: 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/LongRange.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/LongRange.java?rev=1687737&r1=1687736&r2=1687737&view=diff
==============================================================================
--- 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/LongRange.java
 (original)
+++ 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/LongRange.java
 Fri Jun 26 10:23:51 2015
@@ -47,6 +47,32 @@ public class LongRange implements Collec
     }
 
     @Override
+    public int hashCode() {
+        int hash = 3;
+        hash = 41 * hash + (int) (this.low ^ (this.low >>> 32));
+        hash = 41 * hash + (int) (this.high ^ (this.high >>> 32));
+        return hash;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        final LongRange other = (LongRange) obj;
+        if (this.low != other.low) {
+            return false;
+        }
+        if (this.high != other.high) {
+            return false;
+        }
+        return true;
+    }
+
+    @Override
     public Iterator<Long> iterator() {
         return new LongIterator(low, high);
     }

Modified: 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java?rev=1687737&r1=1687736&r2=1687737&view=diff
==============================================================================
--- 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java
 (original)
+++ 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/TemplateEngine.java
 Fri Jun 26 10:23:51 2015
@@ -105,7 +105,7 @@ public final class TemplateEngine extend
      * A helper class to build expressions.
      * Keeps count of sub-expressions by type.
      */
-    private static class ExpressionBuilder {
+    private static final class ExpressionBuilder {
         /** Per TemplateExpression type counters. */
         private final int[] counts;
         /** The list of expressions. */
@@ -115,7 +115,7 @@ public final class TemplateEngine extend
          * Creates a builder.
          * @param size the initial TemplateExpression array size
          */
-        ExpressionBuilder(int size) {
+        private ExpressionBuilder(int size) {
             counts = new int[]{0, 0, 0};
             expressions = new ArrayList<TemplateExpression>(size <= 0 ? 3 : 
size);
         }
@@ -124,32 +124,48 @@ public final class TemplateEngine extend
          * Adds an TemplateExpression to the list of expressions, maintain 
per-type counts.
          * @param expr the TemplateExpression to add
          */
-        void add(TemplateExpression expr) {
+        private void add(TemplateExpression expr) {
             counts[expr.getType().index] += 1;
             expressions.add(expr);
         }
 
+        @Override
+        public String toString() {
+            return toString(new StringBuilder()).toString();
+        }
+
+        /**
+         * Base for to-string.
+         * @param error the builder to fill
+         * @return the builder
+         */
+        private StringBuilder toString(StringBuilder error) {
+            error.append("exprs{");
+            error.append(expressions.size());
+            error.append(", constant:");
+            error.append(counts[ExpressionType.CONSTANT.index]);
+            error.append(", immediate:");
+            error.append(counts[ExpressionType.IMMEDIATE.index]);
+            error.append(", deferred:");
+            error.append(counts[ExpressionType.DEFERRED.index]);
+            error.append("}");
+            return error;
+        }
+
         /**
          * Builds an TemplateExpression from a source, performs checks.
          * @param el     the unified el instance
          * @param source the source TemplateExpression
          * @return an TemplateExpression
          */
-        TemplateExpression build(TemplateEngine el, TemplateExpression source) 
{
+        private TemplateExpression build(TemplateEngine el, TemplateExpression 
source) {
             int sum = 0;
             for (int count : counts) {
                 sum += count;
             }
             if (expressions.size() != sum) {
-                StringBuilder error = new StringBuilder("parsing algorithm 
error, exprs: ");
-                error.append(expressions.size());
-                error.append(", constant:");
-                error.append(counts[ExpressionType.CONSTANT.index]);
-                error.append(", immediate:");
-                error.append(counts[ExpressionType.IMMEDIATE.index]);
-                error.append(", deferred:");
-                error.append(counts[ExpressionType.DEFERRED.index]);
-                throw new IllegalStateException(error.toString());
+                StringBuilder error = new StringBuilder("parsing algorithm 
error: ");
+                throw new IllegalStateException(toString(error).toString());
             }
             // if only one sub-expr, no need to create a composite
             if (expressions.size() == 1) {
@@ -239,6 +255,11 @@ public final class TemplateEngine extend
             return Collections.emptySet();
         }
 
+        @Override
+        public final TemplateExpression getSource() {
+            return source;
+        }
+
         /**
          * Fills up the list of variables accessed by this unified expression.
          * @param collector the variable collector
@@ -249,14 +270,25 @@ public final class TemplateEngine extend
 
         @Override
         public final TemplateExpression prepare(JexlContext context) {
-            try {
                 Scope.Frame frame = context instanceof TemplateContext
                                     ? ((TemplateContext) context).getFrame()
                                     : null;
+                return prepare(frame, context);
+        }
+
+        /**
+         * Prepares this expression.
+         * @param frame the frame storing parameters and local variables
+         * @param context the context storing global variables
+         * @return the expression value
+         * @throws JexlException
+         */
+        protected final TemplateExpression prepare(Scope.Frame frame, 
JexlContext context) {
+            try {
                 Interpreter interpreter = jexl.createInterpreter(context, 
frame);
                 return prepare(interpreter);
             } catch (JexlException xjexl) {
-                Exception xuel = createException(xjexl.getInfo(), "prepare", 
this, xjexl);
+                JexlException xuel = createException(xjexl.getInfo(), 
"prepare", this, xjexl);
                 if (jexl.isSilent()) {
                     jexl.logger.warn(xuel.getMessage(), xuel.getCause());
                     return null;
@@ -265,16 +297,37 @@ public final class TemplateEngine extend
             }
         }
 
+        /**
+         * Prepares a sub-expression for interpretation.
+         * @param interpreter a JEXL interpreter
+         * @return a prepared unified expression
+         * @throws JexlException (only for nested and composite)
+         */
+        protected TemplateExpression prepare(Interpreter interpreter) {
+            return this;
+        }
+
         @Override
         public final Object evaluate(JexlContext context) {
-            try {
                 Scope.Frame frame = context instanceof TemplateContext
                                     ? ((TemplateContext) context).getFrame()
                                     : null;
+                return evaluate(frame, context);
+        }
+
+        /**
+         * Evaluates this expression.
+         * @param frame the frame storing parameters and local variables
+         * @param context the context storing global variables
+         * @return the expression value
+         * @throws JexlException
+         */
+        protected final Object evaluate(Scope.Frame frame, JexlContext 
context) {
+            try {
                 Interpreter interpreter = jexl.createInterpreter(context, 
frame);
                 return evaluate(interpreter);
             } catch (JexlException xjexl) {
-                Exception xuel = createException(xjexl.getInfo(), "prepare", 
this, xjexl);
+                JexlException xuel = createException(xjexl.getInfo(), 
"prepare", this, xjexl);
                 if (jexl.isSilent()) {
                     jexl.logger.warn(xuel.getMessage(), xuel.getCause());
                     return null;
@@ -283,21 +336,6 @@ public final class TemplateEngine extend
             }
         }
 
-        @Override
-        public final TemplateExpression getSource() {
-            return source;
-        }
-
-        /**
-         * Prepares a sub-expression for interpretation.
-         * @param interpreter a JEXL interpreter
-         * @return a prepared unified expression
-         * @throws JexlException (only for nested and composite)
-         */
-        protected TemplateExpression prepare(Interpreter interpreter) {
-            return this;
-        }
-
         /**
          * Interprets a sub-expression.
          * @param interpreter a JEXL interpreter
@@ -305,6 +343,7 @@ public final class TemplateEngine extend
          * @throws JexlException (only for nested and composite)
          */
         protected abstract Object evaluate(Interpreter interpreter);
+
     }
 
     /** A constant unified expression. */
@@ -588,8 +627,7 @@ public final class TemplateEngine extend
                 // keep track of TemplateExpression equivalence
                 eq &= expr == prepared;
             }
-            TemplateExpression ready = eq ? this : 
builder.build(TemplateEngine.this, this);
-            return ready;
+            return eq ? this : builder.build(TemplateEngine.this, this);
         }
 
         @Override
@@ -696,8 +734,8 @@ public final class TemplateEngine extend
      */
     private TemplateExpression parseExpression(JexlInfo info, String expr, 
Scope scope) {
         final int size = expr.length();
-        ExpressionBuilder builder = new ExpressionBuilder(0);
-        StringBuilder strb = new StringBuilder(size);
+        final ExpressionBuilder builder = new ExpressionBuilder(0);
+        final StringBuilder strb = new StringBuilder(size);
         ParseState state = ParseState.CONST;
         int immediate1 = 0;
         int deferred1 = 0;
@@ -1040,7 +1078,7 @@ public final class TemplateEngine extend
             TemplateContext tcontext = new TemplateContext(context, frame, 
exprs, null);
             TemplateExpression[] immediates = new 
TemplateExpression[exprs.length];
             for (int e = 0; e < exprs.length; ++e) {
-                immediates[e] = exprs[e].prepare(tcontext);
+                immediates[e] = exprs[e].prepare(frame, tcontext);
             }
             return new TemplateScript(prefix, source, script, immediates);
         }
@@ -1161,12 +1199,12 @@ public final class TemplateEngine extend
             }
             TemplateExpression expr = exprs[e];
             if (expr.isDeferred()) {
-                expr = expr.prepare(wrap);
+                expr = expr.prepare(frame, wrap);
             }
             if (expr instanceof CompositeExpression) {
                 printComposite((CompositeExpression) expr);
             } else {
-                doPrint(expr.getInfo(), expr.evaluate(this));
+                doPrint(expr.getInfo(), expr.evaluate(frame, this));
             }
         }
 
@@ -1179,7 +1217,7 @@ public final class TemplateEngine extend
             final int size = cexprs.length;
             Object value;
             for (int e = 0; e < size; ++e) {
-                value = cexprs[e].evaluate(this);
+                value = cexprs[e].evaluate(frame, this);
                 doPrint(cexprs[e].getInfo(), value);
             }
         }

Modified: 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/ArithmeticOperatorTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/ArithmeticOperatorTest.java?rev=1687737&r1=1687736&r2=1687737&view=diff
==============================================================================
--- 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/ArithmeticOperatorTest.java
 (original)
+++ 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/ArithmeticOperatorTest.java
 Fri Jun 26 10:23:51 2015
@@ -34,6 +34,7 @@ import org.junit.Test;
  * Tests for the startsWith, endsWith, match and range operators.
  * @since 3.0
  */
+@SuppressWarnings({"UnnecessaryBoxing", 
"AssertEqualsBetweenInconvertibleTypes"})
 public class ArithmeticOperatorTest extends JexlTestCase {
     private Asserter asserter;
 
@@ -252,7 +253,6 @@ public class ArithmeticOperatorTest exte
         Assert.assertEquals(Integer.valueOf(1), ii.next());
         Assert.assertEquals(Integer.valueOf(2), ii.next());
         Assert.assertEquals(Integer.valueOf(3), ii.next());
-        Assert.assertNull(ii.next());
 
         script = jexl.createScript("(4 - 3) .. (9 / 3)");
         result = script.execute(null);
@@ -261,7 +261,6 @@ public class ArithmeticOperatorTest exte
         Assert.assertEquals(Integer.valueOf(1), ii.next());
         Assert.assertEquals(Integer.valueOf(2), ii.next());
         Assert.assertEquals(Integer.valueOf(3), ii.next());
-        Assert.assertNull(ii.next());
 
         // sum of 1, 2, 3
         script = jexl.createScript("var x = 0; for(var y : ((5 - 4) .. (12 / 
4))) { x = x + y }; x");

Modified: 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/IssuesTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/IssuesTest.java?rev=1687737&r1=1687736&r2=1687737&view=diff
==============================================================================
--- 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/IssuesTest.java
 (original)
+++ 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/IssuesTest.java
 Fri Jun 26 10:23:51 2015
@@ -1037,4 +1037,76 @@ public class IssuesTest extends JexlTest
         Assert.assertTrue(o instanceof List);
         Assert.assertEquals(Arrays.asList(1, 2), o);
     }
+
+    @Test
+    public void test155() throws Exception {
+        JexlEngine jexlEngine = new Engine();
+        JexlExpression jexlExpresssion = 
jexlEngine.createExpression("first.second.name");
+        JexlContext jc = new MapContext();
+        jc.set("first.second.name", "RIGHT");
+        jc.set("name", "WRONG");
+        Object value = jexlExpresssion.evaluate(jc);
+        Assert.assertEquals("RIGHT", value.toString());
+    }
+
+    public static class Question42 extends MapContext {
+        public String functionA(String arg) {
+            return "a".equals(arg)? "A" : "";
+        }
+        public String functionB(String arg) {
+            return "b".equals(arg)? "B" : "";
+        }
+        public String functionC(String arg) {
+            return "c".equals(arg)? "C" : "";
+        }
+        public String functionD(String arg) {
+            return "d".equals(arg)? "D" : "";
+        }
+    }
+
+    public static class Arithmetic42 extends JexlArithmetic {
+        public Arithmetic42() {
+            super(false);
+        }
+
+        public Object bitwiseAnd(String lhs, String rhs) {
+            if (rhs.isEmpty()) { return "";  }
+            if (lhs.isEmpty()) { return ""; }
+            return lhs + rhs;
+        }
+
+        public Object bitwiseOr(String lhs, String rhs) {
+            if (rhs.isEmpty()) { return lhs; }
+            if (lhs.isEmpty()) { return rhs; }
+            return lhs + rhs;
+        }
+    }
+
+    @Test
+    public void testQuestion42() throws Exception {
+        JexlEngine jexl = new JexlBuilder().arithmetic(new 
Arithmetic42()).create();
+        JexlContext jc = new Question42();
+
+        String str0 = "(functionA('z') | functionB('b')) &  (functionC('c') |  
functionD('d') ) ";
+        JexlExpression expr0 = jexl.createExpression(str0);
+        Object value0 = expr0.evaluate(jc);
+        Assert.assertEquals("BCD", value0);
+
+        String str1 = "(functionA('z') & functionB('b')) |  (functionC('c') &  
functionD('d') ) ";
+        JexlExpression expr1 = jexl.createExpression(str1);
+        Object value1 = expr1.evaluate(jc);
+        Assert.assertEquals("CD", value1);
+    }
+
+    @Test
+    public void test156() throws Exception {
+        JexlEngine jexl = new Engine();
+        JexlContext jc = new MapContext();
+        Object ra = jexl.createExpression("463.0d * 0.1").evaluate(jc);
+        Assert.assertEquals(Double.class, ra.getClass());
+        Object r0 = jexl.createExpression("463.0B * 0.1").evaluate(jc);
+        Assert.assertEquals(java.math.BigDecimal.class, r0.getClass());
+        Object r1 = jexl.createExpression("463.0B * 0.1B").evaluate(jc);
+        Assert.assertEquals(java.math.BigDecimal.class, r1.getClass());
+    }
 }

Modified: 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/JXLTTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/JXLTTest.java?rev=1687737&r1=1687736&r2=1687737&view=diff
==============================================================================
--- 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/JXLTTest.java 
(original)
+++ 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/JXLTTest.java 
Fri Jun 26 10:23:51 2015
@@ -193,6 +193,20 @@ public class JXLTTest extends JexlTestCa
     }
 
     @Test
+    public void testNestedTemplate() throws Exception {
+        final String source = "#{${hi}+'.world'}";
+        JxltEngine.Template expr = JXLT.createTemplate(source, "hi");
+
+        context.set("greeting.world", "Hello World!");
+        StringWriter strw = new StringWriter();
+        expr.evaluate(context, strw, "greeting");
+        String o = strw.toString();
+        Assert.assertEquals("Hello World!", o);
+
+        Assert.assertEquals(source, getSource(expr.toString()));
+    }
+
+    @Test
     public void testImmediate() throws Exception {
         JexlContext none = null;
         final String source = "${'Hello ' + 'World!'}";
@@ -586,9 +600,39 @@ public class JXLTTest extends JexlTestCa
             }
         }
         Assert.assertEquals(6, count);
+        Assert.assertTrue(output.indexOf("42") > 0);
+        Assert.assertTrue(output.indexOf("43") > 0);
+        Assert.assertTrue(output.indexOf("44") > 0);
+        Assert.assertTrue(output.indexOf("45") > 0);
     }
 
     @Test
+    public void testReport2() throws Exception {
+        String rpt
+                = "<report>\n"
+                + "this is ${x}\n"
+                + "${x + 1}\n"
+                + "${x + 2}\n"
+                + "${x + 3}\n"
+                + "</report>\n";
+        JxltEngine.Template t = JXLT.createTemplate("$$", new 
StringReader(rpt), "x");
+        StringWriter strw = new StringWriter();
+        t.evaluate(context, strw, 42);
+        String output = strw.toString();
+        int count = 0;
+        for (int i = 0; i < output.length(); ++i) {
+            char c = output.charAt(i);
+            if ('\n' == c) {
+                count += 1;
+            }
+        }
+        Assert.assertEquals(6, count);
+        Assert.assertTrue(output.indexOf("42") > 0);
+        Assert.assertTrue(output.indexOf("43") > 0);
+        Assert.assertTrue(output.indexOf("44") > 0);
+        Assert.assertTrue(output.indexOf("45") > 0);
+    }
+    @Test
     public void testOneLiner() throws Exception {
         JxltEngine.Template t = JXLT.createTemplate("$$", new 
StringReader("fourty-two"));
         StringWriter strw = new StringWriter();

Added: 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/internal/RangeTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/internal/RangeTest.java?rev=1687737&view=auto
==============================================================================
--- 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/internal/RangeTest.java
 (added)
+++ 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/internal/RangeTest.java
 Fri Jun 26 10:23:51 2015
@@ -0,0 +1,138 @@
+/*
+ * 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.jexl3.internal;
+
+import org.apache.commons.jexl3.JexlTestCase;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.NoSuchElementException;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Basic checks on ranges.
+ */
+@SuppressWarnings({"UnnecessaryBoxing", 
"AssertEqualsBetweenInconvertibleTypes"})
+public class RangeTest extends JexlTestCase {
+
+    public RangeTest() {
+        super("InternalTest");
+    }
+
+    @Before
+    @Override
+    public void setUp() throws Exception {
+        // ensure jul logging is only error
+        
java.util.logging.Logger.getLogger(org.apache.commons.jexl3.JexlEngine.class.getName()).setLevel(java.util.logging.Level.SEVERE);
+    }
+
+    @After
+    @Override
+    public void tearDown() throws Exception {
+        super.tearDown();
+    }
+
+    @Test
+    public void testRanges() {
+        LongRange lr0 = new LongRange(20,10);
+        Assert.assertFalse(lr0.isEmpty());
+        Assert.assertTrue(lr0.contains(10L));
+        Assert.assertTrue(lr0.contains(20L));
+        Assert.assertFalse(lr0.contains(30L));
+        Assert.assertFalse(lr0.contains(5L));
+        LongRange lr1 = new LongRange(10,20);
+        Assert.assertEquals(lr0, lr1);
+        Assert.assertTrue(lr0.containsAll(lr1));
+        LongRange lr2 = new LongRange(10,15);
+        Assert.assertNotEquals(lr0, lr2);
+        Assert.assertTrue(lr0.containsAll(lr2));
+        Assert.assertFalse(lr2.containsAll(lr1));
+        IntegerRange ir0 = new IntegerRange(20,10);
+        Assert.assertFalse(ir0.isEmpty());
+        Assert.assertTrue(ir0.contains(10));
+        Assert.assertTrue(ir0.contains(20));
+        Assert.assertFalse(ir0.contains(30));
+        Assert.assertFalse(ir0.contains(5));
+        IntegerRange ir1 = new IntegerRange(10,20);
+        Assert.assertEquals(ir0, ir1);
+        Assert.assertTrue(ir0.containsAll(ir1));
+        Assert.assertNotEquals(ir0, lr0);
+        Assert.assertNotEquals(ir1, lr1);
+        IntegerRange ir2 = new IntegerRange(10,15);
+        Assert.assertNotEquals(ir0, ir2);
+        Assert.assertTrue(ir0.containsAll(ir2));
+        Assert.assertFalse(ir2.containsAll(ir1));
+
+        long lc0 = 10;
+        Iterator<Long> il0 = lr0.iterator();
+        while(il0.hasNext()) {
+            long v0 = il0.next();
+            Assert.assertEquals(lc0, v0);
+            try {
+                switch((int)v0) {
+                    case 10:  il0.remove(); Assert.fail(); break;
+                    case 11: lr1.add(v0); Assert.fail(); break;
+                    case 12: lr1.remove(v0); Assert.fail(); break;
+                    case 13: lr1.addAll(Arrays.asList(v0)); Assert.fail(); 
break;
+                    case 14: lr1.removeAll(Arrays.asList(v0)); Assert.fail(); 
break;
+                    case 15: lr1.retainAll(Arrays.asList(v0)); Assert.fail(); 
break;
+                }
+            } catch(UnsupportedOperationException xuo) {
+                // ok
+            }
+            lc0 += 1;
+        }
+        Assert.assertEquals(21L, lc0);
+        try {
+            il0.next();
+            Assert.fail();
+        } catch(NoSuchElementException xns) {
+            // ok
+        }
+
+        int ic0 = 10;
+        Iterator<Integer> ii0 = ir0.iterator();
+        while(ii0.hasNext()) {
+            int v0 = ii0.next();
+            Assert.assertEquals(ic0, v0);
+            try {
+                switch(v0) {
+                    case 10: ii0.remove(); Assert.fail(); break;
+                    case 11: ir1.add(v0); Assert.fail(); break;
+                    case 12: ir1.remove(v0); Assert.fail(); break;
+                    case 13: ir1.addAll(Arrays.asList(v0)); Assert.fail(); 
break;
+                    case 14: ir1.removeAll(Arrays.asList(v0)); Assert.fail(); 
break;
+                    case 15: ir1.retainAll(Arrays.asList(v0)); Assert.fail(); 
break;
+                }
+            } catch(UnsupportedOperationException xuo) {
+                // ok
+            }
+            ic0 += 1;
+        }
+        Assert.assertEquals(21, ic0);
+        try {
+            ii0.next();
+            Assert.fail();
+        } catch(NoSuchElementException xns) {
+            // ok
+        }
+
+    }
+}
+

Propchange: 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/internal/RangeTest.java
------------------------------------------------------------------------------
    svn:eol-style = native


Reply via email to