Revision: 1178
http://stripes.svn.sourceforge.net/stripes/?rev=1178&view=rev
Author: bengunter
Date: 2009-10-20 17:03:08 +0000 (Tue, 20 Oct 2009)
Log Message:
-----------
Applied fix for STS-664 from 1.5.x branch, along with a required fix to a
validation unit test.
Modified Paths:
--------------
trunk/stripes/src/net/sourceforge/stripes/validation/DefaultValidationMetadataProvider.java
trunk/tests/src/net/sourceforge/stripes/validation/ValidationAnnotationsTest.java
Added Paths:
-----------
trunk/tests/src/net/sourceforge/stripes/validation/ValidationWithGenericsTest.java
Modified:
trunk/stripes/src/net/sourceforge/stripes/validation/DefaultValidationMetadataProvider.java
===================================================================
---
trunk/stripes/src/net/sourceforge/stripes/validation/DefaultValidationMetadataProvider.java
2009-10-20 16:36:41 UTC (rev 1177)
+++
trunk/stripes/src/net/sourceforge/stripes/validation/DefaultValidationMetadataProvider.java
2009-10-20 17:03:08 UTC (rev 1178)
@@ -181,6 +181,10 @@
catch (NoSuchFieldException e) {
}
+ // Work around a bug in JDK6 and earlier. See STS-664 for
more information.
+ if (accessor != null && accessor.isBridge())
+ accessor =
accessor.getDeclaringClass().getMethod(accessor.getName());
+
// this method throws an exception if there are conflicts
AnnotationInfo annotationInfo = getAnnotationInfo(clazz,
propertyName,
new PropertyWrapper[] {
Modified:
trunk/tests/src/net/sourceforge/stripes/validation/ValidationAnnotationsTest.java
===================================================================
---
trunk/tests/src/net/sourceforge/stripes/validation/ValidationAnnotationsTest.java
2009-10-20 16:36:41 UTC (rev 1177)
+++
trunk/tests/src/net/sourceforge/stripes/validation/ValidationAnnotationsTest.java
2009-10-20 17:03:08 UTC (rev 1178)
@@ -1,5 +1,7 @@
package net.sourceforge.stripes.validation;
+import java.util.Locale;
+
import net.sourceforge.stripes.StripesTestFixture;
import net.sourceforge.stripes.action.ActionBean;
import net.sourceforge.stripes.action.ActionBeanContext;
@@ -96,16 +98,25 @@
*
* @see http://www.stripesframework.org/jira/browse/STS-610
*/
+ @SuppressWarnings("unchecked")
@Test(groups="extensions")
public void testValidateTypeConverterDoesNotExtendStock() throws Exception
{
- MockRoundtrip trip = new
MockRoundtrip(StripesTestFixture.getServletContext(), getClass());
-
StripesFilter.getConfiguration().getTypeConverterFactory().add(String.class,
MyStringTypeConverter.class);
- trip.addParameter("shouldBeUpperCased", "test");
- trip.addParameter("shouldNotBeUpperCased", "test");
- trip.execute("validateTypeConverters");
- ValidationAnnotationsTest actionBean = trip.getActionBean(getClass());
- Assert.assertEquals(actionBean.shouldBeUpperCased, "TEST");
- Assert.assertEquals(actionBean.shouldNotBeUpperCased, "test");
+ TypeConverterFactory factory =
StripesFilter.getConfiguration().getTypeConverterFactory();
+ Class<? extends TypeConverter> oldtc = factory.getTypeConverter(//
+ String.class, Locale.getDefault()).getClass();
+ try {
+ MockRoundtrip trip = new
MockRoundtrip(StripesTestFixture.getServletContext(), getClass());
+ factory.add(String.class, MyStringTypeConverter.class);
+ trip.addParameter("shouldBeUpperCased", "test");
+ trip.addParameter("shouldNotBeUpperCased", "test");
+ trip.execute("validateTypeConverters");
+ ValidationAnnotationsTest actionBean =
trip.getActionBean(getClass());
+ Assert.assertEquals(actionBean.shouldBeUpperCased, "TEST");
+ Assert.assertEquals(actionBean.shouldNotBeUpperCased, "test");
+ }
+ finally {
+ factory.add(String.class, (Class<? extends TypeConverter<?>>)
oldtc);
+ }
}
@Validate(encrypted=true)
Added:
trunk/tests/src/net/sourceforge/stripes/validation/ValidationWithGenericsTest.java
===================================================================
---
trunk/tests/src/net/sourceforge/stripes/validation/ValidationWithGenericsTest.java
(rev 0)
+++
trunk/tests/src/net/sourceforge/stripes/validation/ValidationWithGenericsTest.java
2009-10-20 17:03:08 UTC (rev 1178)
@@ -0,0 +1,75 @@
+package net.sourceforge.stripes.validation;
+
+import net.sourceforge.stripes.StripesTestFixture;
+import net.sourceforge.stripes.action.ActionBean;
+import net.sourceforge.stripes.action.ActionBeanContext;
+import net.sourceforge.stripes.action.Resolution;
+import net.sourceforge.stripes.mock.MockRoundtrip;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+/**
+ * Tests some cases where generics have been known to mess up validation.
+ *
+ * @author Ben Gunter
+ */
+public class ValidationWithGenericsTest {
+ public static class User {
+ private String username, password;
+ public String getUsername() { return username; }
+ public void setUsername(String username) { this.username = username; }
+ public String getPassword() { return password; }
+ public void setPassword(String password) { this.password = password; }
+ }
+
+ public static class BaseActionBean<T> implements ActionBean {
+ private ActionBeanContext context;
+ private T model;
+ public T getModel() { return model; }
+ public void setModel(T model) { this.model = model; }
+ public ActionBeanContext getContext() { return context; }
+ public void setContext(ActionBeanContext context) { this.context =
context; }
+ }
+
+ public static class TestActionBean extends BaseActionBean<User> {
+ @Override
+ @ValidateNestedProperties( {
+ @Validate(field = "username", required = true),
+ @Validate(field = "password", required = true)
+ })
+ public User getModel() { return super.getModel(); }
+ public Resolution login() { return null; }
+ }
+
+ /**
+ * Attempts to trigger validation errors on an ActionBean declared with a
type parameter.
+ * Validation was crippled by a bug in JDK6 and earlier.
+ *
+ * @see http://www.stripesframework.org/jira/browse/STS-664
+ */
+ @Test(groups = "fast")
+ public void testActionBeanWithTypeParameter() throws Exception {
+ // Trigger the validation errors
+ MockRoundtrip trip = new
MockRoundtrip(StripesTestFixture.getServletContext(),
+ TestActionBean.class);
+ trip.execute("login");
+ ValidationErrors errors = trip.getValidationErrors();
+ Assert.assertNotNull(errors, "Expected validation errors but got
none");
+ Assert.assertFalse(errors.isEmpty(), "Expected validation errors but
got none");
+ Assert.assertEquals(errors.size(), 2, "Expected two validation errors
but got "
+ + errors.size());
+
+ // Now add the required parameters and make sure the validation errors
don't happen
+ trip.addParameter("model.username", "Scooby");
+ trip.addParameter("model.password", "Shaggy");
+ trip.execute("login");
+ errors = trip.getValidationErrors();
+ Assert.assertTrue(errors == null || errors.isEmpty(), "Got unexpected
validation errors");
+
+ TestActionBean bean = trip.getActionBean(TestActionBean.class);
+ Assert.assertNotNull(bean);
+ Assert.assertEquals(bean.getModel().getUsername(), "Scooby");
+ Assert.assertEquals(bean.getModel().getPassword(), "Shaggy");
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Come build with us! The BlackBerry(R) Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9 - 12, 2009. Register now!
http://p.sf.net/sfu/devconference
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development