You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by jk...@apache.org on 2006/12/10 06:25:35 UTC

svn commit: r485142 - in /tapestry/tapestry4/trunk: tapestry-examples/Workbench/src/context/WEB-INF/ tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/ tapestry-framework/src/java/org/apache/tapestry/form/translator/ tapestry-fr...

Author: jkuhnert
Date: Sat Dec  9 21:25:29 2006
New Revision: 485142

URL: http://svn.apache.org/viewvc?view=rev&rev=485142
Log:
Upgraded some of the validation/translation logic wrt client side number formatting. 

Updated dojotest task as it got upgraded in dojo. (by me...heh ) 

Modified:
    tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Fields.properties
    tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/Fields.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Max.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Min.java
    tapestry/tapestry4/trunk/tapestry-framework/src/js/lib/ant-dojotest.jar
    tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_form_validation.js
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java

Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Fields.properties
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Fields.properties?view=diff&rev=485142&r1=485141&r2=485142
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Fields.properties (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/context/WEB-INF/Fields.properties Sat Dec  9 21:25:29 2006
@@ -14,4 +14,4 @@
 
 zip-code-label=Zip Code
 zip-code-pattern=^\\d{5}(-\\d{4})?$
-zip-code-message=Zip codes are either five or nine digits; 02134 or 90125-1234.
\ No newline at end of file
+zip-code-message=Zip codes are either five or nine digits; 02134 or 90125-1234.

Modified: tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/Fields.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/Fields.java?view=diff&rev=485142&r1=485141&r2=485142
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/Fields.java (original)
+++ tapestry/tapestry4/trunk/tapestry-examples/Workbench/src/java/org/apache/tapestry/workbench/fields/Fields.java Sat Dec  9 21:25:29 2006
@@ -37,12 +37,11 @@
     public static final double DOUBLE_MIN = 3.14;
 
     public static final double DOUBLE_MAX = 27.5;
-
+    
     public static final BigDecimal DECIMAL_MIN = new BigDecimal("2");
-
-    public static final BigDecimal DECIMAL_MAX = new BigDecimal(
-            "100.123456234563456734563456356734567456784567456784567845675678456785678");
-
+    
+    public static final BigDecimal DECIMAL_MAX = new BigDecimal("100.123456234563456734563456356734567456784567456784567845675678456785678");
+    
     public static final long LONG_MIN = 6;
 
     public static final long LONG_MAX = 21;

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java?view=diff&rev=485142&r1=485141&r2=485142
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java Sat Dec  9 21:25:29 2006
@@ -127,14 +127,11 @@
         
         cons.accumulate(field.getClientId(),
                 new JSONLiteral("[dojo.validate.isRealNumber,{"
-                        + ((format.getMaximumFractionDigits() > 0) 
-                                ? "" : "places:" + format.getMaximumFractionDigits() + ",")
-                                + "decimal:" 
-                                + JSONObject.quote(format.getDecimalFormatSymbols().getDecimalSeparator()) 
-                                + (format.isGroupingUsed()
-                                        ? ",separator:" + JSONObject.quote(format.getDecimalFormatSymbols().getGroupingSeparator())
-                                                : "")
-                                                + "}]"));
+                        + "places:" + format.getMaximumFractionDigits() + ","
+                        + "decimal:" 
+                        + JSONObject.quote(format.getDecimalFormatSymbols().getDecimalSeparator()) 
+                        + ",separator:" + JSONObject.quote(format.getDecimalFormatSymbols().getGroupingSeparator())
+                        + "}]"));
         
         accumulateProfileProperty(field, profile, ValidationConstants.CONSTRAINTS, message);
     }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Max.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Max.java?view=diff&rev=485142&r1=485141&r2=485142
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Max.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Max.java Sat Dec  9 21:25:29 2006
@@ -21,6 +21,7 @@
 import org.apache.tapestry.form.FormComponentContributorContext;
 import org.apache.tapestry.form.IFormComponent;
 import org.apache.tapestry.form.ValidationMessages;
+import org.apache.tapestry.form.translator.NumberTranslator;
 import org.apache.tapestry.json.JSONLiteral;
 import org.apache.tapestry.json.JSONObject;
 import org.apache.tapestry.valid.ValidationConstants;
@@ -83,10 +84,19 @@
         // TODO: Should find some way to provide this globally and cache.
         DecimalFormatSymbols symbols = new DecimalFormatSymbols(context.getLocale());
         
