Title: [143770] trunk
Revision
143770
Author
commit-qu...@webkit.org
Date
2013-02-22 12:18:37 -0800 (Fri, 22 Feb 2013)

Log Message

INPUT_MULTIPLE_FIELDS_UI: Unable to enter "24" to hour field
https://bugs.webkit.org/show_bug.cgi?id=110431

Patch by Kunihiko Sakamoto <ksakam...@chromium.org> on 2013-02-22
Reviewed by Kent Tamura.

Source/WebCore:

Fixed a bug that hour-field does not accept "24" as a valid input when hour format is 1-24.
To test <input> against different time formats, added "pattern" attribute to DateTimeEditElement.

Test: fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html

* html/BaseMultipleFieldsDateAndTimeInputType.cpp:
(WebCore::BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue): Overwrites layoutParameters.dateTimeFormat by pattern attribute of DateTimeEditElement (if exists).
* html/shadow/DateTimeFieldElements.cpp:
(WebCore::DateTimeHourFieldElement::populateDateTimeFieldsState): Fixed a bug where AM/PM value was passed to setHour().
(WebCore::DateTimeHourFieldElement::setValueAsInteger): Clamps the given value to 0-24 when the range of the field is 1-12 or 1-24. Renamed the parameter as it may not be an hour23 value (0-23).

LayoutTests:

Added test cases for hour formats 0-11 and 1-24.

* fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer-expected.txt:
* fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (143769 => 143770)


--- trunk/LayoutTests/ChangeLog	2013-02-22 20:08:22 UTC (rev 143769)
+++ trunk/LayoutTests/ChangeLog	2013-02-22 20:18:37 UTC (rev 143770)
@@ -1,3 +1,15 @@
+2013-02-22  Kunihiko Sakamoto  <ksakam...@chromium.org>
+
+        INPUT_MULTIPLE_FIELDS_UI: Unable to enter "24" to hour field
+        https://bugs.webkit.org/show_bug.cgi?id=110431
+
+        Reviewed by Kent Tamura.
+
+        Added test cases for hour formats 0-11 and 1-24.
+
+        * fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer-expected.txt:
+        * fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html:
+
 2013-02-21  Zoltan Horvath  <zol...@webkit.org>
 
         [CSS Regions] Region boxes should respect -shape-inside CSS property

Modified: trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer-expected.txt (143769 => 143770)


--- trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer-expected.txt	2013-02-22 20:08:22 UTC (rev 143769)
+++ trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer-expected.txt	2013-02-22 20:18:37 UTC (rev 143770)
@@ -108,8 +108,20 @@
 PASS getUserAgentShadowTextContent(input) is "12:00 AM"
 PASS test("06:00", 7200, "01:00", null, ["delete", "upArrow"]) is "01:00"
 PASS test("06:00", 7200, "01:00", null, ["delete", "downArrow"]) is "11:00"
+Hours, 0-11
+PASS stepUp("11:00", 1, null, null) is "00:00"
+PASS getUserAgentShadowTextContent(input) is "00:00 AM"
+PASS stepDown("00:00", 1, null, null) is "11:00"
+PASS getUserAgentShadowTextContent(input) is "11:00 AM"
+PASS stepUp("23:00", 1, null, null) is "12:00"
+PASS getUserAgentShadowTextContent(input) is "00:00 PM"
+PASS stepDown("12:00", 1, null, null) is "23:00"
+PASS getUserAgentShadowTextContent(input) is "11:00 PM"
+PASS test("06:00", 7200, null, null, ["delete", "upArrow"]) is "00:00"
+PASS test("06:00", 7200, null, null, ["delete", "downArrow"]) is "10:00"
+PASS test("06:00", 7200, "01:00", null, ["delete", "upArrow"]) is "01:00"
+PASS test("06:00", 7200, "01:00", null, ["delete", "downArrow"]) is "11:00"
 Hours, 0-23
-The tests in this block fail on platforms without the lang-attribute-aware-form-control-UI feature.
 PASS stepUp("07:00", 1, null, null) is "08:00"
 PASS stepDown("07:00", 1, null, null) is "06:00"
 PASS stepUp("23:00", 1, null, null) is "00:00"
@@ -135,6 +147,19 @@
 PASS test("06:00", 7200, null, null, ["delete", "downArrow"]) is "22:00"
 PASS test("06:00", 7200, "01:00", null, ["delete", "upArrow"]) is "01:00"
 PASS test("06:00", 7200, "01:00", null, ["delete", "downArrow"]) is "23:00"
