Author: markt
Date: Thu Jul  4 20:15:35 2013
New Revision: 1499854

URL: http://svn.apache.org/r1499854
Log:
More unit tests for BeanNameELResolver and fix another exception handling 
problem identified by the new tests. Also fix a problem found with setType 
where it always returned null.

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

Modified: tomcat/trunk/java/javax/el/BeanNameELResolver.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/javax/el/BeanNameELResolver.java?rev=1499854&r1=1499853&r2=1499854&view=diff
==============================================================================
--- tomcat/trunk/java/javax/el/BeanNameELResolver.java (original)
+++ tomcat/trunk/java/javax/el/BeanNameELResolver.java Thu Jul  4 20:15:35 2013
@@ -100,9 +100,15 @@ public class BeanNameELResolver extends 
 
         String beanName = (String) property;
 
-        if (beanNameResolver.isNameResolved(beanName)) {
-            context.setPropertyResolved(true);
-            beanNameResolver.getBean(beanName).getClass();
+        try {
+            if (beanNameResolver.isNameResolved(beanName)) {
+                Class<?> result = 
beanNameResolver.getBean(beanName).getClass();
+                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=1499854&r1=1499853&r2=1499854&view=diff
==============================================================================
--- tomcat/trunk/test/javax/el/TestBeanNameELResolver.java (original)
+++ tomcat/trunk/test/javax/el/TestBeanNameELResolver.java Thu Jul  4 20:15:35 
2013
@@ -225,7 +225,7 @@ public class TestBeanNameELResolver {
      * Exception during resolution should be wrapped and re-thrown.
      */
     @Test
-    public void testGetValue08() {
+    public void testSetValue08() {
         doThrowableTest(TesterBeanNameResolver.EXCEPTION_TRIGGER_NAME,
                 MethodUnderTest.SET_VALUE);
     }
@@ -235,12 +235,118 @@ public class TestBeanNameELResolver {
      * Throwable during resolution should be wrapped and re-thrown.
      */
     @Test
-    public void testGetValue09() {
+    public void testSetValue09() {
         doThrowableTest(TesterBeanNameResolver.THROWABLE_TRIGGER_NAME,
                 MethodUnderTest.SET_VALUE);
     }
 
 
+    /**
+     * Tests that a null context results in an NPE as per EL Javadoc.
+     */
+    @Test(expected=NullPointerException.class)
+    public void testGetType01() {
+        BeanNameELResolver resolver = createBeanNameELResolver();
+        resolver.getType(null, new Object(), new Object());
+    }
+
+
+    /**
+     * Tests that a valid bean is resolved.
+     */
+    @Test
+    public void testGetType02() {
+
+        BeanNameELResolver resolver = createBeanNameELResolver();
+        ELContext context =
+                new StandardELContext(ELManager.getExpressionFactory());
+
+        Class<?> result = resolver.getType(context, null, BEAN01_NAME);
+
+        Assert.assertEquals(BEAN01.getClass(), result);
+        Assert.assertTrue(context.isPropertyResolved());
+    }
+
+
+    /**
+     * Tests that a valid bean is not resolved if base is non-null.
+     */
+    @Test
+    public void testGetType03() {
+
+        BeanNameELResolver resolver = createBeanNameELResolver();
+        ELContext context =
+                new StandardELContext(ELManager.getExpressionFactory());
+
+        Class<?> result = resolver.getType(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 testGetType04() {
+
+        BeanNameELResolver resolver = createBeanNameELResolver();
+        ELContext context =
+                new StandardELContext(ELManager.getExpressionFactory());
+
+        Object property = new Object() {
+            @Override
+            public String toString() {
+                return BEAN01_NAME;
+            }
+        };
+
+        Class<?> result = resolver.getType(context, null, property);
+
+        Assert.assertNull(result);
+        Assert.assertFalse(context.isPropertyResolved());
+    }
+
+
+    /**
+     * Beans that don't exist shouldn't return anything
+     */
+    @Test
+    public void testGetType05() {
+
+        BeanNameELResolver resolver = createBeanNameELResolver();
+        ELContext context =
+                new StandardELContext(ELManager.getExpressionFactory());
+
+        Class<?> result = resolver.getType(context, null, BEAN99_NAME);
+
+        Assert.assertNull(result);
+        Assert.assertFalse(context.isPropertyResolved());
+    }
+
+
+    /**
+     * Exception during resolution should be wrapped and re-thrown.
+     */
+    @Test
+    public void testGetType06() {
+        doThrowableTest(TesterBeanNameResolver.EXCEPTION_TRIGGER_NAME,
+                MethodUnderTest.GET_TYPE);
+    }
+
+
+    /**
+     * Throwable during resolution should be wrapped and re-thrown.
+     */
+    @Test
+    public void testGetType07() {
+        doThrowableTest(TesterBeanNameResolver.THROWABLE_TRIGGER_NAME,
+                MethodUnderTest.GET_TYPE);
+    }
+
+
     private void doThrowableTest(String trigger, MethodUnderTest method) {
         BeanNameELResolver resolver = createBeanNameELResolver();
         ELContext context =
@@ -257,6 +363,10 @@ public class TestBeanNameELResolver {
                     resolver.setValue(context, null, trigger, new Object());
                     break;
                 }
+                case GET_TYPE: {
+                    resolver.getType(context, null, trigger);
+                    break;
+                }
                 default: {
                     // Should never happen
                     Assert.fail("Missing case for method");
@@ -320,6 +430,7 @@ public class TestBeanNameELResolver {
 
     private static enum MethodUnderTest {
         GET_VALUE,
-        SET_VALUE
+        SET_VALUE,
+        GET_TYPE
     }
 }



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

Reply via email to