You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by an...@apache.org on 2007/10/24 06:11:05 UTC
svn commit: r587773 - in /tapestry/tapestry4/trunk/tapestry-framework/src:
java/org/apache/tapestry/form/validator/Email.java
test/org/apache/tapestry/form/validator/TestEmail.java
Author: andyhot
Date: Tue Oct 23 21:11:04 2007
New Revision: 587773
URL: http://svn.apache.org/viewvc?rev=587773&view=rev
Log:
TAPESTRY-1857: Fix email perf. problems on long invalid input + tests that cover this. Email pattern after dojo, includes TLD validation.
Modified:
tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Email.java
tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestEmail.java
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Email.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Email.java?rev=587773&r1=587772&r2=587773&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Email.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Email.java Tue Oct 23 21:11:04 2007
@@ -36,8 +36,20 @@
*/
public class Email extends BaseValidator
{
- public static final String PATTERN = "^[A-Za-z0-9]+([-_\\.]*[A-Za-z0-9]+)*@[A-Za-z0-9]+([-_\\.]*[A-Za-z0-9]+)*(\\.[_A-Za-z]{2,6})$";
-
+ public static final String TLD_PATTERN = "arpa|aero|biz|com|coop|edu|gov|info|int|mil|museum|name|net|"
+ + "org|pro|travel|xxx|jobs|mobi|post|"
+ + "ac|ad|ae|af|ag|ai|al|am|an|ao|aq|ar|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|bj|bm|bn|bo|br|"
+ + "bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|cr|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|"
+ + "ec|ee|eg|er|eu|es|et|fi|fj|fk|fm|fo|fr|ga|gd|ge|gf|gg|gh|gi|gl|gm|gn|gp|gq|gr|gs|gt|gu|gw|"
+ + "gy|hk|hm|hn|hr|ht|hu|id|ie|il|im|in|io|ir|is|it|je|jm|jo|jp|ke|kg|kh|ki|km|kn|kr|kw|ky|kz|"
+ + "la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|mv|mw|mx|"
+ + "my|mz|na|nc|ne|nf|ng|ni|nl|no|np|nr|nu|nz|om|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|ps|pt|pw|py|qa|"
+ + "re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sk|sl|sm|sn|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|"
+ + "tn|to|tr|tt|tv|tw|tz|ua|ug|uk|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw";
+ public static final String DOMAIN_PATTERN = "([0-9a-z]([-0-9a-z]{0,61}[0-9a-z])?\\.)+" + "(" + TLD_PATTERN + ")";
+ public static final String USERNAME_PATTERN = "([\\\\da-z]+[-._+&'])*[\\\\da-z]+";
+ public static final String PATTERN = "^(?i)"+ USERNAME_PATTERN + "@" + "(" + DOMAIN_PATTERN + ")$";
+
// TODO: Possible thread safety issue if the validator
// is shared across threads, because the matcher
// will be too.
Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestEmail.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestEmail.java?rev=587773&r1=587772&r2=587773&view=diff
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestEmail.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestEmail.java Tue Oct 23 21:11:04 2007
@@ -26,6 +26,7 @@
import org.apache.tapestry.valid.ValidationStrings;
import org.apache.tapestry.valid.ValidatorException;
import org.testng.annotations.Test;
+import org.testng.annotations.DataProvider;
/**
* Tests for {@link org.apache.tapestry.form.validator.Email}.
@@ -36,33 +37,21 @@
@Test
public class TestEmail extends BaseValidatorTestCase
{
- public void test_OK() throws Exception
+ @Test(dataProvider = "validEmails", timeOut = 1000)
+ public void test_OK(String email) throws Exception
{
IFormComponent field = newField();
ValidationMessages messages = newMessages();
replay();
- new Email().validate(field, messages, "hlship@apache.org");
+ new Email().validate(field, messages, email);
verify();
}
- public void test_Ok_Single_Character() throws Exception
- {
- IFormComponent field = newField();
- ValidationMessages messages = newMessages();
-
- replay();
-
- Email email = new Email();
- email.validate(field, messages, "j@apache.org");
- email.validate(field, messages, "jkuhnert@a.org");
-
- verify();
- }
-
- public void test_Fail()
+ @Test(dataProvider = "invalidEmails", timeOut = 1000)
+ public void test_Fail(String email)
{
IFormComponent field = newField("My Email");
ValidationMessages messages = newMessages(
@@ -76,7 +65,7 @@
try
{
- new Email().validate(field, messages, "fred");
+ new Email().validate(field, messages, email);
unreachable();
}
catch (ValidatorException ex)
@@ -173,5 +162,28 @@
assertEquals("{\"constraints\":{\"barney\":[[tapestry.form.validation.isEmailAddress,false,true]]},"
+ "\"barney\":{\"constraints\":[\"custom message\"]}}",
json.toString());
+ }
+
+ @DataProvider(name="validEmails")
+ protected Object[][] getValidEmails() {
+ return new Object[][] {
+ {"hlship@apache.org"},
+ {"j@apache.org"},
+ {"jkuhnert@a.org"},
+ {"J@A.oRg"},
+ {"foo@example-bar.domain.com"},
+ {"FOO@EXample-bAr.domain.com"},
+ };
+ }
+
+ @DataProvider(name="invalidEmails")
+ protected Object[][] getInvalidEmails() {
+ return new Object[][] {
+ {"fred"},
+ {"foooooooooooooooooooooo"},
+ {"foooooooooooooooooooooooooooo"},
+ {"LASKFODSKFO@$#)DJMZCV)TQKALAD"},
+ {""},
+ };
}
}