You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by gv...@apache.org on 2006/04/11 03:43:46 UTC

svn commit: r393130 [2/2] - in /struts/shale/trunk: ./ build/ clay-plugin/src/test/org/apache/shale/clay/config/ core-library/ core-library/src/conf/ core-library/src/java/org/apache/shale/component/ core-library/src/java/org/apache/shale/taglib/ core-...

Modified: struts/shale/trunk/core-library/src/test/org/apache/shale/validator/CommonsValidatorTestCase.java
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/core-library/src/test/org/apache/shale/validator/CommonsValidatorTestCase.java?rev=393130&r1=393129&r2=393130&view=diff
==============================================================================
--- struts/shale/trunk/core-library/src/test/org/apache/shale/validator/CommonsValidatorTestCase.java (original)
+++ struts/shale/trunk/core-library/src/test/org/apache/shale/validator/CommonsValidatorTestCase.java Mon Apr 10 18:43:42 2006
@@ -16,11 +16,23 @@
 
 package org.apache.shale.validator;
 
+import java.io.StringWriter;
+import java.util.Iterator;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.component.UIComponent;
+import javax.faces.component.UIForm;
+import javax.faces.component.UIInput;
+import javax.faces.component.UIViewRoot;
+import javax.faces.component.html.HtmlForm;
+import javax.faces.component.html.HtmlInputText;
+import javax.faces.context.ResponseWriter;
+
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
 import org.apache.commons.validator.ValidatorAction;
-
+import org.apache.shale.component.ValidatorScript;
 import org.apache.shale.test.base.AbstractJsfTestCase;
 
 
@@ -30,6 +42,44 @@
 public class CommonsValidatorTestCase extends AbstractJsfTestCase {
 
 
+    
+    protected static final Object[] COMPONENTS = {
+        new String[] {"javax.faces.HtmlInputText", "javax.faces.component.html.HtmlInputText"},
+        new String[] {"org.apache.shale.ValidatorScript", "org.apache.shale.component.ValidatorScript"},
+        new String[] {"javax.faces.HtmlForm", "javax.faces.component.html.HtmlForm"},
+
+    };
+
+    // load the mock component config data
+    protected void loadComponents() {
+       for (int i = 0; i < COMPONENTS.length; i++) {
+          application.addComponent(((String[])COMPONENTS[i])[0], ((String[])COMPONENTS[i])[1]);
+       }
+    }
+
+      
+    protected static final Object[] CONVERTERS = {
+               new String[] {"javax.faces.DateTime", "javax.faces.convert.DateTimeConverter"}
+    };    
+    
+    protected void loadConverters() {
+        for (int i = 0; i < CONVERTERS.length; i++) {
+           application.addConverter(((String[])CONVERTERS[i])[0], ((String[])CONVERTERS[i])[1]);
+        }
+    }
+    
+    public static final Object[] VALIDATORS = {
+        new String[] {"org.apache.shale.CommonsValidator", "org.apache.shale.validator.CommonsValidator"}
+    };     
+
+    protected void loadValidators() {
+        for (int i = 0; i < VALIDATORS.length; i++) {
+           application.addValidator(((String[])VALIDATORS[i])[0], ((String[])VALIDATORS[i])[1]);
+        }
+    }
+   
+    
+   
     // ------------------------------------------------------------ Constructors
 
 
@@ -51,6 +101,10 @@
              Globals.DEFAULT_VALIDATOR_RULES +
              ", /org/apache/shale/validator/custom-rules.xml");
 
+        
+        loadComponents();
+        loadConverters();
+        loadValidators();
     }
 
 
@@ -78,26 +132,1087 @@
 
     // Test access to the 'required' validation rule
     public void testRequired() {
-
+        
         ValidatorAction va = CommonsValidator.getValidatorAction("required");
         assertNotNull(va);
-        assertEquals("required",va.getName());
+        assertEquals("required", va.getName());
         assertEquals("org.apache.shale.validator.CommonsValidator",
                 va.getClassname());
         assertEquals("isSupplied",va.getMethod());
+        
 
     }
 
