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]+)[EMAIL 
PROTECTED]([-_\\.]*[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 [EMAIL PROTECTED] 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, "[EMAIL PROTECTED]");
+        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, "[EMAIL PROTECTED]");
-        email.validate(field, messages, "[EMAIL PROTECTED]");
-
-        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[][] {
+                {"[EMAIL PROTECTED]"},
+                {"[EMAIL PROTECTED]"},
+                {"[EMAIL PROTECTED]"},
+                {"[EMAIL PROTECTED]"},
+                {"[EMAIL PROTECTED]"},
+                {"[EMAIL PROTECTED]"},
+        };
+    }
+
+    @DataProvider(name="invalidEmails")
+    protected Object[][] getInvalidEmails() {
+        return new Object[][] {
+                {"fred"},
+                {"foooooooooooooooooooooo"},
+                {"foooooooooooooooooooooooooooo"},
+                {"[EMAIL PROTECTED])DJMZCV)TQKALAD"},
+                {""},
+        };
     }
 }


Reply via email to