Author: markt Date: Fri Jul 5 08:13:06 2013 New Revision: 1499928 URL: http://svn.apache.org/r1499928 Log: More unit tests for BeanNameELResolver Fix several bugs - add missing exception handling to isReadOnly() - correct exception handling in setValue()
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=1499928&r1=1499927&r2=1499928&view=diff ============================================================================== --- tomcat/trunk/java/javax/el/BeanNameELResolver.java (original) +++ tomcat/trunk/java/javax/el/BeanNameELResolver.java Fri Jul 5 08:13:06 2013 @@ -70,11 +70,21 @@ public class BeanNameELResolver extends String beanName = (String) property; boolean isResolved = context.isPropertyResolved(); - if (isReadOnly(context, base, property)) { + + boolean isReadOnly; + try { + isReadOnly = isReadOnly(context, base, property); + } catch (Throwable t) { + Util.handleThrowable(t); + throw new ELException(t); + } finally { + context.setPropertyResolved(isResolved); + } + + if (isReadOnly) { throw new PropertyNotWritableException(Util.message(context, "beanNameELResolver.beanReadOnly", beanName)); } - context.setPropertyResolved(isResolved); if (beanNameResolver.isNameResolved(beanName) || beanNameResolver.canCreateBean(beanName)) { @@ -128,8 +138,15 @@ public class BeanNameELResolver extends String beanName = (String) property; if (beanNameResolver.isNameResolved(beanName)) { + boolean result; + try { + result = beanNameResolver.isReadOnly(beanName); + } catch (Throwable t) { + Util.handleThrowable(t); + throw new ELException(t); + } context.setPropertyResolved(true); - return beanNameResolver.isReadOnly(beanName); + return result; } // Return value undefined Modified: tomcat/trunk/test/javax/el/TestBeanNameELResolver.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/javax/el/TestBeanNameELResolver.java?rev=1499928&r1=1499927&r2=1499928&view=diff ============================================================================== --- tomcat/trunk/test/javax/el/TestBeanNameELResolver.java (original) +++ tomcat/trunk/test/javax/el/TestBeanNameELResolver.java Fri Jul 5 08:13:06 2013 @@ -347,6 +347,127 @@ public class TestBeanNameELResolver { } + /** + * Tests that a null context results in an NPE as per EL Javadoc. + */ + @Test(expected=NullPointerException.class) + public void testIsReadOnly01() { + BeanNameELResolver resolver = createBeanNameELResolver(); + resolver.isReadOnly(null, new Object(), new Object()); + } + + + /** + * Tests that a writable bean is reported as writable. + */ + @Test + public void testIsReadOnly02() { + + BeanNameELResolver resolver = createBeanNameELResolver(); + ELContext context = + new StandardELContext(ELManager.getExpressionFactory()); + + boolean result = resolver.isReadOnly(context, null, BEAN01_NAME); + + Assert.assertFalse(result); + Assert.assertTrue(context.isPropertyResolved()); + } + + + /** + * Tests that a read-only bean is reported as not writable. + */ + @Test + public void testIsReadOnly03() { + + BeanNameELResolver resolver = createBeanNameELResolver(); + ELContext context = + new StandardELContext(ELManager.getExpressionFactory()); + + boolean result = resolver.isReadOnly(context, null, + TesterBeanNameResolver.READ_ONLY_NAME); + + Assert.assertTrue(result); + Assert.assertTrue(context.isPropertyResolved()); + } + + + /** + * Tests that a valid bean is not resolved if base is non-null. + */ + @Test + public void testIsReadOnly04() { + + BeanNameELResolver resolver = createBeanNameELResolver(); + ELContext context = + new StandardELContext(ELManager.getExpressionFactory()); + + resolver.isReadOnly(context, new Object(), BEAN01_NAME); + + 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 testIsReadOnly05() { + + BeanNameELResolver resolver = createBeanNameELResolver(); + ELContext context = + new StandardELContext(ELManager.getExpressionFactory()); + + Object property = new Object() { + @Override + public String toString() { + return BEAN01_NAME; + } + }; + + resolver.isReadOnly(context, null, property); + + Assert.assertFalse(context.isPropertyResolved()); + } + + + /** + * Beans that don't exist should not resolve + */ + @Test + public void testIsReadOnly06() { + + BeanNameELResolver resolver = createBeanNameELResolver(); + ELContext context = + new StandardELContext(ELManager.getExpressionFactory()); + + resolver.isReadOnly(context, null, BEAN99_NAME); + + Assert.assertFalse(context.isPropertyResolved()); + } + + + /** + * Exception during resolution should be wrapped and re-thrown. + */ + @Test + public void testIsReadOnly07() { + doThrowableTest(TesterBeanNameResolver.EXCEPTION_TRIGGER_NAME, + MethodUnderTest.IS_READ_ONLY); + } + + + /** + * Throwable during resolution should be wrapped and re-thrown. + */ + @Test + public void testIsReadOnly08() { + doThrowableTest(TesterBeanNameResolver.THROWABLE_TRIGGER_NAME, + MethodUnderTest.IS_READ_ONLY); + } + + private void doThrowableTest(String trigger, MethodUnderTest method) { BeanNameELResolver resolver = createBeanNameELResolver(); ELContext context = @@ -367,6 +488,10 @@ public class TestBeanNameELResolver { resolver.getType(context, null, trigger); break; } + case IS_READ_ONLY: { + resolver.isReadOnly(context, null, trigger); + break; + } default: { // Should never happen Assert.fail("Missing case for method"); @@ -431,6 +556,7 @@ public class TestBeanNameELResolver { private static enum MethodUnderTest { GET_VALUE, SET_VALUE, - GET_TYPE + GET_TYPE, + IS_READ_ONLY } } Modified: tomcat/trunk/test/javax/el/TesterBeanNameResolver.java URL: http://svn.apache.org/viewvc/tomcat/trunk/test/javax/el/TesterBeanNameResolver.java?rev=1499928&r1=1499927&r2=1499928&view=diff ============================================================================== --- tomcat/trunk/test/javax/el/TesterBeanNameResolver.java (original) +++ tomcat/trunk/test/javax/el/TesterBeanNameResolver.java Fri Jul 5 08:13:06 2013 @@ -57,6 +57,7 @@ public class TesterBeanNameResolver exte @Override public boolean canCreateBean(String beanName) { + checkTriggers(beanName); return allowCreate; } @@ -67,6 +68,7 @@ public class TesterBeanNameResolver exte @Override public boolean isReadOnly(String beanName) { + checkTriggers(beanName); return READ_ONLY_NAME.equals(beanName); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org