You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by hl...@apache.org on 2007/02/27 23:11:27 UTC

svn commit: r512442 [2/2] - in /tapestry/tapestry5/tapestry-core/trunk/src: main/java/org/apache/tapestry/ main/java/org/apache/tapestry/corelib/base/ main/java/org/apache/tapestry/corelib/components/ main/java/org/apache/tapestry/internal/ main/java/o...

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/MinLength.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/MinLength.java?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/MinLength.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/MinLength.java Tue Feb 27 14:11:23 2007
@@ -14,7 +14,11 @@
 
 package org.apache.tapestry.validator;
 
+import static org.apache.tapestry.TapestryUtils.quote;
+
 import org.apache.tapestry.Field;
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.PageRenderSupport;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.Validator;
 import org.apache.tapestry.ioc.MessageFormatter;
@@ -33,7 +37,12 @@
             String value) throws ValidationException
     {
         if (value.length() < constraintValue)
-            throw new ValidationException(formatter.format(constraintValue, field.getLabel()));
+            throw new ValidationException(buildMessage(formatter, field, constraintValue));
+    }
+
+    private String buildMessage(MessageFormatter formatter, Field field, Integer constraintValue)
+    {
+        return formatter.format(constraintValue, field.getLabel());
     }
 
     public Class<Integer> getConstraintType()
@@ -49,5 +58,15 @@
     public Class<String> getValueType()
     {
         return String.class;
+    }
+
+    public void render(Field field, Integer constraintValue, MessageFormatter formatter,
+            MarkupWriter writer, PageRenderSupport pageRenderSupport)
+    {
+        pageRenderSupport.addScript(
+                "Tapestry.Field.minlength('%s', %d, %s);",
+                field.getClientId(),
+                constraintValue,
+                quote(buildMessage(formatter, field, constraintValue)));
     }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/Required.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/Required.java?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/Required.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/java/org/apache/tapestry/validator/Required.java Tue Feb 27 14:11:23 2007
@@ -14,7 +14,11 @@
 
 package org.apache.tapestry.validator;
 
+import static org.apache.tapestry.TapestryUtils.quote;
+
 import org.apache.tapestry.Field;
+import org.apache.tapestry.MarkupWriter;
+import org.apache.tapestry.PageRenderSupport;
 import org.apache.tapestry.ValidationException;
 import org.apache.tapestry.Validator;
 import org.apache.tapestry.ioc.MessageFormatter;
@@ -34,7 +38,12 @@
             throws ValidationException
     {
         if (value == null || value.toString().equals(""))
-            throw new ValidationException(formatter.format(field.getLabel()));
+            throw new ValidationException(buildMessage(formatter, field));
+    }
+
+    private String buildMessage(MessageFormatter formatter, Field field)
+    {
+        return formatter.format(field.getLabel());
     }
 
     public Class<Void> getConstraintType()
@@ -50,5 +59,15 @@
     public Class<Object> getValueType()
     {
         return Object.class;
+    }
+
+    public void render(Field field, Void constraintValue, MessageFormatter formatter,
+            MarkupWriter writer, PageRenderSupport pageRenderSupport)
+    {
+        pageRenderSupport.addScript(
+                "Tapestry.Field.required('%s', %s);",
+                field.getClientId(),
+                quote(buildMessage(formatter, field)));
+
     }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/internal/ValidationMessages.properties Tue Feb 27 14:11:23 2007
@@ -13,12 +13,14 @@
 # limitations under the License.
 
 # We try to keep these consistent, with the constraint value (if applicable)
-# as the first parameter, and the field's label as the second parameter.
+# as the first parameter, and the field's label as the second parameter. Occasionally
+# we must use specific indexing when that's not the best order.
 
 required=You must provide a value for %s.
 minimum-string-length=You must provide at least %d characters for %s.
 maximum-string-length=You may provide at most %d characters for %s.
 min-integer=%2$s requires a value of at least %1$d. 
+max-integer=%2$s requires a value no larger than %1$d.
 
 # This is where the translator messages go.
 

