You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by jk...@apache.org on 2007/05/12 01:37:52 UTC

svn commit: r537315 - in /tapestry/tapestry4/trunk/tapestry-framework/src: java/org/apache/tapestry/form/translator/ java/org/apache/tapestry/valid/ test/org/apache/tapestry/form/translator/

Author: jkuhnert
Date: Fri May 11 16:37:51 2007
New Revision: 537315

URL: http://svn.apache.org/viewvc?view=rev&rev=537315
Log:
Fixes TAPESTRY-1071. The NumberTranslator default client side contributions were incorrectly specifying a grouping separator when the pattern/locale didn't specify using one.  Fix contributed by Marcus Schulte.

Modified:
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/form/translator/NumberTranslator.java
    tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java
    tapestry/tapestry4/trunk/tapestry-framework/src/test/org/apache/tapestry/form/translator/TestNumberTranslator.java

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=537315&r1=537314&r2=537315
==============================================================================
--- 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 Fri May 11 16:37:51 2007
@@ -14,11 +14,6 @@
 
 package org.apache.tapestry.form.translator;
 
-import java.text.DecimalFormat;
-import java.text.DecimalFormatSymbols;
-import java.text.Format;
-import java.util.Locale;
-
 import org.apache.hivemind.util.PropertyUtils;
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IRequestCycle;
@@ -30,6 +25,11 @@
 import org.apache.tapestry.valid.ValidationConstraint;
 import org.apache.tapestry.valid.ValidationStrings;
 
+import java.text.DecimalFormat;
+import java.text.DecimalFormatSymbols;
+import java.text.Format;
+import java.util.Locale;
+
 /**
  * A {@link java.text.DecimalFormat}-based {@link Translator} implementation.
  * 
@@ -104,7 +104,7 @@
     protected Object[] getMessageParameters(Locale locale, String label)
     {
         String pattern = getDecimalFormat(locale).toLocalizedPattern();
-        
+
         return new Object[] { label, pattern };
     }
 
@@ -128,13 +128,14 @@
         JSONObject cons = profile.getJSONObject(ValidationConstants.CONSTRAINTS);
         
         DecimalFormat format = getDecimalFormat(context.getLocale());
-        
+
         cons.accumulate(field.getClientId(),
                 new JSONLiteral("[dojo.validate.isRealNumber,{"
                         + "places:" + format.getMaximumFractionDigits() + ","
                         + "decimal:" 
                         + JSONObject.quote(format.getDecimalFormatSymbols().getDecimalSeparator()) 
-                        + ",separator:" + JSONObject.quote(format.getDecimalFormatSymbols().getGroupingSeparator())
+                        + (format.isGroupingUsed() ? ",separator:" + JSONObject.quote(format.getDecimalFormatSymbols().getGroupingSeparator())
+                                                                  : "")
                         + "}]"));
         
         accumulateProfileProperty(field, profile, ValidationConstants.CONSTRAINTS, message);

Modified: tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java?view=diff&rev=537315&r1=537314&r2=537315
==============================================================================
--- tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java (original)
+++ tapestry/tapestry4/trunk/tapestry-framework/src/java/org/apache/tapestry/valid/ValidationConstraint.java Fri May 11 16:37:51 2007
@@ -63,8 +63,7 @@
      * Indicates a general error in the format of a string that is to be interpreted as a number.
      */
 
-    public static final ValidationConstraint NUMBER_FORMAT = new ValidationConstraint(
-            "NUMBER_FORMAT");
+    public static final ValidationConstraint NUMBER_FORMAT = new ValidationConstraint("NUMBER_FORMAT");
 
     /**
      * Indicates that the value was too small (for a Date, too early).

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=537315&r1=537314&r2=537315
==============================================================================
--- 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 Fri May 11 16:37:51 2007
@@ -14,11 +14,6 @@
 
 package org.apache.tapestry.form.translator;
 
-import static org.easymock.EasyMock.expect;
-
-import java.text.DecimalFormatSymbols;
-import java.util.Locale;
-
 import org.apache.tapestry.IMarkupWriter;
 import org.apache.tapestry.IRequestCycle;
 import org.apache.tapestry.form.FormComponentContributorContext;
@@ -29,8 +24,12 @@
 import org.apache.tapestry.valid.ValidationConstraint;
 import org.apache.tapestry.valid.ValidationStrings;
 import org.apache.tapestry.valid.ValidatorException;
+import static org.easymock.EasyMock.expect;
 import org.testng.annotations.Test;
 
+import java.text.DecimalFormatSymbols;
+import java.util.Locale;
+
 /**
  * Tests for {@link org.apache.tapestry.form.translator.NumberTranslator}
  * 
@@ -254,6 +253,38 @@
         verify();
         
         assertEquals(json.toString(),
+                "{\"constraints\":{\"numberField\":" +
+                "[[dojo.validate.isRealNumber,{places:0,decimal:\".\"}]]}," +
+                "\"numberField\":{\"constraints\":[\"invalid number message\"]}}");
+    }
+
+    public void test_Render_Grouping_Separator()
+    {
+        NumberTranslator translator = new NumberTranslator();
+        translator.setPattern("###,##");
+        IFormComponent field = newField("Number Field", "numberField", 1);
+
+        JSONObject json = new JSONObject();
+
+        IMarkupWriter writer = newWriter();
+        IRequestCycle cycle = newCycle();
+
+        FormComponentContributorContext context = newMock(FormComponentContributorContext.class);
+
+        expect(context.getProfile()).andReturn(json);
+
+        trainGetLocale(context, Locale.US);
+
+        trainBuildMessage(context, null, ValidationStrings.INVALID_NUMBER, new String[] { "Number Field", "#,##" },
+                          "invalid number message");
+
+        replay();
+
+        translator.renderContribution(writer, cycle, context, field);
+
+        verify();
+
+        assertEquals(json.toString(),
                 "{\"constraints\":{\"numberField\":[[dojo.validate.isRealNumber," +
                 "{places:0,decimal:\".\",separator:\",\"}]]},\"numberField\":" +
                 "{\"constraints\":[\"invalid number message\"]}}");
@@ -293,9 +324,9 @@
         verify();
         
         assertEquals(json.toString(),
-                "{\"constraints\":{\"myfield\":[[dojo.validate.isRealNumber," +
-                "{places:0,decimal:\".\",separator:\",\"}]]},\"myfield\":" +
-                "{\"constraints\":[\"Blah Blah \'Field Name\' Blah.\"]}}");
+                "{\"constraints\":" +
+                "{\"myfield\":[[dojo.validate.isRealNumber,{places:0,decimal:\".\"}]]}," +
+                "\"myfield\":{\"constraints\":[\"Blah Blah 'Field Name' Blah.\"]}}");
     }
     
     public void test_Trim_Render_Contribution()
@@ -328,8 +359,9 @@
         verify();
         
         assertEquals(json.toString(),
-                "{\"trim\":[\"myfield\"],\"constraints\":{\"myfield\":" +
-                "[[dojo.validate.isRealNumber,{places:0,decimal:\".\",separator:\",\"}]]}," +
+                "{\"trim\":[\"myfield\"]," +
+                "\"constraints\":{\"myfield\":" +
+                "[[dojo.validate.isRealNumber,{places:0,decimal:\".\"}]]}," +
                 "\"myfield\":{\"constraints\":[\"invalid number message\"]}}");
                 
     }