You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by he...@apache.org on 2019/05/13 14:40:36 UTC

[commons-jexl] branch master updated (f9cd296 -> 315f0b9)

This is an automated email from the ASF dual-hosted git repository.

henrib pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jexl.git.


    from f9cd296  JEXL-257: catch and wrap InvocationTargetException in thrown JexlEXception.TryFailed from tryInvoke
     new 2b27106  JEXL-257 , JEXL-299: added specific tests
     new 315f0b9  JEXL-299: corrected signature generation (square brackets are already generated by class.getSimpleName())

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 .../org/apache/commons/jexl3/JexlException.java    |   3 -
 .../java/org/apache/commons/jexl3/MethodTest.java  | 173 ++++++++++++++++++++-
 2 files changed, 172 insertions(+), 4 deletions(-)


[commons-jexl] 02/02: JEXL-299: corrected signature generation (square brackets are already generated by class.getSimpleName())

Posted by he...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

henrib pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jexl.git

commit 315f0b9a0a5f3d128bef00fb30dd7f087ecb39dd
Author: henrib <he...@apache.org>
AuthorDate: Mon May 13 16:38:34 2019 +0200

    JEXL-299: corrected signature generation (square brackets are already generated by class.getSimpleName())
---
 src/main/java/org/apache/commons/jexl3/JexlException.java | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/src/main/java/org/apache/commons/jexl3/JexlException.java b/src/main/java/org/apache/commons/jexl3/JexlException.java
index 1b23b17..2662d22 100644
--- a/src/main/java/org/apache/commons/jexl3/JexlException.java
+++ b/src/main/java/org/apache/commons/jexl3/JexlException.java
@@ -743,9 +743,6 @@ public class JexlException extends RuntimeException {
                 }
                 Class<?> clazz = args[a] == null ? Object.class : args[a].getClass();
                 strb.append(clazz.getSimpleName());
-                if (clazz.isArray()) {
-                    strb.append("[]");
-                }
             }
             strb.append(')');
             return strb.toString();


[commons-jexl] 01/02: JEXL-257 , JEXL-299: added specific tests

Posted by he...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

henrib pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-jexl.git

commit 2b271068c873c3bb9b08b7ee885a5fa6768a70b9
Author: henrib <he...@apache.org>
AuthorDate: Mon May 13 16:36:57 2019 +0200

    JEXL-257 , JEXL-299: added specific tests
---
 .../java/org/apache/commons/jexl3/MethodTest.java  | 173 ++++++++++++++++++++-
 1 file changed, 172 insertions(+), 1 deletion(-)

diff --git a/src/test/java/org/apache/commons/jexl3/MethodTest.java b/src/test/java/org/apache/commons/jexl3/MethodTest.java
index 9849fcf..0d6cdea 100644
--- a/src/test/java/org/apache/commons/jexl3/MethodTest.java
+++ b/src/test/java/org/apache/commons/jexl3/MethodTest.java
@@ -18,10 +18,13 @@ package org.apache.commons.jexl3;
 
 import java.util.HashMap;
 import java.util.Map;
-import org.apache.commons.jexl3.introspection.JexlMethod;
 import org.apache.commons.jexl3.junit.Asserter;
 import java.util.Arrays;
 import java.util.Date;