Added: tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/tapestry.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/tapestry.js?view=auto&rev=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/tapestry.js (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/main/resources/org/apache/tapestry/tapestry.js Tue Feb 27 14:11:23 2007
@@ -0,0 +1,182 @@
+// Copyright 2007 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+var Tapestry = {
+
+  registerForm : function(form) {
+    form = $(form);
+    
+    form.onsubmit = function() {
+      var event = new Tapestry.FormEvent(form);
+  
+      form.getElements().each(function (element) { 
+        if (element.fieldEventManager != undefined) {
+          event.field = element;
+          element.fieldEventManager.validateInput(event);
+          
+          if (event.abort) throw $break;
+        }     
+      });
+
+      return event.result;
+    };
+    
+    form.invalidField = function(field, event, message) {
+             
+      field = $(field);
+      if (field.focus) field.focus();
+      if (field.select) field.select();    
+      
+      window.alert(message);
+      
+      // While we're still using the primitive popup system, we need to abort the event
+      // after displaying the alert. 
+      event.abort = true;
+    };
+
+  },
+  
+  FormEvent : Class.create(),
+  
+  FieldEventManager : Class.create(),
+    
+  // Adds a validator for a field.  A FieldEventManager is added, if necessary.
+  // The validator will be called only for non-blank values, unless acceptBlank is
+  // true (in most cases, acceptBlank is flase). The validator is a function
+  // that accepts the current field value as its first parameter, and a
+  // Tapestry.FormEvent as its second.  It can invoke recordError() on the event
+  // if the input is not valid.
+  
+  addValidator : function(field, acceptBlank, validator) {
+    field = $(field);
+    
+    if (field.fieldEventManager == undefined) new Tapestry.FieldEventManager(field);
+    
+    field.fieldEventManager.addValidator(acceptBlank, validator); 
+  }
+    
+};
+
+// Collection of field based functions related to validation.
+
+Tapestry.Field = {
+  required : function(field, message) {
+    Tapestry.addValidator(field, true, function(value, event) {
+      if (value == '')
+        event.recordError(message);
+    });
+  },
+  
+  minlength : function(field, length, message) {
+    Tapestry.addValidator(field, false, function(value, event) {
+      if (value.length < length)
+        event.recordError(message);
+    });
+  },
+  
+  maxlength : function(field, maxlength, message) {
+    Tapestry.addValidator(field, false, function(value, event) {
+      if (value.length > maxlength)
+        event.recordError(message);
+    });
+  },
+  
+  min : function(field, minValue, message) {
+    Tapestry.addValidator(field, false, function(value, event) {
+      if (value < minValue)
+        event.recordError(message);
+    });
+  },
+  
+  max : function(field, maxValue, message) {
+    Tapestry.addValidator(field, false, function(value, event) {
+      if (value > maxValue)
+        event.recordError(message);
+    });
+  }  
+};
+
+
+// A Tapestry.FormEvent is used when the form sends presubmit and submit events to
+// a FieldEventManager. It allows the associated handlers to indirectly invoke
+// the Form's invalidField() method, and it tracks a result flag (true for success ==
+// no field errors, false if any field errors).
+
+Tapestry.FormEvent.prototype = {
+
+  initialize : function(form) {
+    this.form = $(form);
+    this.result = true;
+  },
+ 
+  // Invoked by a validator function (which is passed the event) to record an error
+  // for the associated field. The event knows the field and form and invoke's
+  // the (added) form method invalidField().  Sets the event's result field to false
+  // (i.e., don't allow the form to submit), and sets the event's error field to
+  // true.
+     
+  recordError : function(message) {
+    this.form.invalidField(this.field, this, message);
+    this.result = false;
+    this.error = true;
+  }
+};
+
+Tapestry.FieldEventManager.prototype = {
+
+  initialize : function(field) {
+  
+    $(field).fieldEventManager = this;
+  
+    this.validators = [ ];
+  },
+
+  // Adds a validator.  acceptBlank is true if the validator should be invoked regardless of
+  // the value.  Usually acceptBlank is false, meaning that the validator will be skipped if
+  // the field's value is blank. The validator itself is a function that is passed the
+  // field's value and the Tapestry.FormEvent object.  When a validator invokes event.recordError(),
+  // any subsequent validators for that field are skipped.
+  
+  addValidator : function(acceptBlank, validator) {
+  
+    this.validators.push([ acceptBlank, validator]);
+  },
+
+  // Invoked from the Form's onsubmit event handler. Gets the fields value and invokes
+  // each validator (unless the value is blank) until a validator returns false. Validators
+  // should not modify the field's value.
+  
+  validateInput : function(event) {
+  	var value = $F(event.field);
+  	var isBlank = (value == '');
+  	 	
+    event.error = false;
+  	   	 	
+  	this.validators.each(function(tuple) {
+  	
+  	  var acceptBlank = tuple[0];
+  	  var validator = tuple[1];
+  	  
+  	  if (acceptBlank || !isBlank) {
+  	     
+  	    validator(value, event);
+  	    
+  	    // event.error is set by Tapestry.FormEvent.recordError(). 
+  	    
+  	    if (event.error) throw $break;
+  	  }  	
+  	});
+  }
+};
+ 
\ No newline at end of file

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/BeanEditorDemo.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/BeanEditorDemo.html?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/BeanEditorDemo.html (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/BeanEditorDemo.html Tue Feb 27 14:11:23 2007
@@ -1,8 +1,8 @@
 <t:comp type="Border"
 	xmlns:t="http://tapestry.apache.org/schema/tapestry_5_0_0.xsd">
-	<h1>BeanEditor Component Demo</h1>
+	<h1>${pageTitle}</h1>
 
-	<t:comp id="edit" object="registrationData" submitlabel="Register">
+	<t:comp id="edit" submitlabel="Register">
 
 		<t:parameter name="firstName">
 			<label t:type="Label" for="firstName" /> <input t:type="TextField"

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/Start.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/Start.html?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/Start.html (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/app1/WEB-INF/Start.html Tue Feb 27 14:11:23 2007
@@ -117,7 +117,7 @@
                         <a t:type="PageLink" page="pagelinkcontext">PageLink Context Demo</a> --
                         passing explicit context in a page render link </li>
                   <li>
-                    <a t:type="pagelink" page="scriptdemo">Script Demo</a> -- basic JavaScript integration
+                    <a t:type="pagelink" page="ValidBeanEditorDemo">Client Validation Demo</a> --BeanEditor with validation enabled
                   </li>
                 </ul>
             </td>

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/TapestryUtilsTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/TapestryUtilsTest.java?view=auto&rev=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/TapestryUtilsTest.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/TapestryUtilsTest.java Tue Feb 27 14:11:23 2007
@@ -0,0 +1,30 @@
+// Copyright 2007 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class TapestryUtilsTest extends Assert
+{
+    @Test
+    public void string_quoting()
+    {
+        assertEquals(
+                TapestryUtils.quote("Suzy said: \"It's not the proper time\"."),
+                "'Suzy said: \\\"It\\'s not the proper time\\\".'");
+
+    }
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/SelectTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/SelectTest.java?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/SelectTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/corelib/components/SelectTest.java Tue Feb 27 14:11:23 2007
@@ -31,7 +31,7 @@
 import org.apache.tapestry.internal.OptionGroupModelImpl;
 import org.apache.tapestry.internal.OptionModelImpl;
 import org.apache.tapestry.internal.SelectModelImpl;
-import org.apache.tapestry.internal.TapestryUtils;
+import org.apache.tapestry.internal.TapestryInternalUtils;
 import org.apache.tapestry.internal.services.MarkupWriterImpl;
 import org.apache.tapestry.internal.test.InternalBaseTestCase;
 import org.apache.tapestry.ioc.internal.util.CollectionFactory;
@@ -79,7 +79,7 @@
     @Test
     public void just_options() throws Exception
     {
-        List<OptionModel> options = TapestryUtils
+        List<OptionModel> options = TapestryInternalUtils
                 .toOptionModels("fred=Fred Flintstone,barney=Barney Rubble");
 
         Select select = new Select();
@@ -150,9 +150,9 @@
     @Test
     public void option_groups() throws Exception
     {
-        OptionGroupModel husbands = new OptionGroupModelImpl("Husbands", false, TapestryUtils
+        OptionGroupModel husbands = new OptionGroupModelImpl("Husbands", false, TapestryInternalUtils
                 .toOptionModels("Fred,Barney"));
-        OptionGroupModel wives = new OptionGroupModelImpl("Wives", true, TapestryUtils
+        OptionGroupModel wives = new OptionGroupModelImpl("Wives", true, TapestryInternalUtils
                 .toOptionModels("Wilma,Betty"));
         List<OptionGroupModel> groupModels = CollectionFactory.newList(husbands, wives);
 
@@ -175,12 +175,12 @@
     @Test
     public void option_groups_precede_ungroup_options() throws Exception
     {
-        OptionGroupModel husbands = new OptionGroupModelImpl("Husbands", false, TapestryUtils
+        OptionGroupModel husbands = new OptionGroupModelImpl("Husbands", false, TapestryInternalUtils
                 .toOptionModels("Fred,Barney"));
 
         Select select = new Select();
 
-        select.setModel(new SelectModelImpl(Collections.singletonList(husbands), TapestryUtils
+        select.setModel(new SelectModelImpl(Collections.singletonList(husbands), TapestryInternalUtils
                 .toOptionModels("Wilma,Betty")));
         select.setValue("Fred");
 
@@ -200,7 +200,7 @@
     {
         Map<String, String> attributes = Collections.singletonMap("class", "pixie");
 
-        OptionGroupModel husbands = new OptionGroupModelImpl("Husbands", false, TapestryUtils
+        OptionGroupModel husbands = new OptionGroupModelImpl("Husbands", false, TapestryInternalUtils
                 .toOptionModels("Fred,Barney"), attributes);
 
         Select select = new Select();

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/IntegrationTests.java Tue Feb 27 14:11:23 2007
@@ -945,7 +945,7 @@
     {
         _selenium.open(BASE_URL);
 
-        clickAndWait("link=Script Demo");
+        clickAndWait("link=Client Validation Demo");
 
         assertTextSeries(
                 "//script[%d]/@src",
@@ -953,5 +953,13 @@
                 "/assets/scriptaculous/prototype.js",
                 "/assets/scriptaculous/scriptaculous.js");
 
+        // Selenium checks against the actual DOM which is great, but here it reflects the other scriptaculous
+        // libraries added before tapestry.js and its just not worth checking here; soon we'll check behavior
+        // rather than form.
+        
+                
+        // More to come once the client-side validation settles down some (easier to deal with once we get away from 
+        // window.alert().
+        
     }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/BeanEditorDemo.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/BeanEditorDemo.java?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/BeanEditorDemo.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/BeanEditorDemo.java Tue Feb 27 14:11:23 2007
@@ -21,7 +21,8 @@
 
 public class BeanEditorDemo
 {
-    @Component
+    @Component(parameters =
+    { "clientValidation=clientValidation", "object=registrationData" })
     private BeanEditForm _edit;
 
     @ApplicationState
@@ -41,5 +42,15 @@
     {
         _data = null;
         _edit.getForm().clearErrors();
+    }
+
+    public boolean getClientValidation()
+    {
+        return false;
+    }
+
+    public String getPageTitle()
+    {
+        return "BeanEditor Component Demo";
     }
 }

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/ValidBeanEditorDemo.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/ValidBeanEditorDemo.java?view=auto&rev=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/ValidBeanEditorDemo.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/integration/app1/pages/ValidBeanEditorDemo.java Tue Feb 27 14:11:23 2007
@@ -0,0 +1,32 @@
+// Copyright 2007 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.integration.app1.pages;
+
+public class ValidBeanEditorDemo extends BeanEditorDemo
+{
+
+    @Override
+    public boolean getClientValidation()
+    {
+        return true;
+    }
+
+    @Override
+    public String getPageTitle()
+    {
+        return "Client Validation / BeanEditor Demo";
+    }
+
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/DataBean.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/DataBean.java?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/DataBean.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/DataBean.java Tue Feb 27 14:11:23 2007
@@ -18,7 +18,7 @@
 
 /**
  * Used as test when setting the order of properties via
- * {@link TapestryUtils#orderProperties(org.apache.tapestry.ioc.services.ClassPropertyAdapter, ClassFactory, java.util.List)}.
+ * {@link TapestryInternalUtils#orderProperties(org.apache.tapestry.ioc.services.ClassPropertyAdapter, ClassFactory, java.util.List)}.
  */
 public class DataBean
 {

Copied: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryInternalUtilsTest.java (from r510990, tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java)
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryInternalUtilsTest.java?view=diff&rev=512442&p1=tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java&r1=510990&p2=tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryInternalUtilsTest.java&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryUtilsTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/TapestryInternalUtilsTest.java Tue Feb 27 14:11:23 2007
@@ -37,7 +37,7 @@
 import org.testng.annotations.DataProvider;
 import org.testng.annotations.Test;
 
-public class TapestryUtilsTest extends InternalBaseTestCase
+public class TapestryInternalUtilsTest extends InternalBaseTestCase
 {
     private ClassFactory _classFactory;
 
@@ -60,7 +60,7 @@
     @Test
     public void close_null_is_noop()
     {
-        TapestryUtils.close(null);
+        TapestryInternalUtils.close(null);
     }
 
     @Test
@@ -72,7 +72,7 @@
 
         replay();
 
-        TapestryUtils.close(c);
+        TapestryInternalUtils.close(c);
 
         verify();
     }
@@ -87,7 +87,7 @@
 
         replay();
 
-        TapestryUtils.close(c);
+        TapestryInternalUtils.close(c);
 
         verify();
     }
@@ -95,7 +95,7 @@
     @Test(dataProvider = "decapitalize_inputs")
     public void decapitalize(String input, String expected)
     {
-        assertEquals(TapestryUtils.decapitalize(input), expected);
+        assertEquals(TapestryInternalUtils.decapitalize(input), expected);
     }
 
     @DataProvider(name = "decapitalize_inputs")
@@ -113,7 +113,7 @@
     @Test(dataProvider = "to_user_presentable")
     public void to_user_presentable(String input, String expected)
     {
-        assertEquals(TapestryUtils.toUserPresentable(input), expected);
+        assertEquals(TapestryInternalUtils.toUserPresentable(input), expected);
     }
 
     @DataProvider(name = "to_user_presentable")
@@ -130,7 +130,7 @@
     @Test
     public void map_from_keys_and_values()
     {
-        Map<String, String> map = TapestryUtils.mapFromKeysAndValues(
+        Map<String, String> map = TapestryInternalUtils.mapFromKeysAndValues(
                 "fred",
                 "flintstone",
                 "barney",
@@ -144,7 +144,7 @@
     @Test
     public void string_to_option_model_just_label()
     {
-        OptionModel model = TapestryUtils.toOptionModel("Just A Label");
+        OptionModel model = TapestryInternalUtils.toOptionModel("Just A Label");
 
         assertEquals(model.getLabel(), "Just A Label");
         assertEquals(model.getValue(), "Just A Label");
@@ -153,7 +153,7 @@
     @Test
     public void string_to_option_model()
     {
-        OptionModel model = TapestryUtils.toOptionModel("my-value=Some Label");
+        OptionModel model = TapestryInternalUtils.toOptionModel("my-value=Some Label");
 
         assertEquals(model.getLabel(), "Some Label");
         assertEquals(model.getValue(), "my-value");
@@ -162,7 +162,7 @@
     @Test
     public void string_to_option_models()
     {
-        List<OptionModel> options = TapestryUtils.toOptionModels("UK,USA,DE=Germany");
+        List<OptionModel> options = TapestryInternalUtils.toOptionModels("UK,USA,DE=Germany");
 
         assertEquals(options.size(), 3);
 
@@ -181,7 +181,7 @@
     {
         Map<String, String> map = Collections.singletonMap("key", "value");
         Map.Entry entry = map.entrySet().iterator().next();
-        OptionModel model = TapestryUtils.toOptionModel(entry);
+        OptionModel model = TapestryInternalUtils.toOptionModel(entry);
 
         assertEquals(model.getLabel(), "value");
         assertEquals(model.getValue(), "key");
@@ -195,7 +195,7 @@
         map.put(2, null);
         map.put(3, "C");
 
-        List<OptionModel> options = TapestryUtils.toOptionModels(map);
+        List<OptionModel> options = TapestryInternalUtils.toOptionModels(map);
 
         assertEquals(options.size(), 3);
 
@@ -212,7 +212,7 @@
     @Test
     public void whitespace_around_terms_is_trimmed()
     {
-        List<OptionModel> options = TapestryUtils.toOptionModels(" UK , USA , DE=Germany ");
+        List<OptionModel> options = TapestryInternalUtils.toOptionModels(" UK , USA , DE=Germany ");
 
         assertEquals(options.size(), 3);
 
@@ -242,7 +242,7 @@
     @Test
     public void parse_key_value()
     {
-        KeyValue kv = TapestryUtils.parseKeyValue("foo=bar");
+        KeyValue kv = TapestryInternalUtils.parseKeyValue("foo=bar");
 
         assertEquals(kv.getKey(), "foo");
         assertEquals(kv.getValue(), "bar");
@@ -255,7 +255,7 @@
 
         try
         {
-            TapestryUtils.parseKeyValue(input);
+            TapestryInternalUtils.parseKeyValue(input);
             unreachable();
         }
         catch (IllegalArgumentException ex)
@@ -267,7 +267,7 @@
     @Test
     public void whitespace_trimmed_for_key_value()
     {
-        KeyValue kv = TapestryUtils.parseKeyValue("  mykey = myvalue ");
+        KeyValue kv = TapestryInternalUtils.parseKeyValue("  mykey = myvalue ");
 
         assertEquals(kv.getKey(), "mykey");
         assertEquals(kv.getValue(), "myvalue");
@@ -282,7 +282,7 @@
 
         replay();
 
-        assertEquals(TapestryUtils.defaultOrder(conduit), 0);
+        assertEquals(TapestryInternalUtils.defaultOrder(conduit), 0);
 
         verify();
     }
@@ -299,7 +299,7 @@
 
         replay();
 
-        assertEquals(TapestryUtils.defaultOrder(conduit), 99);
+        assertEquals(TapestryInternalUtils.defaultOrder(conduit), 99);
 
         verify();
     }
@@ -307,12 +307,14 @@
     @Test
     public void extract_id_from_property_expression()
     {
-        assertEquals(TapestryUtils.extractIdFromPropertyExpression("simpleName"), "simpleName");
         assertEquals(
-                TapestryUtils.extractIdFromPropertyExpression("complex.name().withStuff"),
+                TapestryInternalUtils.extractIdFromPropertyExpression("simpleName"),
+                "simpleName");
+        assertEquals(
+                TapestryInternalUtils.extractIdFromPropertyExpression("complex.name().withStuff"),
                 "complexnamewithStuff");
         assertEquals(
-                TapestryUtils.extractIdFromPropertyExpression("number99.withABullet"),
+                TapestryInternalUtils.extractIdFromPropertyExpression("number99.withABullet"),
                 "number99withABullet");
     }
 
@@ -325,7 +327,9 @@
 
         replay();
 
-        assertEquals(TapestryUtils.defaultLabel("myid", messages, "myid-name-not-used"), "My Id");
+        assertEquals(
+                TapestryInternalUtils.defaultLabel("myid", messages, "myid-name-not-used"),
+                "My Id");
 
         verify();
     }
@@ -339,9 +343,10 @@
 
         replay();
 
-        assertEquals(
-                TapestryUtils.defaultLabel("foobarbazbiff", messages, "foo.bar().baz.biff()"),
-                "Biff");
+        assertEquals(TapestryInternalUtils.defaultLabel(
+                "foobarbazbiff",
+                messages,
+                "foo.bar().baz.biff()"), "Biff");
 
         verify();
     }
@@ -355,7 +360,7 @@
 
         names.remove("class");
 
-        List<String> sorted = TapestryUtils.orderProperties(adapter, _classFactory, names);
+        List<String> sorted = TapestryInternalUtils.orderProperties(adapter, _classFactory, names);
 
         assertEquals(sorted, Arrays.asList("firstName", "lastName", "age"));
     }
@@ -369,7 +374,7 @@
 
         names.remove("class");
 
-        List<String> sorted = TapestryUtils.orderProperties(adapter, _classFactory, names);
+        List<String> sorted = TapestryInternalUtils.orderProperties(adapter, _classFactory, names);
 
         // Subclass properties listed after superclass properties, as desired.
 
@@ -392,7 +397,7 @@
 
         names.remove("class");
 
-        List<String> sorted = TapestryUtils.orderProperties(adapter, _classFactory, names);
+        List<String> sorted = TapestryInternalUtils.orderProperties(adapter, _classFactory, names);
 
         // Property third has an explicit @Order
 

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/EnvironmentalShadowBuilderImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/EnvironmentalShadowBuilderImplTest.java?view=auto&rev=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/EnvironmentalShadowBuilderImplTest.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/EnvironmentalShadowBuilderImplTest.java Tue Feb 27 14:11:23 2007
@@ -0,0 +1,48 @@
+// Copyright 2007 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.internal.services;
+
+import org.apache.tapestry.PageRenderSupport;
+import org.apache.tapestry.internal.test.InternalBaseTestCase;
+import org.apache.tapestry.ioc.internal.services.ClassFactoryImpl;
+import org.apache.tapestry.ioc.services.ClassFactory;
+import org.apache.tapestry.services.Environment;
+import org.apache.tapestry.services.EnvironmentalShadowBuilder;
+import org.testng.annotations.Test;
+
+public class EnvironmentalShadowBuilderImplTest extends InternalBaseTestCase
+{
+    @Test
+    public void proxy_class()
+    {
+        PageRenderSupport delegate = newMock(PageRenderSupport.class);
+        ClassFactory factory = new ClassFactoryImpl();
+        Environment env = newEnvironment();
+
+        train_peekRequired(env, PageRenderSupport.class, delegate);
+
+        expect(delegate.allocateClientId("fred")).andReturn("barney");
+
+        replay();
+
+        EnvironmentalShadowBuilder builder = new EnvironmentalShadowBuilderImpl(factory, env);
+
+        PageRenderSupport proxy = builder.build(PageRenderSupport.class);
+
+        assertEquals(proxy.allocateClientId("fred"), "barney");
+
+        verify();
+    }
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FieldValidatorImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FieldValidatorImplTest.java?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FieldValidatorImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FieldValidatorImplTest.java Tue Feb 27 14:11:23 2007
@@ -38,7 +38,7 @@
 
         replay();
 
-        FieldValidator fv = new FieldValidatorImpl(field, null, formatter, validator);
+        FieldValidator fv = new FieldValidatorImpl(field, null, formatter, validator, null);
 
         fv.validate(null);
 
@@ -57,7 +57,7 @@
 
         replay();
 
-        FieldValidator fv = new FieldValidatorImpl(field, null, formatter, validator);
+        FieldValidator fv = new FieldValidatorImpl(field, null, formatter, validator, null);
 
         fv.validate("");
 
@@ -78,7 +78,7 @@
 
         replay();
 
-        FieldValidator fv = new FieldValidatorImpl(field, null, formatter, validator);
+        FieldValidator fv = new FieldValidatorImpl(field, null, formatter, validator, null);
 
         fv.validate(value);
 
@@ -99,7 +99,7 @@
 
         replay();
 
-        FieldValidator fv = new FieldValidatorImpl(field, null, formatter, validator);
+        FieldValidator fv = new FieldValidatorImpl(field, null, formatter, validator, null);
 
         fv.validate(null);
 

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FieldValidatorSourceImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FieldValidatorSourceImplTest.java?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FieldValidatorSourceImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/FieldValidatorSourceImplTest.java Tue Feb 27 14:11:23 2007
@@ -1,4 +1,4 @@
-// Copyright 2006 The Apache Software Foundation
+// Copyright 2006, 2007 The Apache Software Foundation
 //
 // Licensed under the Apache License, Version 2.0 (the "License");
 // you may not use this file except in compliance with the License.
@@ -63,7 +63,7 @@
 
         replay();
 
-        FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, map);
+        FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, null, map);
 
         try
         {
@@ -117,7 +117,7 @@
 
         replay();
 
-        FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, map);
+        FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, null, map);
 
         FieldValidator fieldValidator = source.createValidator(field, "required", null);
 
@@ -157,7 +157,7 @@
 
         replay();
 
-        FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, map);
+        FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, null, map);
 
         FieldValidator fieldValidator = source.createValidator(field, "required", null);
 
@@ -202,7 +202,7 @@
 
         replay();
 
-        FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, map);
+        FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, null, map);
 
         FieldValidator fieldValidator = source.createValidators(field, "required");
 
@@ -265,7 +265,7 @@
 
         replay();
 
-        FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, map);
+        FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, null, map);
 
         FieldValidator fieldValidator = source.createValidators(field, "required,minLength=15");
 
@@ -313,7 +313,7 @@
 
         replay();
 
-        FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, map);
+        FieldValidatorSource source = new FieldValidatorSourceImpl(messagesSource, coercer, null, map);
 
         FieldValidator fieldValidator = source.createValidator(field, "minLength", "5");
 

Added: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderSupportImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderSupportImplTest.java?view=auto&rev=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderSupportImplTest.java (added)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageRenderSupportImplTest.java Tue Feb 27 14:11:23 2007
@@ -0,0 +1,94 @@
+// Copyright 2007 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.internal.services;
+
+import org.apache.tapestry.Asset;
+import org.apache.tapestry.PageRenderSupport;
+import org.apache.tapestry.internal.test.InternalBaseTestCase;
+import org.apache.tapestry.ioc.Resource;
+import org.apache.tapestry.ioc.services.SymbolSource;
+import org.apache.tapestry.services.AssetFactory;
+import org.testng.annotations.Test;
+
+public class PageRenderSupportImplTest extends InternalBaseTestCase
+{
+    private static final String ASSET_URL = "/assets/foo/bar.pdf";
+
+    @Test
+    public void add_script_link_by_asset()
+    {
+        DocumentScriptBuilder builder = newDocumentScriptBuilder();
+        Asset asset = newAsset();
+
+        train_toClientURL(asset, ASSET_URL);
+        builder.addScriptLink(ASSET_URL);
+
+        replay();
+
+        PageRenderSupport support = new PageRenderSupportImpl(builder, null, null);
+
+        support.addScriptLink(asset);
+
+        verify();
+    }
+
+    @Test
+    public void add_script()
+    {
+        DocumentScriptBuilder builder = newDocumentScriptBuilder();
+
+        builder.addScript("Tapestry.Foo(\"bar\");");
+
+        replay();
+
+        PageRenderSupport support = new PageRenderSupportImpl(builder, null, null);
+
+        support.addScript("Tapestry.Foo(\"%s\");", "bar");
+
+        verify();
+    }
+
+    @Test
+    public void add_classpath_script_link()
+    {
+        String path = "${root}/foo/bar.pdf";
+        String expanded = "org/apache/tapestry/foo/bar.pdf";
+
+        DocumentScriptBuilder builder = newDocumentScriptBuilder();
+        Asset asset = newAsset();
+        Resource root = newResource();
+        Resource file = newResource();
+        SymbolSource source = newSymbolSource();
+        AssetFactory factory = newAssetFactory();
+
+        train_expandSymbols(source, path, expanded);
+
+        train_getRootResource(factory, root);
+        train_forFile(root, expanded, file);
+
+        train_createAsset(factory, file, asset);
+
+        train_toClientURL(asset, ASSET_URL);
+        builder.addScriptLink(ASSET_URL);
+
+        replay();
+
+        PageRenderSupport support = new PageRenderSupportImpl(builder, source, factory);
+
+        support.addClasspathScriptLink(path);
+
+        verify();
+    }
+}

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageTemplateLocatorImplTest.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageTemplateLocatorImplTest.java?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageTemplateLocatorImplTest.java (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/java/org/apache/tapestry/internal/services/PageTemplateLocatorImplTest.java Tue Feb 27 14:11:23 2007
@@ -97,13 +97,4 @@
         verify();
     }
 
-    protected final void train_forLocale(Resource base, Locale locale, Resource resource)
-    {
-        expect(base.forLocale(locale)).andReturn(resource);
-    }
-
-    protected final void train_forFile(Resource root, String path, Resource resource)
-    {
-        expect(root.forFile(path)).andReturn(resource);
-    }
 }

Modified: tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/ValidForm.html
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/ValidForm.html?view=diff&rev=512442&r1=512441&r2=512442
==============================================================================
--- tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/ValidForm.html (original)
+++ tapestry/tapestry5/tapestry-core/trunk/src/test/resources/org/apache/tapestry/integration/app1/pages/ValidForm.html Tue Feb 27 14:11:23 2007
@@ -3,7 +3,7 @@
     
     <p> Tapestry 5 form support with server-side validation. </p>
     
-    <t:comp type="Form">
+    <t:comp type="Form" clientValidation="false">
         
         <t:comp type="Errors"/>