+        String maxString = null;
+        NumberTranslator translator = (NumberTranslator)super.getFieldTranslator(field, NumberTranslator.class);
+        
+        if (translator != null)
+            maxString = translator.format(field, context.getLocale(), _max);
+        else
+            maxString = String.valueOf(_max);
+        
         accumulateProperty(cons, field.getClientId(), 
                 new JSONLiteral("[dojo.validate.isInRange,{"
-                        + "max:" + _max + ","
+                        + "max:" + maxString + ","
                         + "decimal:" + JSONObject.quote(symbols.getDecimalSeparator())
+                        + ",separator:" + JSONObject.quote(symbols.getGroupingSeparator())
                         + "}]"));
         
         accumulateProfileProperty(field, profile, 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Min.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Min.java?view=diff&rev=485142&r1=485141&r2=485142
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Min.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/validator/Min.java Sat Dec  9 21:25:29 2006
@@ -21,6 +21,7 @@
 import org.apache.tapestry.form.FormComponentContributorContext;
 import org.apache.tapestry.form.IFormComponent;
 import org.apache.tapestry.form.ValidationMessages;
+import org.apache.tapestry.form.translator.NumberTranslator;
 import org.apache.tapestry.json.JSONLiteral;
 import org.apache.tapestry.json.JSONObject;
 import org.apache.tapestry.valid.ValidationConstants;
@@ -83,10 +84,19 @@
         // TODO: Should find some way to provide this globally and cache.
         DecimalFormatSymbols symbols = new DecimalFormatSymbols(context.getLocale());
         
+        String minString = null;
+        NumberTranslator translator = (NumberTranslator)super.getFieldTranslator(field, NumberTranslator.class);
+        
+        if (translator != null)
+            minString = translator.format(field, context.getLocale(), _min);
+        else
+            minString = String.valueOf(_min);
+        
         accumulateProperty(cons, field.getClientId(), 
                 new JSONLiteral("[dojo.validate.isInRange,{"
-                        + "min:" + _min + ","
+                        + "min:" + minString + ","
                         + "decimal:" + JSONObject.quote(symbols.getDecimalSeparator())
+                        + ",separator:" + JSONObject.quote(symbols.getGroupingSeparator())
                         + "}]"));
         
         accumulateProfileProperty(field, profile, 

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/lib/ant-dojotest.jar
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/lib/ant-dojotest.jar?view=diff&rev=485142&r1=485141&r2=485142
==============================================================================
Binary files - no diff available.

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_form_validation.js
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_form_validation.js?view=diff&rev=485142&r1=485141&r2=485142
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_form_validation.js (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/js/tests/test_form_validation.js Sat Dec  9 21:25:29 2006
@@ -35,6 +35,13 @@
 	jum.assertFalse(value, dojo.validate.isRealNumber(value, {places:0,decimal:".",separator:","}));
 }
 
+function test_validate_decimals(){
+	var input = "1,124.12";
+	jum.assertTrue(dojo.validate.isRealNumber(input, {decimal:".",separator:","}));
+	jum.assertTrue(dojo.validate.isInRange(input, {min:2.0,decimal:".",separator:",",symbol:"¤"}));
+	jum.assertTrue(dojo.validate.isInRange(input, {max:1000000001,decimal:".",separator:",",symbol:"¤"}));
+}
+
 function test_validate_required(){
 	// A generic form
 	var f = {

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java?view=diff&rev=485142&r1=485141&r2=485142
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java Sat Dec  9 21:25:29 2006
@@ -217,10 +217,10 @@
         
         verify();
         
-        assertEquals( "{\"constraints\":{\"numberField\":[[dojo.validate.isRealNumber,"
-                + "{places:0,decimal:\".\"}]]},"
-                + "\"numberField\":{\"constraints\":[\"invalid number message\"]}}",
-                json.toString());
+        assertEquals(json.toString(),
+                "{\"constraints\":{\"numberField\":[[dojo.validate.isRealNumber," +
+                "{places:0,decimal:\".\",separator:\",\"}]]},\"numberField\":" +
+                "{\"constraints\":[\"invalid number message\"]}}");
     }
 
     public void testMessageRenderContribution()
@@ -240,7 +240,7 @@
         expect(context.getProfile()).andReturn(json);
         
         trainGetLocale(context, Locale.ENGLISH);
-
+        
         trainBuildMessage(
                 context,
                 messageOverride,
@@ -249,17 +249,17 @@
                 "Blah Blah 'Field Name' Blah.");
         
         replay();
-
+        
         translator.setMessage(messageOverride);
 
         translator.renderContribution(writer, cycle, context, field);
         
         verify();
         
-        assertEquals("{\"constraints\":{\"myfield\":[[dojo.validate.isRealNumber,"
-                + "{places:0,decimal:\".\"}]]},"
-                + "\"myfield\":{\"constraints\":[\"Blah Blah \'Field Name\' Blah.\"]}}",
-                json.toString());
+        assertEquals(json.toString(),
+                "{\"constraints\":{\"myfield\":[[dojo.validate.isRealNumber," +
+                "{places:0,decimal:\".\",separator:\",\"}]]},\"myfield\":" +
+                "{\"constraints\":[\"Blah Blah \'Field Name\' Blah.\"]}}");
     }
     
     public void testTrimRenderContribution()
@@ -291,11 +291,10 @@
         
         verify();
         
-        assertEquals("{\"trim\":[\"myfield\"],"
-                + "\"constraints\":{\"myfield\":[[dojo.validate.isRealNumber,"
-                + "{places:0,decimal:\".\"}]]},"
-                + "\"myfield\":{\"constraints\":[\"invalid number message\"]}}",
-                json.toString());
+        assertEquals(json.toString(),
+                "{\"trim\":[\"myfield\"],\"constraints\":{\"myfield\":" +
+                "[[dojo.validate.isRealNumber,{places:0,decimal:\".\",separator:\",\"}]]}," +
+                "\"myfield\":{\"constraints\":[\"invalid number message\"]}}");
                 
     }
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java?view=diff&rev=485142&r1=485141&r2=485142
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMax.java Sat Dec  9 21:25:29 2006
@@ -16,7 +16,6 @@
 
 import static org.easymock.EasyMock.expect;
 
-import java.text.DecimalFormatSymbols;
 import java.util.Locale;
 
 import org.apache.tapestry.IMarkupWriter;
@@ -110,8 +109,7 @@
         
         FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
         
-        Locale locale = Locale.FRANCE;
-        DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
+        Locale locale = Locale.GERMAN;
         
         expect(context.getLocale()).andReturn(locale);
         
@@ -126,10 +124,10 @@
 
         verify();
         
-        assertEquals("{\"constraints\":{\"myfield\":[[dojo.validate.isInRange,{max:20.0,decimal:\""
-                + symbols.getDecimalSeparator() + "\"}]]},"
-                + "\"myfield\":{\"constraints\":[\"default message\"]}}",
-                json.toString());
+        assertEquals(json.toString(), 
+                "{\"constraints\":{\"myfield\":" +
+                "[[dojo.validate.isInRange,{max:20.0,decimal:\",\",separator:\".\"}]]}," +
+                "\"myfield\":{\"constraints\":[\"default message\"]}}");
     }
     
     public void test_Render_Contribution_Custom_Message()
