You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/07/04 17:06:22 UTC

svn commit: r1499778 - in /tomcat/trunk: java/javax/el/BeanNameELResolver.java test/javax/el/TestBeanNameELResolver.java test/javax/el/TesterBeanNameResolver.java

Author: markt
Date: Thu Jul  4 15:06:21 2013
New Revision: 1499778

URL: http://svn.apache.org/r1499778
Log:
More unit tests for BeanNameELResolver and fix an exception handling problem identified by the new tests.

Modified:
    tomcat/trunk/java/javax/el/BeanNameELResolver.java
    tomcat/trunk/test/javax/el/TestBeanNameELResolver.java
    tomcat/trunk/test/javax/el/TesterBeanNameResolver.java

Modified: tomcat/trunk/java/javax/el/BeanNameELResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/BeanNameELResolver.java?rev=1499778&r1=1499777&r2=1499778&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/BeanNameELResolver.java (original)
+++ tomcat/trunk/java/javax/el/BeanNameELResolver.java Thu Jul  4 15:06:21 2013
@@ -43,8 +43,14 @@ public class BeanNameELResolver extends 
         String beanName = (String) property;
 
         if (beanNameResolver.isNameResolved(beanName)) {
-            context.setPropertyResolved(true);
-            return beanNameResolver.getBean((String) property);
+            try {
+                Object result = beanNameResolver.getBean((String) property);
+                context.setPropertyResolved(true);
+                return result;
+            } catch (Throwable t) {
+                Util.handleThrowable(t);
+                throw new ELException(t);
+            }
         }
 
         return null;

Modified: tomcat/trunk/test/javax/el/TestBeanNameELResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/javax/el/TestBeanNameELResolver.java?rev=1499778&r1=1499777&r2=1499778&view=diff
==============================================================================
--- tomcat/trunk/test/javax/el/TestBeanNameELResolver.java (original)
+++ tomcat/trunk/test/javax/el/TestBeanNameELResolver.java Thu Jul  4 15:06:21 2013
@@ -25,6 +25,7 @@ public class TestBeanNameELResolver {
     private static final TesterBean BEAN01 = new TesterBean(BEAN01_NAME);
     private static final String BEAN02_NAME = "bean02";
     private static final TesterBean BEAN02 = new TesterBean(BEAN02_NAME);
+    private static final String BEAN99_NAME = "bean99";
 
     /**
      * Creates the resolver that is used for the test. All the tests use a
@@ -65,6 +66,104 @@ public class TestBeanNameELResolver {
         Object result = resolver.getValue(context, null, BEAN01_NAME);
 
         Assert.assertEquals(BEAN01, result);
+        Assert.assertTrue(context.isPropertyResolved());
     }
 
+
+    /**
+     * Tests that a valid bean is not resolved if base is non-null.
+     */
+    @Test
+    public void testGetValue03() {
+
+        BeanNameELResolver resolver = createBeanNameELResolver();
+        ELContext context =
+                new StandardELContext(ELManager.getExpressionFactory());
+
+        Object result = resolver.getValue(context, new Object(), BEAN01_NAME);
+
+        Assert.assertNull(result);
+        Assert.assertFalse(context.isPropertyResolved());
+    }
+
+
+    /**
+     * Tests that a valid bean is not resolved if property is not a String even
+     * if it can be coerced to a valid bean name.
+     */
+    @Test
+    public void testGetValue04() {
+
+        BeanNameELResolver resolver = createBeanNameELResolver();
+        ELContext context =
+                new StandardELContext(ELManager.getExpressionFactory());
+
+        Object property = new Object() {
+            @Override
+            public String toString() {
+                return BEAN01_NAME;
+            }
+        };
+
+        Object result = resolver.getValue(context, null, property);
+
+        Assert.assertNull(result);
+        Assert.assertFalse(context.isPropertyResolved());
+    }
+
+
+    /**
+     * Beans that don't exist shouldn't return anything
+     */
+    @Test
+    public void testGetValue05() {
+
+        BeanNameELResolver resolver = createBeanNameELResolver();
+        ELContext context =
+                new StandardELContext(ELManager.getExpressionFactory());
+
+        Object result = resolver.getValue(context, null, BEAN99_NAME);
+
+        Assert.assertNull(result);
+        Assert.assertFalse(context.isPropertyResolved());
+    }
+
+
+    /**
+     * Exception during resolution should be wrapped and re-thrown.
+     */
+    @Test
+    public void testGetValue06() {
+        doGetValueThrowableTest(TesterBeanNameResolver.EXCEPTION_TRIGGER_NAME);
+    }
+
+
+    /**
+     * Throwable during resolution should be wrapped and re-thrown.
+     */
+    @Test
+    public void testGetValue07() {
+        doGetValueThrowableTest(TesterBeanNameResolver.THROWABLE_TRIGGER_NAME);
+    }
+
+
+    private void doGetValueThrowableTest(String trigger) {
+        BeanNameELResolver resolver = createBeanNameELResolver();
+        ELContext context =
+                new StandardELContext(ELManager.getExpressionFactory());
+
+        ELException elException = null;
+        try {
+            resolver.getValue(context, null,trigger);
+        } catch (ELException e) {
+            elException = e;
+        }
+
+        Assert.assertFalse(context.isPropertyResolved());
+        Assert.assertNotNull(elException);
+
+        @SuppressWarnings("null") // Can't be null due to assertion above
+        Throwable cause = elException.getCause();
+        Assert.assertNotNull(cause);
+    }
 }

Modified: tomcat/trunk/test/javax/el/TesterBeanNameResolver.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/javax/el/TesterBeanNameResolver.java?rev=1499778&r1=1499777&r2=1499778&view=diff
==============================================================================
--- tomcat/trunk/test/javax/el/TesterBeanNameResolver.java (original)
+++ tomcat/trunk/test/javax/el/TesterBeanNameResolver.java Thu Jul  4 15:06:21 2013
@@ -21,12 +21,18 @@ import java.util.Map;
 
 public class TesterBeanNameResolver extends BeanNameResolver {
 
+    public static final String EXCEPTION_TRIGGER_NAME = "exception";
+    public static final String THROWABLE_TRIGGER_NAME = "exception";
+
     private Map<String,Object> beans = new HashMap<>();
 
+    public TesterBeanNameResolver() {
+        beans.put(EXCEPTION_TRIGGER_NAME, new Object());
+    }
+
     @Override
     public void setBeanValue(String beanName, Object value)
             throws PropertyNotWritableException {
-
         beans.put(beanName, value);
     }
 
@@ -37,6 +43,12 @@ public class TesterBeanNameResolver exte
 
     @Override
     public Object getBean(String beanName) {
+        if (EXCEPTION_TRIGGER_NAME.equals(beanName)) {
+            throw new RuntimeException();
+        }
+        if (THROWABLE_TRIGGER_NAME.equals(beanName)) {
+            throw new Error();
+        }
         return beans.get(beanName);
     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org