+Hours, 1-24
+PASS stepUp("11:00", 1, null, null) is "12:00"
+PASS getUserAgentShadowTextContent(input) is "12:00"
+PASS stepDown("00:00", 1, null, null) is "23:00"
+PASS getUserAgentShadowTextContent(input) is "23:00"
+PASS stepUp("23:00", 1, null, null) is "00:00"
+PASS getUserAgentShadowTextContent(input) is "24:00"
+PASS stepDown("12:00", 1, null, null) is "11:00"
+PASS getUserAgentShadowTextContent(input) is "11:00"
+PASS test("06:00", 7200, null, null, ["delete", "upArrow"]) is "02:00"
+PASS test("06:00", 7200, null, null, ["delete", "downArrow"]) is "00:00"
+PASS test("06:00", 7200, "01:00", null, ["delete", "upArrow"]) is "01:00"
+PASS test("06:00", 7200, "01:00", null, ["delete", "downArrow"]) is "23:00"
 
 PASS successfullyParsed is true
 

Modified: trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html (143769 => 143770)


--- trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html	2013-02-22 20:08:22 UTC (rev 143769)
+++ trunk/LayoutTests/fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html	2013-02-22 20:18:37 UTC (rev 143770)
@@ -7,8 +7,8 @@
 <body>
 <script>
 description('Check stepping-up and -down for time input fields from renderer. No cases of empty initial values.');
-if (window.internals)
-    internals.settings.setLangAttributeAwareFormControlUIEnabled(true);
+if (!window.internals)
+    testFailed('This test requires window.internals.');
 
 var input = document.createElement('input');
 var invalidStateErr = '"Error: InvalidStateError: DOM Exception 11"';
@@ -22,6 +22,11 @@
     eventSender.keyDown(key, modifiers);
 }
 
