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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org