+    
+    //test validation rule
+    public static boolean isValid(String value) {
+        if (value != null && value.equals("blue") ||
+            value.equals("red"))
+           return true;
+        else
+           return false;
+    }
+        
     // Test access to a custom validation rule
     public void testCustom() {
 
+        application.setMessageBundle("org.apache.shale.validator.messages");
+
+        
         ValidatorAction va = CommonsValidator.getValidatorAction("testRule");
         assertNotNull(va);
-        assertEquals("testRule",va.getName());
-        assertEquals("com.example.myapp.CustomRules",
+        assertEquals("testRule", va.getName());
+        assertEquals("org.apache.shale.validator.CommonsValidatorTestCase",
                 va.getClassname());
-        assertEquals("isValid",va.getMethod());
+        assertEquals("isValid", va.getMethod());
+        
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("testRule", form1);
+        component1.setRequired(true);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "testRule");
+        
+        //set the value
+        component1.setSubmittedValue("blue");
+        
+        // invoke component validation
+        component1.validate(facesContext);
+        
+        // invoke component validation
+        component1.validate(facesContext);
+    
+        // check for a error message
+        checkMessages(component1);
+       
+    }
+    
+    // test the required rule with two forms
+    public void testValidateRequired() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("requiredField", form1);
+        component1.setRequired(true);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "required");
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("requiredField", form2);
+        component2.setRequired(true);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "required");
+       
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("   ");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " is required.", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_required()",
+           "test2_required()",
+           "&& validateRequired(form)",
+           "function validateRequired(form)",
+           "function jcv_retrieveFormName(form)"
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        //System.out.println(htmlSnippet.toString());
+    }
+    
+
+    // test the maxlength rule with two forms
+    public void testValidateMaxlength() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("maxlength", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "maxlength");
+        validator1.setMaxLength(new Integer(5));
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("maxlength", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "maxlength");
+        validator2.setMaxLength(new Integer(5));
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("0123456789");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " can not be greater than " + validator1.getMaxLength() + " characters.", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_maxlength()",
+           "test2_maxlength()",
+           "&& validateMaxLength(form)",
+           "function validateMaxLength(form)",
+           "function jcv_retrieveFormName(form)"
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        //System.out.println(htmlSnippet.toString());
+    }
+
+    
+    // test the minlength rule with two forms
+    public void testValidateMinlength() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("minlength", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "minlength");
+        validator1.setMinLength(new Integer(5));
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("minlength", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "minlength");
+        validator2.setMinLength(new Integer(5));
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("0");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " can not be less than " + validator1.getMinLength() + " characters.", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_minlength()",
+           "test2_minlength()",
+           "&& validateMinLength(form)",
+           "function validateMinLength(form)",
+           "function jcv_retrieveFormName(form)"
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        System.out.println(htmlSnippet.toString());
+    }
+
+    
+    // test the mask rule with two forms
+    public void testValidateMask() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("mask", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "mask");
+        validator1.setMask("^[a-zA-Z]*$");
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("mask", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "mask");
+        validator2.setMask("^[a-zA-Z]*$");
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("123Test");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " is invalid.", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_mask()",
+           "test2_mask()",
+           "&& validateMask(form)",
+           "function validateMask(form)",
+           "function jcv_retrieveFormName(form)"
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        //System.out.println(htmlSnippet.toString());
+    }
+    
+  
+    // test the byte rule with two forms
+    public void testValidateByte() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("byte", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "byte");
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("byte", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "byte");
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("129");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " must be a byte.", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_ByteValidations()",
+           "test2_ByteValidations()",
+           "&& validateByte(form)",
+           "function validateByte(form)",
+           "function jcv_retrieveFormName(form)"
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        //System.out.println(htmlSnippet.toString());
+    }
+   
+
+    // test the short rule with two forms
+    public void testValidateShort() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("short", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "short");
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("short", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "short");
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("32768");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " must be a short.", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_ShortValidations()",
+           "test2_ShortValidations()",
+           "&& validateShort(form)",
+           "function validateShort(form)",
+           "function jcv_retrieveFormName(form)"
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        //System.out.println(htmlSnippet.toString());
+    }
+   
+    // test the integer rule with two forms
+    public void testValidateInteger() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("integer", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "integer");
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("integer", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "integer");
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("2147483648");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " must be an integer.", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_IntegerValidations()",
+           "test2_IntegerValidations()",
+           "&& validateInteger(form)",
+           "function validateInteger(form)",
+           "function jcv_retrieveFormName(form)"
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        //System.out.println(htmlSnippet.toString());
+    }
+    
+
+    // test the float rule with two forms
+    public void testValidateFloat() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("float", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "float");
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("float", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "float");
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("ABCD");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " must be a float.", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_FloatValidations()",
+           "test2_FloatValidations()",
+           "&& validateFloat(form)",
+           "function validateFloat(form)",
+           "function jcv_retrieveFormName(form)"
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        //System.out.println(htmlSnippet.toString());
+    }
 
