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: [email protected]
For additional commands, e-mail: [email protected]