@@ -143,8 +141,7 @@
         
         FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
         
-        Locale locale = Locale.FRANCE;
-        DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
+        Locale locale = Locale.JAPAN;
         
         expect(context.getLocale()).andReturn(locale);
         
@@ -164,10 +161,10 @@
 
         verify();
         
-        assertEquals("{\"constraints\":{\"myfield\":[[dojo.validate.isInRange,{max:20.0,decimal:\""
-                + symbols.getDecimalSeparator() + "\"}]]},"
-                +"\"myfield\":{\"constraints\":[\"custom\\\\message\"]}}",
-                json.toString());
+        assertEquals(json.toString(),
+                "{\"constraints\":{\"myfield\":[[dojo.validate.isInRange," +
+                "{max:20.0,decimal:\".\",separator:\",\"}]]}," +
+                "\"myfield\":{\"constraints\":[\"custom\\\\message\"]}}");
     }
 
 }

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java?view=diff&rev=485142&r1=485141&r2=485142
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/validator/TestMin.java Sat Dec  9 21:25:29 2006
@@ -16,7 +16,6 @@
 
 import static org.easymock.EasyMock.expect;
 
-import java.text.DecimalFormatSymbols;
 import java.util.Locale;
 
 import org.apache.tapestry.IMarkupWriter;
@@ -94,7 +93,7 @@
         }
         catch (ValidatorException ex)
         {
-            assertEquals("custom message", ex.getMessage());
+            assertEquals(ex.getMessage(), "custom message");
             assertEquals(ValidationConstraint.TOO_SMALL, ex.getConstraint());
         }
     }
@@ -110,7 +109,6 @@
         FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
         
         Locale locale = Locale.FRANCE;
-        DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
         
         expect(context.getLocale()).andReturn(locale);
         
@@ -125,10 +123,10 @@
         
         verify();
         
-        assertEquals("{\"constraints\":{\"myfield\":[[dojo.validate.isInRange,{min:20.0,decimal:\""
-                + symbols.getDecimalSeparator() + "\"}]]},"
-                + "\"myfield\":{\"constraints\":[\"default message\"]}}",
-                json.toString());
+        assertEquals(json.toString(), 
+                "{\"constraints\":{\"myfield\":[[dojo.validate.isInRange," 
+                + "{min:20.0,decimal:\",\",separator:\" \"}]]}," 
+                + "\"myfield\":{\"constraints\":[\"default message\"]}}");
     }
     
     public void test_Render_Contribution_Custom_Message()
@@ -143,7 +141,6 @@
         FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
         
         Locale locale = Locale.FRANCE;
-        DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale);
         
         expect(context.getLocale()).andReturn(locale);
         
@@ -160,13 +157,13 @@
         replay();
         
         new Min("min=20,message=custom").renderContribution(writer, cycle, context, field);
-
+        
         verify();
         
-        assertEquals("{\"constraints\":{\"myfield\":[[dojo.validate.isInRange,{min:20.0,decimal:\""
-                + symbols.getDecimalSeparator() + "\"}]]},"
-                + "\"myfield\":{\"constraints\":[\"custom\\\\message\"]}}",
-                json.toString());
+        assertEquals(json.toString(),
+                "{\"constraints\":{\"myfield\":[[dojo.validate.isInRange," 
+                + "{min:20.0,decimal:\",\",separator:\" \"}]]}," 
+                + "\"myfield\":{\"constraints\":[\"custom\\\\message\"]}}");
     }
     
 }