Author: henrib
Date: Mon Mar 27 12:46:06 2017
New Revision: 1788925

URL: http://svn.apache.org/viewvc?rev=1788925&view=rev
Log:
JEXL:
Fix & re-added a few commented out tests

Modified:
    
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Debugger.java
    commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/Foo.java
    
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/JexlTest.java
    
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/junit/AsserterTest.java

Modified: 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Debugger.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Debugger.java?rev=1788925&r1=1788924&r2=1788925&view=diff
==============================================================================
--- 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Debugger.java
 (original)
+++ 
commons/proper/jexl/trunk/src/main/java/org/apache/commons/jexl3/internal/Debugger.java
 Mon Mar 27 12:46:06 2017
@@ -578,13 +578,28 @@ public class Debugger extends ParserVisi
     protected Object visit(ASTGTNode node, Object data) {
         return infixChildren(node, " > ", false, data);
     }
-    /** Checks identifiers that contain space, quote, double-quotes or 
backspace. */
-    protected static final Pattern QUOTED_IDENTIFIER = 
Pattern.compile("['\"\\s\\\\]");
+    
+    /** Checks identifiers that contain spaces or punctuation
+     * (but underscore, at-sign, sharp-sign and dollar).
+     */
+    protected static final Pattern QUOTED_IDENTIFIER = 
+            Pattern.compile("[\\s]|[\\p{Punct}&&[^@#\\$_]]");
+    
+    /**
+     * Checks whether an identifier should be quoted or not.
+     * @param str the identifier
+     * @return true if needing quotes, false otherwise
+     */
+    protected boolean needQuotes(String str) {
+        return QUOTED_IDENTIFIER.matcher(str).find()
+            || "size".equals(str)
+            || "empty".equals(str);
+    }
 
     @Override
     protected Object visit(ASTIdentifier node, Object data) {
         String image = node.getName();
-        if (QUOTED_IDENTIFIER.matcher(image).find()) {
+        if (needQuotes(image)) {
             // quote it
             image = "'" + image.replace("'", "\\'") + "'";
         }
@@ -595,7 +610,7 @@ public class Debugger extends ParserVisi
     protected Object visit(ASTIdentifierAccess node, Object data) {
         builder.append(".");
         String image = node.getName();
-        if (QUOTED_IDENTIFIER.matcher(image).find()) {
+        if (needQuotes(image)) {
             // quote it
             image = "'" + image.replace("'", "\\'") + "'";
         }

Modified: 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/Foo.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/Foo.java?rev=1788925&r1=1788924&r2=1788925&view=diff
==============================================================================
--- commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/Foo.java 
(original)
+++ commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/Foo.java 
Mon Mar 27 12:46:06 2017
@@ -51,9 +51,12 @@ public class Foo {
         return new Foo();
     }
 
-    public String get(String arg)
-    {
-        return "Repeat : " + arg;
+    public String getQuux() {
+        return "String : quux";
+    }
+
+    public String repeat(String str) {
+        return "Repeat : " + str;
     }
 
     public String convertBoolean(boolean b)

Modified: 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/JexlTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/JexlTest.java?rev=1788925&r1=1788924&r2=1788925&view=diff
==============================================================================
--- 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/JexlTest.java 
(original)
+++ 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/JexlTest.java 
Mon Mar 27 12:46:06 2017
@@ -89,7 +89,7 @@ public class JexlTest extends JexlTestCa
          */
         JexlContext jc = new MapContext();
         jc.set("foo", new Foo());
-        assertExpression(jc, "foo.get(\"woogie\")", "Repeat : woogie");
+        assertExpression(jc, "foo.repeat(\"woogie\")", "Repeat : woogie");
     }
 
     @Test
@@ -213,21 +213,20 @@ public class JexlTest extends JexlTestCa
         // support generic int size() method
         BitSet bitset = new BitSet(5);
         jc.set("bitset", bitset);
-//
-//        assertExpression(jc, "size(s)", new Integer(5));
-//        assertExpression(jc, "size(array)", new Integer(5));
-//        assertExpression(jc, "size(list)", new Integer(5));
-//        assertExpression(jc, "size(map)", new Integer(5));
-//        assertExpression(jc, "size(set)", new Integer(5));
-//        assertExpression(jc, "size(bitset)", new Integer(64));
-//        assertExpression(jc, "list.size()", new Integer(5));
-//        assertExpression(jc, "map.size()", new Integer(5));
-//        assertExpression(jc, "set.size()", new Integer(5));
-//        assertExpression(jc, "bitset.size()", new Integer(64));
-//
-//        assertExpression(jc, "list.get(size(list) - 1)", "5");
-//        assertExpression(jc, "list[size(list) - 1]", "5");
-        // here
+
+        assertExpression(jc, "size(s)", new Integer(5));
+        assertExpression(jc, "size(array)", new Integer(5));
+        assertExpression(jc, "size(list)", new Integer(5));
+        assertExpression(jc, "size(map)", new Integer(5));
+        assertExpression(jc, "size(set)", new Integer(5));
+        assertExpression(jc, "size(bitset)", new Integer(64));
+        assertExpression(jc, "list.size()", new Integer(5));
+        assertExpression(jc, "map.size()", new Integer(5));
+        assertExpression(jc, "set.size()", new Integer(5));
+        assertExpression(jc, "bitset.size()", new Integer(64));
+
+        assertExpression(jc, "list.get(size(list) - 1)", "5");
+        assertExpression(jc, "list[size(list) - 1]", "5");
         assertExpression(jc, "list.get(list.size() - 1)", "5");
     }
 
@@ -236,15 +235,17 @@ public class JexlTest extends JexlTestCa
         JexlContext jc = new MapContext();
         Map<String, Object> map = new HashMap<String, Object>();
         map.put("size", "cheese");
+        map.put("si & ze", "cheese");
         jc.set("map", map);
         jc.set("foo", new Foo());
 
         assertExpression(jc, "map['size']", "cheese");
-// PR - unsure whether or not we should support map.size or force usage of the 
above 'escaped' version
-//        assertExpression(jc, "map.size", "cheese");
-        assertExpression(jc, "foo.getSize()", new Integer(22));
-        // failing assertion for size property
-        //assertExpression(jc, "foo.size", new Integer(22));
+        assertExpression(jc, "map['si & ze']", "cheese");
+        assertExpression(jc, "map.'si & ze'", "cheese");
+        assertExpression(jc, "map.size()", 2);
+        assertExpression(jc, "size(map)", 2);
+        assertExpression(jc, "foo.getSize()", 22);
+        assertExpression(jc, "foo.'size'", 22);
     }
 
     /**
@@ -265,7 +266,7 @@ public class JexlTest extends JexlTestCa
         Assert.assertEquals(expr.toString(), new Float(100.0), value);
         expr = JEXL.createExpression("new(foo).quux");
         value = expr.evaluate(jc);
-        Assert.assertEquals(expr.toString(), "Repeat : quux", value);
+        Assert.assertEquals(expr.toString(), "String : quux", value);
     }
 
     /**

Modified: 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/junit/AsserterTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/junit/AsserterTest.java?rev=1788925&r1=1788924&r2=1788925&view=diff
==============================================================================
--- 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/junit/AsserterTest.java
 (original)
+++ 
commons/proper/jexl/trunk/src/test/java/org/apache/commons/jexl3/junit/AsserterTest.java
 Mon Mar 27 12:46:06 2017
@@ -39,7 +39,7 @@ public class AsserterTest extends JexlTe
     public void testThis() throws Exception {
         Asserter asserter = new Asserter(JEXL);
         asserter.setVariable("this", new Foo());
-        asserter.assertExpression("this.get('abc')", "Repeat : abc");
+        asserter.assertExpression("this.repeat('abc')", "Repeat : abc");
         try {
             asserter.assertExpression("this.count", "Wrong Value");
             Assert.fail("This method should have thrown an assertion 
exception");


Reply via email to