+import org.apache.commons.jexl3.introspection.JexlMethod;
+import org.apache.commons.jexl3.introspection.JexlPropertyGet;
+import org.apache.commons.jexl3.introspection.JexlPropertySet;
+import org.apache.commons.jexl3.introspection.JexlUberspect;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
@@ -173,6 +176,13 @@ public class MethodTest extends JexlTestCase {
     }
 
     public static class Functor {
+        private boolean overKill = false;
+        private String under = null;
+        
+        void setKill(boolean ok) {
+            overKill = ok;
+        }
+        
         public int ten() {
             return 10;
         }
@@ -194,6 +204,9 @@ public class MethodTest extends JexlTestCase {
         }
 
         public Object over(String f, int i) {
+            if (overKill) {
+                throw new UnsupportedOperationException("kill " + f + " + " + i);
+            }
             return f + " + " + i;
         }
 
@@ -204,6 +217,20 @@ public class MethodTest extends JexlTestCase {
         public Object over(String f, String g) {
             return f + " + " + g;
         }
+
+        public void setUnder(String str) {
+            if (overKill) {
+                throw new UnsupportedOperationException("kill " + str);
+            }
+            under = str;
+        }
+
+        public String getUnder() {
+            if (overKill) {
+                throw new UnsupportedOperationException("kill " + under);
+            }
+            return under;
+        }
     }
 
     public static class FunctorOver extends Functor {
@@ -256,6 +283,150 @@ public class MethodTest extends JexlTestCase {
             Assert.fail("method should not have thrown!");
         }
     }
+    
+    @Test
+    public void testAmbiguousInvoke() throws Exception {
+        // JEXL-299
+        Functor func = new Functor();
+        JexlContext ctxt = new MapContext();
+        ctxt.set("func", func);
+        Object result;
+        // basic call works
+        result = JEXL.invokeMethod(func, "over", "foo", 42);
+        Assert.assertEquals("foo + 42", result);
+        // ambiguous call fails
+        try {
+            JEXL.invokeMethod(func, "over", "not null", null);
+            Assert.fail("should be ambiguous");
+        } catch (JexlException.Method xinvoke) {
+            Assert.assertEquals("over(String, Object)", xinvoke.getMethodSignature());
+        }
+
+        // another ambiguous call fails
+        try {
+            String[] arg2 = new String[]{"more", "than", "one"};
+            JEXL.invokeMethod(func, "over", "not null", arg2);
+            Assert.fail("should be ambiguous");
+        } catch (JexlException.Method xinvoke) {
+            Assert.assertEquals("over(String, String[])", xinvoke.getMethodSignature());
+        }
+    }
+
+    @Test
+    public void testTryFailed() throws Exception {
+        // JEXL-257
+        Functor func = new Functor();
+        JexlContext ctxt = new MapContext();
+        ctxt.set("func", func);
+        Object result;
+        JexlUberspect uber = JEXL.getUberspect();
+        // tryInvoke 
+        JexlMethod method = uber.getMethod(func, "over", "foo", 42);
+        Assert.assertNotNull(method);
+        // tryInvoke succeeds 
+        result = method.tryInvoke("over", func, "foo", 42);
+        Assert.assertEquals("foo + 42", result);
+        // tryInvoke fails 
+        func.setKill(true);
+        try {
+            /*result = */method.tryInvoke("over", func, "foo", 42);
+            Assert.fail("should throw TryFailed");
+        } catch (JexlException.TryFailed xfail) {
+            Assert.assertEquals(UnsupportedOperationException.class, xfail.getCause().getClass());
+        }
+
+        func.setKill(false);
+        JexlPropertySet setter = uber.getPropertySet(func, "under", "42");
+        result = setter.tryInvoke(func, "under", "42");
+        Assert.assertFalse(setter.tryFailed(result));
+        Assert.assertEquals("42", result);
+
+        JexlPropertyGet getter = uber.getPropertyGet(func, "under");
+        result = getter.tryInvoke(func, "under");
+        Assert.assertFalse(getter.tryFailed(result));
+        Assert.assertEquals("42", result);
+
+        func.setKill(true);
+        try {
+            /*result = */setter.tryInvoke(func, "under", "42");
+            Assert.fail("should throw TryFailed");
+        } catch (JexlException.TryFailed xfail) {
+            Assert.assertEquals(UnsupportedOperationException.class, xfail.getCause().getClass());
+        }
+        func.setKill(false);
+        result = setter.tryInvoke(func, "under", "-42");
+        Assert.assertEquals("-42", result);
+
+        func.setKill(true);
+        try {
+            /*result = */getter.tryInvoke(func, "under");
+            Assert.fail("should throw TryFailed");
+        } catch (JexlException.TryFailed xfail) {
+            Assert.assertEquals(UnsupportedOperationException.class, xfail.getCause().getClass());
+        }
+
+        func.setKill(false);
+        result = getter.tryInvoke(func, "under");
+        Assert.assertFalse(getter.tryFailed(result));
+        Assert.assertEquals("-42", result);
+    }
+    
+    @Test
+    public void testTryFailedScript() throws Exception {
+        // JEXL-257
+        Functor func = new Functor();
+        JexlContext ctxt = new MapContext();
+        ctxt.set("func", func);
+        Object result;
+        JexlUberspect uber = JEXL.getUberspect();
+        JexlScript method = JEXL.createScript("(x, y)->{ func.over(x, y) }");
+        // tryInvoke 
+        //JexlMethod method = uber.getMethod(func, "over", "foo", 42);
+        Assert.assertNotNull(method);
+        // tryInvoke succeeds 
+        result = method.execute(ctxt, "foo", 42);
+        Assert.assertEquals("foo + 42", result);
+        // tryInvoke fails 
+        func.setKill(true);
+        try {
+            /*result = */method.execute(ctxt, "foo", 42);
+            Assert.fail("should throw TryFailed");
+        } catch (JexlException xfail) {
+            Assert.assertEquals(UnsupportedOperationException.class, xfail.getCause().getClass());
+        }
+
+        func.setKill(false);
+        JexlScript setter = JEXL.createScript("(x)->{ func.under = x }");
+        //JexlPropertySet setter = uber.getPropertySet(func, "under", "42");
+        result = setter.execute(ctxt, "42");
+        Assert.assertEquals("42", result);
+
+        JexlScript getter = JEXL.createScript("func.under");
+        Assert.assertEquals("42", result);
+
+        func.setKill(true);
+        try {
+            /*result = */setter.execute(ctxt, "42");
+            Assert.fail("should throw TryFailed");
+        } catch (JexlException xfail) {
+            Assert.assertEquals(UnsupportedOperationException.class, xfail.getCause().getClass());
+        }
+        func.setKill(false);
+        result = setter.execute(ctxt, "-42");
+        Assert.assertEquals("-42", result);
+
+        func.setKill(true);
+        try {
+            /*result = */getter.execute(ctxt);
+            Assert.fail("should throw TryFailed");
+        } catch (JexlException xfail) {
+            Assert.assertEquals(UnsupportedOperationException.class, xfail.getCause().getClass());
+        }
+
+        func.setKill(false);
+        result = getter.execute(ctxt);
+        Assert.assertEquals("-42", result);
+    }
 
     /**
      * test a simple method expression