WICKET-5467 NumberTextField should support "any" as valid step attribute value

(cherry picked from commit 2c3aa01aba8666f8dc358e5ae25f36e38523924d)


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/60d3009e
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/60d3009e
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/60d3009e

Branch: 
refs/heads/sandbox/preserve-page-parameters-and-execute-listener-interface-after-expiration
Commit: 60d3009e9f3dc65d3d7cfeb401aaae3e617ef4a0
Parents: 4f9aa2d
Author: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Authored: Wed Jan 15 12:13:27 2014 +0200
Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
Committed: Wed Jan 15 12:14:04 2014 +0200

----------------------------------------------------------------------
 .../markup/html/form/NumberTextField.java       | 16 ++++++++-
 .../markup/html/form/NumberTextFieldTest.java   | 34 +++++++++++++++++++-
 2 files changed, 48 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/60d3009e/wicket-core/src/main/java/org/apache/wicket/markup/html/form/NumberTextField.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/NumberTextField.java
 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/NumberTextField.java
index 925ad21..ca1a2fc 100644
--- 
a/wicket-core/src/main/java/org/apache/wicket/markup/html/form/NumberTextField.java
+++ 
b/wicket-core/src/main/java/org/apache/wicket/markup/html/form/NumberTextField.java
@@ -42,6 +42,13 @@ public class NumberTextField<N extends Number & 
Comparable<N>> extends TextField
 {
        private static final long serialVersionUID = 1L;
 
+       /**
+        * Use this as a marker of step attribute value "any"
+        * Because the w3c spec requires step to be a non-negative digit
+        * greater than zero we use zero as delegate for "any" keyword.
+        */
+       public static final Double ANY = Double.valueOf(0d);
+
        private RangeValidator<N> validator;
 
        private N minimum;
@@ -187,7 +194,14 @@ public class NumberTextField<N extends Number & 
Comparable<N>> extends TextField
 
                if (step != null)
                {
-                       attributes.put("step", Objects.stringValue(step));
+                       if (step.doubleValue() == ANY)
+                       {
+                               attributes.put("step", "any");
+                       }
+                       else
+                       {
+                               attributes.put("step", 
Objects.stringValue(step));
+                       }
                }
                else
                {

http://git-wip-us.apache.org/repos/asf/wicket/blob/60d3009e/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NumberTextFieldTest.java
----------------------------------------------------------------------
diff --git 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NumberTextFieldTest.java
 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NumberTextFieldTest.java
index 44c0fa8..bb951d5 100644
--- 
a/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NumberTextFieldTest.java
+++ 
b/wicket-core/src/test/java/org/apache/wicket/markup/html/form/NumberTextFieldTest.java
@@ -104,6 +104,38 @@ public class NumberTextFieldTest extends WicketTestCase
        }
 
        /**
+        * WICKET-5467
+        */
+       @Test
+       public void respectStepAny()
+       {
+               TestPage<Double> testPage = new TestPage<Double>();
+               testPage.textField.setType(Double.class);
+               testPage.textField.setStep(NumberTextField.ANY);
+               testPage.textField.setModelObject(new Double("1000.0"));
+               tester.startPage(testPage);
+
+               String response = tester.getLastResponseAsString();
+               assertTrue(response.contains("<input wicket:id=\"number\" 
step=\"any\" type=\"number\" value=\"1000.0\" name=\"number\"/>"));
+       }
+
+       /**
+        * WICKET-5467
+        */
+       @Test
+       public void respectStepWithNumberValue()
+       {
+               TestPage<Double> testPage = new TestPage<Double>();
+               testPage.textField.setType(Double.class);
+               testPage.textField.setStep(Double.valueOf(0.3d));
+               testPage.textField.setModelObject(new Double("1000.0"));
+               tester.startPage(testPage);
+
+               String response = tester.getLastResponseAsString();
+               assertTrue(response.contains("<input wicket:id=\"number\" 
step=\"0.3\" type=\"number\" value=\"1000.0\" name=\"number\"/>"));
+       }
+
+       /**
         * @param <N>
         *            type parameter
         */
@@ -138,7 +170,7 @@ public class NumberTextFieldTest extends WicketTestCase
                {
                        return new StringResourceStream(
                                "<html><body>"
-                                       + "<form wicket:id=\"form\"><input 
wicket:id=\"number\" type=\"number\" /></form></body></html>");
+                                       + "<form wicket:id=\"form\"><input 
wicket:id=\"number\" step=\"any\" type=\"number\" /></form></body></html>");
                }
        }
 }

Reply via email to