+
+    // test the double rule with two forms
+    public void testValidateDouble() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("double", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "double");
+        validator1.setClient(Boolean.FALSE);
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("double", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "double");
+        validator2.setClient(Boolean.FALSE);
+        
+        
+        //set the value
+        component1.setSubmittedValue("ABCD");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " must be a double.", component1);
+        
+    }
+
+    // test the long rule with two forms
+    public void testValidateLong() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("long", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "long");
+        validator1.setClient(Boolean.FALSE);
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("long", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "long");
+        validator2.setClient(Boolean.FALSE);
+        
+        
+        //set the value
+        component1.setSubmittedValue("99999999999999999999999999999999999999999999999999999999");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " must be a long.", component1);
+        
+    }
+    
+    
+    
+    
+    // test the date rule with two forms
+    public void testValidateDate() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("date", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "date");
+        validator1.setDatePatternStrict("MM/dd/yyyy");
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("date", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "date");
+        validator2.setDatePatternStrict("MM/dd/yyyy");
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("04/31/2006");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " is not a date.", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_DateValidations()",
+           "test2_DateValidations()",
+           "&& validateDate(form)",
+           "function validateDate(form)",
+           "function jcv_retrieveFormName(form)"
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        //System.out.println(htmlSnippet.toString());
+    }
+    
+    // test the intRange rule with two forms
+    public void testValidateIntRange() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("intRange", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "intRange");
+        validator1.setMax(new Double(5));
+        validator1.setMin(new Double(1));
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("intRange", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "intRange");
+        validator2.setMax(new Double(5));
+        validator2.setMin(new Double(1));
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("6");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " is not in the range " + validator1.getMin().intValue() 
+                + " through " + validator1.getMax().intValue() + ".", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_intRange()",
+           "test2_intRange()",
+           "&& validateIntRange(form)",
+           "function validateIntRange(form)",
+           "function jcv_retrieveFormName(form)",
+           "test1_IntegerValidations()",
+           "test2_IntegerValidations()"
+
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        //System.out.println(htmlSnippet.toString());
+    }
+
+ 
+    // test the floatRange rule with two forms
+    public void testValidateFloatRange() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("floatRange", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "floatRange");
+        validator1.setMax(new Double(5));
+        validator1.setMin(new Double(1));
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("floatRange", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "floatRange");
+        validator2.setMax(new Double(5));
+        validator2.setMin(new Double(1));
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("6");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " is not in the range " + validator1.getMin().intValue() 
+                + " through " + validator1.getMax().intValue() + ".", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_floatRange()",
+           "test2_floatRange()",
+           "&& validateFloatRange(form)",
+           "function validateFloatRange(form)",
+           "function jcv_retrieveFormName(form)",
+           "test1_FloatValidations()",
+           "test2_FloatValidations()"
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        //System.out.println(htmlSnippet.toString());
+    }
+    
+    // test the doubleRange rule with two forms
+    public void testValidateDoubleRange() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("doubleRange", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "doubleRange");
+        validator1.setMax(new Double(5));
+        validator1.setMin(new Double(1));
+
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("doubleRange", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "doubleRange");
+        validator2.setMax(new Double(5));
+        validator2.setMin(new Double(1));
+                
+        //set the value
+        component1.setSubmittedValue("6");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " is not in the range " + validator1.getMin().intValue() 
+                + " through " + validator1.getMax().intValue() + ".", component1);
+    }
+
+    
+
+    // test the creditCard rule with two forms
+    public void testValidateCreditCard() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("creditCard", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "creditCard");
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("creditCard", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "creditCard");
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("11111111111111111111");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " is an invalid credit card number.", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_creditCard()",
+           "test2_creditCard()",
+           "&& validateCreditCard(form)",
+           "function validateCreditCard(form)",
+           "function jcv_retrieveFormName(form)"
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        //System.out.println(htmlSnippet.toString());
+    }
+    
+    
+    // test the email rule with two forms
+    public void testValidateEmail() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("email", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "email");
+       
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("email", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "email");
+        
+        //create a script component
+        ValidatorScript script = createValidatorScript(root);
+        
+        //set the value
+        component1.setSubmittedValue("xyz@abc");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " is an invalid e-mail address.", component1);
+          
+        // render the javascript for the form
+        StringBuffer htmlSnippet = encode(script);
+        
+        // search tokens to test for in the javascript
+        String[] searchTokens = {
+           "test1_email()",
+           "test2_email()",
+           "&& validateEmail(form)",
+           "function validateEmail(form)",
+           "function jcv_retrieveFormName(form)"
+        };
+        
+        //look for all search tokens
+        checkScript(htmlSnippet, searchTokens);
+        
+        //System.out.println(htmlSnippet.toString());
+    }
+    
+
+    // test the url rule with two forms
+    public void testValidateUrl() throws Exception {
+        
+        // find the view root
+        UIViewRoot root = facesContext.getViewRoot();
+        assertNotNull(root);
+        
+        //create a form 1
+        UIComponent form1 = this.createForm("test1", root);
+         
+        //create a dummy component 1
+        HtmlInputText component1 = createInputText("url", form1);
+               
+        //create a required field/server rule 
+        CommonsValidator validator1 = createValidator(component1, "url");
+        validator1.setClient(Boolean.FALSE);
+        
+        //create a form 2
+        UIComponent form2 = this.createForm("test2", root);
+
+        //create a dummy component 2
+        HtmlInputText component2 = createInputText("url", form2);
+               
+        //create a required field/server rule 
+        CommonsValidator validator2 = createValidator(component2, "url");
+        validator2.setClient(Boolean.FALSE);
+                
+        //set the value
+        component1.setSubmittedValue("xyz://www.wyantdata.com");
+        // invoke component validation
+        component1.validate(facesContext);
+                        
+        // check for a error message
+        checkMessage(component1.getId() + " is an invalid url address.", component1);
+          
+    }
+
+    
+    private void checkScript(StringBuffer htmlSnippet, String[] searchTokens) {
+        for (int i = 0; i < searchTokens.length; i++) {
+           this.assertTrue("Not Found: " + searchTokens[i], (htmlSnippet.indexOf(searchTokens[i]) > -1));    
+        }
+    }
+    
+    private HtmlForm createForm(String id, UIComponent root) {
+        HtmlForm component = (HtmlForm) facesContext.getApplication().createComponent("javax.faces.HtmlForm");
+        assertNotNull(component);
+        
+        component.setId(id);
+        component.getAttributes().put("onsubmit", "return validateForm(this);");
+        
+        root.getChildren().add(root.getChildCount(), component);        
+        return component;            
+    }
+    
+    
+    private HtmlInputText createInputText(String id, UIComponent parent) {
+        HtmlInputText component = (HtmlInputText) facesContext.getApplication().createComponent("javax.faces.HtmlInputText");
+        assertNotNull(component);
+
+        component.setId(id); 
+        parent.getChildren().add(parent.getChildCount(), component);
+        
+        return component;
+    }
+    
+   
+    private ValidatorScript createValidatorScript(UIViewRoot root) {
+        //create a script component
+        ValidatorScript script = (ValidatorScript) facesContext.getApplication().createComponent("org.apache.shale.ValidatorScript");
+        assertNotNull(script);
+        script.setId(root.createUniqueId());
+        script.setFunctionName("validateForm");
+        
+        root.getChildren().add(root.getChildCount(), script);
+
+        return script;
+    }
+    
+    
+    
+    private CommonsValidator createValidator(UIInput parent, String type) {
+        //create a required field/server rule
+        CommonsValidator validator = (CommonsValidator) facesContext.getApplication().createValidator("org.apache.shale.CommonsValidator");
+        assertNotNull(validator);
+        
+        validator.setType(type);
+        validator.setArg(parent.getId());
+        validator.setServer(Boolean.TRUE);
+        validator.setClient(Boolean.TRUE);
+        parent.addValidator(validator);
+        
+        return validator;
+    }
+    
+  
+    private void checkMessages(UIInput component) {
+        String id = component.getClientId(facesContext);
+        Iterator mi = facesContext.getMessages(id);
+        boolean hasMessage = false;
+        while (mi.hasNext()) {
+           hasMessage = true;
+        }
+        
+        assertFalse(id + " has messages", hasMessage);   
+       
+    }
+    
+    
+    private void checkMessage(String expected, UIInput component) {
+        String id = component.getClientId(facesContext);
+        Iterator mi = facesContext.getMessages(id);
+        boolean hasMessage = false;
+        while (mi.hasNext()) {
+           FacesMessage message = (FacesMessage) mi.next();    
+           assertEquals(expected, message.getDetail());
+           hasMessage = true;
+        }
+        
+        assertTrue(id + " has messages", hasMessage);   
+    }
+    
+    
+    
+    //render and return the results
+    private StringBuffer encode(UIComponent component) throws Exception {
+        //builds a buffer to write the page to
+        StringWriter writer = new StringWriter();
+        //create a buffered response writer
+        ResponseWriter buffResponsewriter = facesContext.getRenderKit()
+                        .createResponseWriter(writer, null, response.getCharacterEncoding());
+        //push buffered writer to the faces context
+        facesContext.setResponseWriter(buffResponsewriter);
+        //start a document
+        buffResponsewriter.startDocument();
+        
+        //render HTML
+        component.encodeBegin(facesContext);
+        component.encodeChildren(facesContext);
+        component.encodeEnd(facesContext);
+        
+        //end the document
+        buffResponsewriter.endDocument();
+        
+        return writer.getBuffer();
     }
+    
 
 }

Modified: struts/shale/trunk/core-library/src/test/org/apache/shale/validator/custom-rules.xml
URL: http://svn.apache.org/viewcvs/struts/shale/trunk/core-library/src/test/org/apache/shale/validator/custom-rules.xml?rev=393130&r1=393129&r2=393130&view=diff
==============================================================================
--- struts/shale/trunk/core-library/src/test/org/apache/shale/validator/custom-rules.xml (original)
+++ struts/shale/trunk/core-library/src/test/org/apache/shale/validator/custom-rules.xml Mon Apr 10 18:43:42 2006
@@ -6,7 +6,7 @@
    <global>
 
        <validator name="testRule"
-             classname="com.example.myapp.CustomRules"
+             classname="org.apache.shale.validator.CommonsValidatorTestCase"
              method="isValid"
              methodParams="java.lang.String"
              msg="errors.invalid">



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org