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