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