+function setDateTimeFormat(pattern) {
+    getElementByPseudoId(internals.youngestShadowRoot(input), '-webkit-datetime-edit').setAttribute('pattern', pattern);
+    input.value = '';  // Updates the element for new format
+}
+
 function setInputAttributes(value, min, max, step) {
     input.value = value;
     input.min = min;
@@ -163,9 +168,23 @@
 shouldBeEqualToString('test("06:00", 7200, "01:00", null, ["delete", "upArrow"])', '01:00');
 shouldBeEqualToString('test("06:00", 7200, "01:00", null, ["delete", "downArrow"])', '11:00');
 
+debug('Hours, 0-11');
+setDateTimeFormat('KK:mm a');
+shouldBeEqualToString('stepUp("11:00", 1, null, null)', '00:00');
+shouldBeEqualToString('getUserAgentShadowTextContent(input)', '00:00 AM');
+shouldBeEqualToString('stepDown("00:00", 1, null, null)', '11:00');
+shouldBeEqualToString('getUserAgentShadowTextContent(input)', '11:00 AM');
+shouldBeEqualToString('stepUp("23:00", 1, null, null)', '12:00');
+shouldBeEqualToString('getUserAgentShadowTextContent(input)', '00:00 PM');
+shouldBeEqualToString('stepDown("12:00", 1, null, null)', '23:00');
+shouldBeEqualToString('getUserAgentShadowTextContent(input)', '11:00 PM');
+shouldBeEqualToString('test("06:00", 7200, null, null, ["delete", "upArrow"])', '00:00');
+shouldBeEqualToString('test("06:00", 7200, null, null, ["delete", "downArrow"])', '10:00');
+shouldBeEqualToString('test("06:00", 7200, "01:00", null, ["delete", "upArrow"])', '01:00');
+shouldBeEqualToString('test("06:00", 7200, "01:00", null, ["delete", "downArrow"])', '11:00');
+
 debug('Hours, 0-23');
-debug('The tests in this block fail on platforms without the lang-attribute-aware-form-control-UI feature.');
-input.setAttribute('lang', 'ja');
+setDateTimeFormat('HH:mm');
 shouldBeEqualToString('stepUp("07:00", 1, null, null)', '08:00');
 shouldBeEqualToString('stepDown("07:00", 1, null, null)', '06:00');
 shouldBeEqualToString('stepUp("23:00", 1, null, null)', '00:00');
@@ -191,8 +210,23 @@
 shouldBeEqualToString('test("06:00", 7200, null, null, ["delete", "downArrow"])', '22:00');
 shouldBeEqualToString('test("06:00", 7200, "01:00", null, ["delete", "upArrow"])', '01:00');
 shouldBeEqualToString('test("06:00", 7200, "01:00", null, ["delete", "downArrow"])', '23:00');
-input.removeAttribute('lang');
 
+debug('Hours, 1-24');
+setDateTimeFormat('kk:mm');
+shouldBeEqualToString('stepUp("11:00", 1, null, null)', '12:00');
+shouldBeEqualToString('getUserAgentShadowTextContent(input)', '12:00');
+shouldBeEqualToString('stepDown("00:00", 1, null, null)', '23:00');
+shouldBeEqualToString('getUserAgentShadowTextContent(input)', '23:00');
+shouldBeEqualToString('stepUp("23:00", 1, null, null)', '00:00');
+shouldBeEqualToString('getUserAgentShadowTextContent(input)', '24:00');
+shouldBeEqualToString('stepDown("12:00", 1, null, null)', '11:00');
+shouldBeEqualToString('getUserAgentShadowTextContent(input)', '11:00');
+shouldBeEqualToString('test("06:00", 7200, null, null, ["delete", "upArrow"])', '02:00');
+shouldBeEqualToString('test("06:00", 7200, null, null, ["delete", "downArrow"])', '00:00');
+shouldBeEqualToString('test("06:00", 7200, "01:00", null, ["delete", "upArrow"])', '01:00');
+shouldBeEqualToString('test("06:00", 7200, "01:00", null, ["delete", "downArrow"])', '23:00');
+
+setDateTimeFormat('');
 debug('');
 document.body.removeChild(input);
 </script>

Modified: trunk/Source/WebCore/ChangeLog (143769 => 143770)


--- trunk/Source/WebCore/ChangeLog	2013-02-22 20:08:22 UTC (rev 143769)
+++ trunk/Source/WebCore/ChangeLog	2013-02-22 20:18:37 UTC (rev 143770)
@@ -1,3 +1,21 @@
+2013-02-22  Kunihiko Sakamoto  <ksakam...@chromium.org>
+
+        INPUT_MULTIPLE_FIELDS_UI: Unable to enter "24" to hour field
+        https://bugs.webkit.org/show_bug.cgi?id=110431
+
+        Reviewed by Kent Tamura.
+
+        Fixed a bug that hour-field does not accept "24" as a valid input when hour format is 1-24.
+        To test <input> against different time formats, added "pattern" attribute to DateTimeEditElement.
+
+        Test: fast/forms/time-multiple-fields/time-multiple-fields-stepup-stepdown-from-renderer.html
+
+        * html/BaseMultipleFieldsDateAndTimeInputType.cpp:
+        (WebCore::BaseMultipleFieldsDateAndTimeInputType::updateInnerTextValue): Overwrites layoutParameters.dateTimeFormat by pattern attribute of DateTimeEditElement (if exists).
+        * html/shadow/DateTimeFieldElements.cpp:
+        (WebCore::DateTimeHourFieldElement::populateDateTimeFieldsState): Fixed a bug where AM/PM value was passed to setHour().
+        (WebCore::DateTimeHourFieldElement::setValueAsInteger): Clamps the given value to 0-24 when the range of the field is 1-12 or 1-24. Renamed the parameter as it may not be an hour23 value (0-23).
+
 2013-02-21  Zoltan Horvath  <zol...@webkit.org>
 
         [CSS Regions] Region boxes should respect -shape-inside CSS property

Modified: trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp (143769 => 143770)


--- trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp	2013-02-22 20:08:22 UTC (rev 143769)
+++ trunk/Source/WebCore/html/BaseMultipleFieldsDateAndTimeInputType.cpp	2013-02-22 20:18:37 UTC (rev 143770)
@@ -373,6 +373,10 @@
 
     setupLayoutParameters(layoutParameters, date);
 
+    const AtomicString pattern = m_dateTimeEditElement->fastGetAttribute(HTMLNames::patternAttr);
+    if (!pattern.isEmpty())
+        layoutParameters.dateTimeFormat = pattern;
+
     if (hasValue)
         m_dateTimeEditElement->setValueAsDate(layoutParameters, date);
     else

Modified: trunk/Source/WebCore/html/shadow/DateTimeFieldElements.cpp (143769 => 143770)


--- trunk/Source/WebCore/html/shadow/DateTimeFieldElements.cpp	2013-02-22 20:08:22 UTC (rev 143769)
+++ trunk/Source/WebCore/html/shadow/DateTimeFieldElements.cpp	2013-02-22 20:18:37 UTC (rev 143770)
@@ -155,7 +155,7 @@
     case 24:
         if (value == 24) {
             dateTimeFieldsState.setHour(12);
-            dateTimeFieldsState.setHour(DateTimeFieldsState::AMPMValueAM);
+            dateTimeFieldsState.setAMPM(DateTimeFieldsState::AMPMValueAM);
             return;
         }
         dateTimeFieldsState.setHour(value == 12 ? 12 : value % 12);
@@ -209,9 +209,9 @@
     }
 }
 
-void DateTimeHourFieldElement::setValueAsInteger(int valueAsHour23, EventBehavior eventBehavior)
+void DateTimeHourFieldElement::setValueAsInteger(int value, EventBehavior eventBehavior)
 {
-    const int value = Range(0, 23).clampValue(valueAsHour23) % m_alignment;
+    value = Range(0, 24 - range().maximum % 2).clampValue(value) % m_alignment;
     DateTimeNumericFieldElement::setValueAsInteger(range().minimum && !value ? m_alignment : value, eventBehavior);
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to