You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by dr...@apache.org on 2009/03/05 08:40:27 UTC
svn commit: r750355 - in /tapestry/tapestry5/trunk/tapestry-core/src:
main/java/org/apache/tapestry5/internal/beaneditor/
test/java/org/apache/tapestry5/internal/beaneditor/
Author: drobiazko
Date: Thu Mar 5 07:40:27 2009
New Revision: 750355
URL: http://svn.apache.org/viewvc?rev=750355&view=rev
Log:
TAP5-520: Using regular expressions with the @Validate annotation causes odd parse errors if the regexp includes common characters (including commas)
Modified:
tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGenerator.java
tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGeneratorTest.java
Modified: tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGenerator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGenerator.java?rev=750355&r1=750354&r2=750355&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGenerator.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/main/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGenerator.java Thu Mar 5 07:40:27 2009
@@ -34,7 +34,11 @@
if (annotation == null)
return null;
- return Arrays.asList(annotation.value().split(","));
+ //TAP5-520: Commas within regular expressions like {n,m} or {n,} or a\,b .
+ //We use Negative Lookahead to avoid matching the case a\,b .
+ //We use Positive Lookahead to avoid matching cases {n,m} and {n,}.
+ //http://www.regular-expressions.info/lookaround.html
+ return Arrays.asList(annotation.value().split("(?<!\\\\),(?!([0-9]*\\}))"));
}
}
Modified: tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGeneratorTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGeneratorTest.java?rev=750355&r1=750354&r2=750355&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGeneratorTest.java (original)
+++ tapestry/tapestry5/trunk/tapestry-core/src/test/java/org/apache/tapestry5/internal/beaneditor/ValidateAnnotationConstraintGeneratorTest.java Thu Mar 5 07:40:27 2009
@@ -61,7 +61,7 @@
public void multiple_constraints()
{
PropertyConduit conduit = mockPropertyConduit();
- Validate validate = newValidate("required,minlength=3");
+ Validate validate = newValidate("required,minlength=3,regexp=^([a-zA-Z0-9]{2,4})+$");
train_getAnnotation(conduit, Validate.class, validate);
@@ -69,7 +69,26 @@
ValidationConstraintGenerator gen = new ValidateAnnotationConstraintGenerator();
- assertEquals(gen.buildConstraints(null, conduit), Arrays.asList("required", "minlength=3"));
+ assertEquals(gen.buildConstraints(null, conduit), Arrays.asList("required", "minlength=3", "regexp=^([a-zA-Z0-9]{2,4})+$"));
+
+ verify();
+ }
+
+
+ @Test
+ public void regex_ranges_constraints()
+ {
+ PropertyConduit conduit = mockPropertyConduit();
+ Validate validate = newValidate("regexp=^([a]{50,125}[0-9]{2,4})+$,required,567matcher,regexp=a\\,b,regexp=a{1,}");
+
+ train_getAnnotation(conduit, Validate.class, validate);
+
+ replay();
+
+ ValidationConstraintGenerator gen = new ValidateAnnotationConstraintGenerator();
+
+ assertEquals(gen.buildConstraints(null, conduit),
+ Arrays.asList("regexp=^([a]{50,125}[0-9]{2,4})+$","required", "567matcher", "regexp=a\\,b", "regexp=a{1,}"));
verify();
}