stepUp, stepDown, valueAsNumber, valueAsDate, and list work and have tests

This commit is contained in:
Patrick Shaughnessy 2019-12-27 18:05:48 -05:00
parent 6b79a8f042
commit 87e86c81b9
27 changed files with 1119 additions and 1244 deletions

View file

@ -368483,6 +368483,12 @@
{}
]
],
"html/semantics/forms/the-input-element/input-list.html": [
[
"html/semantics/forms/the-input-element/input-list.html",
{}
]
],
"html/semantics/forms/the-input-element/input-setcustomvalidity.html": [
[
"html/semantics/forms/the-input-element/input-setcustomvalidity.html",
@ -368537,6 +368543,12 @@
{}
]
],
"html/semantics/forms/the-input-element/input-valueasdate-stepping.html": [
[
"html/semantics/forms/the-input-element/input-valueasdate-stepping.html",
{}
]
],
"html/semantics/forms/the-input-element/input-valueasdate.html": [
[
"html/semantics/forms/the-input-element/input-valueasdate.html",
@ -368549,6 +368561,12 @@
{}
]
],
"html/semantics/forms/the-input-element/input-valueasnumber-stepping.html": [
[
"html/semantics/forms/the-input-element/input-valueasnumber-stepping.html",
{}
]
],
"html/semantics/forms/the-input-element/input-valueasnumber.html": [
[
"html/semantics/forms/the-input-element/input-valueasnumber.html",
@ -666180,6 +666198,10 @@
"77f4d8b31a5131994ee30f27179d02981047a828",
"testharness"
],
"html/semantics/forms/the-input-element/input-list.html": [
"006a8fbd8f1b84d18e9ec29285f751f037118389",
"testharness"
],
"html/semantics/forms/the-input-element/input-setcustomvalidity.html": [
"accb24d8f9564f97e12bf4784162ff3cd00f35af",
"testharness"
@ -666216,6 +666238,10 @@
"bd49a15fc82136105c17818561cc1e8f7fbfe7ee",
"testharness"
],
"html/semantics/forms/the-input-element/input-valueasdate-stepping.html": [
"09856110314aaeab6630086e62596b7801d1ec35",
"testharness"
],
"html/semantics/forms/the-input-element/input-valueasdate.html": [
"a958e991ec53a22413bc311d832bc28b3b4baccf",
"testharness"
@ -666224,6 +666250,10 @@
"a3187ff3fbca4252d701b30c761819f5075611cc",
"testharness"
],
"html/semantics/forms/the-input-element/input-valueasnumber-stepping.html": [
"c93c25b23fd3c5728dee7eb087fd512410f7c0fe",
"testharness"
],
"html/semantics/forms/the-input-element/input-valueasnumber.html": [
"321c981c74d2293694fecf18284126b089aca1c2",
"testharness"

File diff suppressed because it is too large Load diff

View file

@ -1,8 +0,0 @@
[date.html]
type: testharness
[The min attribute, if specified, must have a value that is a valid date string.]
expected: FAIL
[The max attribute, if specified, must have a value that is a valid date string.]
expected: FAIL

View file

@ -1,38 +0,0 @@
[datetime.html]
type: testharness
[[date\] stepUp method support on input 'date' element]
expected: FAIL
[[date\] stepDown method support on input 'date' element]
expected: FAIL
[[time\] stepUp method support on input 'time' element]
expected: FAIL
[[time\] stepDown method support on input 'time' element]
expected: FAIL
[[datetime\] stepUp method support on input 'datetime' element]
expected: FAIL
[[datetime\] stepDown method support on input 'datetime' element]
expected: FAIL
[[month\] stepUp method support on input 'month' element]
expected: FAIL
[[month\] stepDown method support on input 'month' element]
expected: FAIL
[[week\] stepUp method support on input 'week' element]
expected: FAIL
[[week\] stepDown method support on input 'week' element]
expected: FAIL
[[datetime-local\] stepUp method support on input 'datetime-local' element]
expected: FAIL
[[datetime-local\] stepDown method support on input 'datetime-local' element]
expected: FAIL

View file

@ -1,20 +1,5 @@
[hidden.html]
type: testharness
[valueAsDate attribute must return null for hidden]
expected: FAIL
[valueAsNumber attribute must return NaN for hidden]
expected: FAIL
[list attribute must return null for hidden]
expected: FAIL
[stepDown does not apply for hidden]
expected: FAIL
[stepUp does not apply for hidden]
expected: FAIL
[input type=hidden is barred from constraint validation]
expected: FAIL

View file

@ -1,6 +0,0 @@
[input-stepdown.html]
type: testharness
expected: ERROR
[Forms]
expected: FAIL

View file

@ -1,6 +0,0 @@
[input-stepup.html]
type: testharness
expected: ERROR
[Forms]
expected: FAIL

View file

@ -1,5 +0,0 @@
[input-valueasdate-invalidstateerr.html]
type: testharness
[Forms]
expected: FAIL

View file

@ -1,79 +1,19 @@
[input-valueasdate.html]
[valueAsDate getter on type date (actual value: 2019-00-12, expected valueAsDate: null)]
expected: FAIL
[valueAsDate getter on type date (actual value: 2016-02-29, expected valueAsDate: Mon Feb 29 2016 00:00:00 GMT+0000 (Coordinated Universal Time))]
expected: FAIL
[valueAsDate getter on type date (actual value: , expected valueAsDate: null)]
expected: FAIL
[valueAsDate getter on type week (actual value: 2019-W00, expected valueAsDate: null)]
expected: FAIL
[valueAsDate setter on type date (actual valueAsDate: Tue Dec 10 2019 00:00:00 GMT+0000 (Coordinated Universal Time), expected value: 2019-12-10)]
expected: FAIL
[valueAsDate getter on type month (actual value: 2019-12, expected valueAsDate: Sun Dec 01 2019 00:00:00 GMT+0000 (Coordinated Universal Time))]
expected: FAIL
[valueAsDate getter on type week (actual value: 2019-W50, expected valueAsDate: Mon Dec 09 2019 00:00:00 GMT+0000 (Coordinated Universal Time))]
expected: FAIL
[valueAsDate getter on type week (actual value: 2019-W60, expected valueAsDate: null)]
expected: FAIL
[valueAsDate getter on type date (actual value: 2019-12-10, expected valueAsDate: Tue Dec 10 2019 00:00:00 GMT+0000 (Coordinated Universal Time))]
expected: FAIL
[valueAsDate getter on type date (actual value: 2019-13-10, expected valueAsDate: null)]
expected: FAIL
[valueAsDate getter on type time (actual value: 00:60, expected valueAsDate: null)]
expected: FAIL
[valueAsDate setter on type time (actual valueAsDate: Thu Jan 01 1970 00:00:00 GMT+0000 (Coordinated Universal Time), expected value: 00:00)]
expected: FAIL
[valueAsDate getter on type date (actual value: 2019-12-00, expected valueAsDate: null)]
expected: FAIL
[valueAsDate getter on type month (actual value: 2019-00, expected valueAsDate: null)]
expected: FAIL
[valueAsDate getter on type week (actual value: , expected valueAsDate: null)]
expected: FAIL
[valueAsDate getter on type time (actual value: , expected valueAsDate: null)]
expected: FAIL
[valueAsDate getter on type month (actual value: , expected valueAsDate: null)]
expected: FAIL
[valueAsDate getter on type time (actual value: 12:00, expected valueAsDate: Thu Jan 01 1970 12:00:00 GMT+0000 (Coordinated Universal Time))]
expected: FAIL
[valueAsDate getter on type time (actual value: 23:59, expected valueAsDate: Thu Jan 01 1970 23:59:00 GMT+0000 (Coordinated Universal Time))]
expected: FAIL
[valueAsDate getter on type date (actual value: 2019-02-29, expected valueAsDate: null)]
expected: FAIL
[valueAsDate getter on type month (actual value: 0000-12, expected valueAsDate: null)]
expected: FAIL
[valueAsDate getter on type week (actual value: 0000-W50, expected valueAsDate: null)]
expected: FAIL
[valueAsDate getter on type date (actual value: 0000-12-10, expected valueAsDate: null)]
expected: FAIL
[valueAsDate setter on type time (actual valueAsDate: Thu Jan 01 1970 12:00:00 GMT+0000 (Coordinated Universal Time), expected value: 12:00)]
expected: FAIL
[valueAsDate getter on type time (actual value: 00:00, expected valueAsDate: Thu Jan 01 1970 00:00:00 GMT+0000 (Coordinated Universal Time))]
[valueAsDate setter on type time (actual valueAsDate: Thu Jan 01 1970 23:59:00 GMT+0000 (Coordinated Universal Time), expected value: 23:59)]
expected: FAIL
[valueAsDate getter on type time (actual value: 24:00, expected valueAsDate: null)]
[valueAsDate setter on type time (actual valueAsDate: Wed Dec 31 1969 19:00:00 GMT-0500 (Eastern Standard Time), expected value: 00:00)]
expected: FAIL
[valueAsDate setter on type time (actual valueAsDate: Thu Jan 01 1970 07:00:00 GMT-0500 (Eastern Standard Time), expected value: 12:00)]
expected: FAIL
[valueAsDate setter on type time (actual valueAsDate: Thu Jan 01 1970 18:59:00 GMT-0500 (Eastern Standard Time), expected value: 23:59)]
expected: FAIL

View file

@ -1,3 +0,0 @@
[input-valueasnumber-invalidstateerr.html]
type: testharness
expected: TIMEOUT

View file

@ -1,38 +1,5 @@
[input-valueasnumber.html]
[valueAsNumber getter on type month (actual value: 0000-12, expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type datetime-local (actual value: 2019-12-10T12:00, expected valueAsNumber: 1575979200000)]
expected: FAIL
[valueAsNumber getter on type month (actual value: 2019-00, expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type date (actual value: 2016-02-29, expected valueAsNumber: 1456704000000)]
expected: FAIL
[valueAsNumber getter on type time (actual value: , expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber setter on type range (actual valueAsNumber: 0, expected value: 0)]
expected: FAIL
[valueAsNumber getter on type range (actual value: 110, expected valueAsNumber: 100)]
expected: FAIL
[valueAsNumber getter on type range (actual value: -10, expected valueAsNumber: 0)]
expected: FAIL
[valueAsNumber setter on type date (actual valueAsNumber: 0, expected value: 1970-01-01)]
expected: FAIL
[valueAsNumber getter on type date (actual value: 2019-00-12, expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type date (actual value: 2019-12-00, expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber setter on type date (actual valueAsNumber: 1575936000000, expected value: 2019-12-10)]
[valueAsNumber setter on type time (actual valueAsNumber: 86340000, expected value: 23:59)]
expected: FAIL
[valueAsNumber setter on type time (actual valueAsNumber: 43200000, expected value: 12:00)]
@ -40,97 +7,3 @@
[valueAsNumber setter on type time (actual valueAsNumber: 0, expected value: 00:00)]
expected: FAIL
[valueAsNumber getter on type time (actual value: 24:00, expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber setter on type number (actual valueAsNumber: 123, expected value: 123)]
expected: FAIL
[valueAsNumber getter on type time (actual value: 00:60, expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type week (actual value: 2019-W60, expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type date (actual value: , expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type number (actual value: 123, expected valueAsNumber: 123)]
expected: FAIL
[valueAsNumber setter on type range (actual valueAsNumber: 50, expected value: 50)]
expected: FAIL
[valueAsNumber setter on type week (actual valueAsNumber: 0, expected value: 1970-W01)]
expected: FAIL
[valueAsNumber getter on type week (actual value: , expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type range (actual value: 100, expected valueAsNumber: 100)]
expected: FAIL
[valueAsNumber getter on type datetime-local (actual value: 2019-12-10T00:00, expected valueAsNumber: 1575936000000)]
expected: FAIL
[valueAsNumber getter on type time (actual value: 12:00, expected valueAsNumber: 43200000)]
expected: FAIL
[valueAsNumber getter on type datetime-local (actual value: , expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type number (actual value: , expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type number (actual value: 123.456, expected valueAsNumber: 123.456)]
expected: FAIL
[valueAsNumber getter on type time (actual value: 23:59, expected valueAsNumber: 86340000)]
expected: FAIL
[valueAsNumber getter on type week (actual value: 0000-W50, expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type month (actual value: 2019-12, expected valueAsNumber: 599)]
expected: FAIL
[valueAsNumber getter on type range (actual value: 0, expected valueAsNumber: 0)]
expected: FAIL
[valueAsNumber getter on type range (actual value: 50, expected valueAsNumber: 50)]
expected: FAIL
[valueAsNumber getter on type week (actual value: 2019-W50, expected valueAsNumber: 1575849600000)]
expected: FAIL
[valueAsNumber setter on type datetime-local (actual valueAsNumber: 1575936000000, expected value: 2019-12-10T00:00)]
expected: FAIL
[valueAsNumber getter on type date (actual value: 0000-12-10, expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type date (actual value: 2019-13-10, expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type time (actual value: 00:00, expected valueAsNumber: 0)]
expected: FAIL
[valueAsNumber getter on type range (actual value: , expected valueAsNumber: 50)]
expected: FAIL
[valueAsNumber setter on type range (actual valueAsNumber: 100, expected value: 100)]
expected: FAIL
[valueAsNumber getter on type date (actual value: 2019-02-29, expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type date (actual value: 2019-12-10, expected valueAsNumber: 1575936000000)]
expected: FAIL
[valueAsNumber getter on type week (actual value: 2019-W00, expected valueAsNumber: NaN)]
expected: FAIL
[valueAsNumber getter on type month (actual value: , expected valueAsNumber: NaN)]
expected: FAIL

View file

@ -1,5 +0,0 @@
[month.html]
type: testharness
[When step attribute is given invalid value, it must ignore the invalid value and use defaul value instead.]
expected: FAIL

View file

@ -1,14 +1,4 @@
[range-2.html]
type: testharness
[range input value set to '']
expected: FAIL
[range input value equals 50]
expected: FAIL
[range input value equals 100]
expected: FAIL
[range input value set to an integer]
expected: FAIL

View file

@ -1,44 +1,7 @@
[range.html]
type: testharness
[Converting an illegal string to the default value]
expected: FAIL
[Converting an illegal string to the default step]
expected: FAIL
[the value is set to min when a smaller value than min attribute is given]
expected: FAIL
[the value is set to max when a larger value than max attribute is given]
expected: FAIL
[default value when min and max attributes are given (= min plus half the difference between min and max)]
expected: FAIL
[default value with step control when both min and max attributes are given]
expected: FAIL
[default value when both min and max attributes are given, while min > max]
expected: FAIL
[Step scale factor behavior when min attribute has integer value but max attribute is non-integer ]
expected: FAIL
[The default scale factor is 1 even if step attribute is explicitly set to non-integer value, unless min attribute has non-integer value]
expected: FAIL
[Solving the step mismatch]
[Skip ASCII whitespace within input]
expected: FAIL
[Performing stepUp()]
expected: FAIL
[Performing stepDown()]
expected: FAIL
[Performing stepUp() beyond the value of the max attribute]
expected: FAIL
[Performing stepDown() beyond the value of the min attribute]
expected: FAIL

View file

@ -1,32 +0,0 @@
[text.html]
type: testharness
[valueAsDate attribute must return null for text]
expected: FAIL
[valueAsNumber attribute must return NaN for text]
expected: FAIL
[list attribute must return null for text]
expected: FAIL
[stepDown does not apply for text]
expected: FAIL
[stepUp does not apply for text]
expected: FAIL
[valueAsDate attribute must return null for search]
expected: FAIL
[valueAsNumber attribute must return NaN for search]
expected: FAIL
[list attribute must return null for search]
expected: FAIL
[stepDown does not apply for search]
expected: FAIL
[stepUp does not apply for search]
expected: FAIL

View file

@ -1,4 +0,0 @@
[time-datalist-crash.html]
[Moving a datalist enclosing an input type=time using that list should not crash.]
expected: FAIL

View file

@ -1,86 +0,0 @@
[time.html]
type: testharness
[stepUp function support on input Element]
expected: FAIL
[stepDown function support on input Element]
expected: FAIL
[stepUp step value empty on default step value ]
expected: FAIL
[stepDown step value empty default step value]
expected: FAIL
[stepUp on step value minus]
expected: FAIL
[stepDown on step value minus]
expected: FAIL
[stepUp on step value zero ]
expected: FAIL
[stepDown on step value zero ]
expected: FAIL
[stepUp on step value 24 hour]
expected: FAIL
[stepDown on step value 24 hour ]
expected: FAIL
[stepUp on step value hour ]
expected: FAIL
[stepDown on step value hour ]
expected: FAIL
[stepUp on step value second ]
expected: FAIL
[stepDown on step value second ]
expected: FAIL
[stepUp on step value miri second ]
expected: FAIL
[stepDown on step value miri second ]
expected: FAIL
[stepUp argment 2 times]
expected: FAIL
[stepDown argment 2 times]
expected: FAIL
[stepUp stop because it exceeds the maximum value]
expected: FAIL
[stepDown Stop so lower than the minimum value]
expected: FAIL
[stop at border on stepUp]
expected: FAIL
[stop at border on stepDown]
expected: FAIL
[ empty value of stepUp]
expected: FAIL
[stepUp on step value with fractional seconds]
expected: FAIL
[stepDown on step value with fractional seconds]
expected: FAIL
[stepUp argument 2 times]
expected: FAIL
[stepDown argument 2 times]
expected: FAIL
[stepDown stop so lower than the minimum value]
expected: FAIL

View file

@ -1,4 +0,0 @@
[type-change-file-to-text-crash.html]
[Changing type from file to text should not crash.]
expected: FAIL

View file

@ -1,134 +0,0 @@
[type-change-state.html]
type: testharness
[change state from hidden to datetime]
expected: FAIL
[change state from hidden to range]
expected: FAIL
[change state from text to datetime]
expected: FAIL
[change state from text to range]
expected: FAIL
[change state from search to datetime]
expected: FAIL
[change state from search to range]
expected: FAIL
[change state from tel to datetime]
expected: FAIL
[change state from tel to range]
expected: FAIL
[change state from url to datetime]
expected: FAIL
[change state from url to range]
expected: FAIL
[change state from email to datetime]
expected: FAIL
[change state from email to range]
expected: FAIL
[change state from password to datetime]
expected: FAIL
[change state from password to range]
expected: FAIL
[change state from datetime to text]
expected: FAIL
[change state from datetime to search]
expected: FAIL
[change state from datetime to tel]
expected: FAIL
[change state from datetime to url]
expected: FAIL
[change state from datetime to password]
expected: FAIL
[change state from datetime to week]
expected: FAIL
[change state from datetime to range]
expected: FAIL
[change state from date to datetime]
expected: FAIL
[change state from date to range]
expected: FAIL
[change state from date to range]
expected: FAIL
[change state from month to range]
expected: FAIL
[change state from week to datetime]
expected: FAIL
[change state from week to range]
expected: FAIL
[change state from time to datetime]
expected: FAIL
[change state from time to range]
expected: FAIL
[change state from number to range]
expected: FAIL
[change state from range to datetime]
expected: FAIL
[change state from checkbox to range]
expected: FAIL
[change state from radio to datetime]
expected: FAIL
[change state from radio to range]
expected: FAIL
[change state from submit to datetime]
expected: FAIL
[change state from submit to range]
expected: FAIL
[change state from image to datetime]
expected: FAIL
[change state from image to range]
expected: FAIL
[change state from reset to datetime]
expected: FAIL
[change state from reset to range]
expected: FAIL
[change state from button to datetime]
expected: FAIL
[change state from button to range]
expected: FAIL
[change state from datetime-local to range]
expected: FAIL
[change state from color to range]
expected: FAIL

View file

@ -1,13 +0,0 @@
[valueMode.html]
type: testharness
[value IDL attribute of input type datetime without value attribute]
expected: FAIL
[value IDL attribute of input type datetime with value attribute]
expected: FAIL
[value IDL attribute of input type range without value attribute]
expected: FAIL
[value IDL attribute of input type range with value attribute]
expected: FAIL

View file

@ -0,0 +1,67 @@
<!DOCTYPE HTML>
<html>
<head>
<title>input list attribute</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<p>
<h3>input_list</h3>
</p>
<hr>
<div id="log"></div>
<form method="post"
enctype="application/x-www-form-urlencoded"
action=""
name="input_form">
<datalist id="thelist">
<option value="one">one</option>
<option value="two">two</option>
</datalist>
<p id="non_datalist_first">
<datalist id="non_datalist_first">
<option value="one">one</option>
<option value="two">two</option>
</datalist>
<datalist id="datalist_first">
<option value="one">one</option>
<option value="two">two</option>
</datalist>
<p id="datalist_first">
<p><input list="thelist" id='input_with_list'></p>
<p><input id='input_without_list'></p>
<p><input list="input_with_list" id='input_with_nondatalist_list'></p>
<p><input list="not_an_id" id='input_with_missing_list'></p>
<p><input list="non_datalist_first" id='input_with_non_datalist_first'></p>
<p><input list="datalist_first" id='input_with_datalist_first'></p>
</form>
<script>
test(function() {
assert_equals(document.getElementById("input_with_list").list, document.getElementById("thelist"));
}, "getting .list of input must return the datalist with that id");
test(function() {
assert_equals(document.getElementById("input_without_list").list, null);
}, "getting .list of input must return null if it has no list attribute");
test(function() {
assert_equals(document.getElementById("input_with_nondatalist_list").list, null);
}, "getting .list of input must return null if the list attribute is a non-datalist's id");
test(function() {
assert_equals(document.getElementById("input_with_missing_list").list, null);
}, "getting .list of input must return null if the list attribute is no element's id");
test(function() {
assert_equals(document.getElementById("input_with_non_datalist_first").list, null);
}, "getting .list of input must return null if the list attribute is used in a non-datalist earlier than a datalist");
test(function() {
assert_equals(document.getElementById("input_with_datalist_first").list, document.querySelector("datalist#datalist_first"));
}, "getting .list of input must return the datalist with that id even if a later non-datalist also has the id");
</script>
</body>
</html>

View file

@ -0,0 +1,83 @@
<!DOCTYPE HTML>
<html>
<head>
<title>valueAsDate stepping</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<p>
<h3>input_valueAsDate_stepping</h3>
<!-- This test verifies that valueAsDate reads and writes Date values,
that those values step by the correct default step, and that the values
represent the correct times.
-->
</p>
<hr>
<div id="log"></div>
<form method="post"
enctype="application/x-www-form-urlencoded"
action=""
name="input_form">
<p><input type='date' id='input_date'></p>
<p><input type='time' id='input_time'></p>
<p><input type='week' id='input_week'></p>
<p><input type='month' id='input_month'></p>
</form>
<script>
function test_stepping(inputType, stringValue, steppedString, baseMillis, stepAmount) {
test(function() {
// put date in, constructed from a UTC timestamp so the test doesn't
// vary by local timezone
input = document.getElementById("input_" + inputType);
input.valueAsDate = new Date(baseMillis)
// get string out (using startsWith here to allow for optional
// seconds and milliseconds)
var sanitizedStr = input.value;
assert_true(sanitizedStr.startsWith(stringValue),
"The input value [" + sanitizedStr + "] must resemble [" + stringValue + "]");
// get date out
var sanitized = input.valueAsDate;
assert_equals(sanitized.getTime(), baseMillis, "The input valueAsDate must represent the same time as the original Date.")
// step up, get new date out
input.stepUp()
var steppedDate = input.valueAsDate;
assert_equals(steppedDate.getTime(), baseMillis + stepAmount, "Stepping must be by the correct amount")
// get new string out
var steppedStrOut = input.value;
assert_true(steppedStrOut.startsWith(steppedString),
"The changed input value [" + steppedStrOut + "] must resemble ["+steppedString+"]");
// step back down, get first date out again
input.stepDown()
var backDown = input.valueAsDate;
assert_equals(backDown.getTime(), baseMillis, "Stepping back down must return the date to its original value");
}, inputType + " should step correctly");
}
var millis_per_day = 24 * 60 * 60 * 1000;
// jan 1 midnight, step 1 day to jan 2
test_stepping("date", "1970-01-01", "1970-01-02", 0, millis_per_day);
// jan 1 midnight, step 1 minute to 00:01:00
test_stepping("time", "00:00", "00:01", 0, 60 * 1000);
// jan 1 midnight, step 31 days to feb 1
test_stepping("month", "1970-01", "1970-02", 0, 31 * millis_per_day);
// monday jan 5 1970 midnight, step 7 days to jan 12
// (this has to start on a monday for stepping up and down to return)
test_stepping("week", "1970-W02", "1970-W03", 4 * millis_per_day, 7 * millis_per_day);
</script>
</body>
</html>

View file

@ -0,0 +1,94 @@
<!DOCTYPE HTML>
<html>
<head>
<title>valueAsNumber stepping</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<p>
<h3>input_valueAsNumber_stepping</h3>
<!-- This test verifies that valueAsNumber reads and writes number values,
that those values step by the correct default step, and that the values
represent the correct milliseconds/months.
-->
</p>
<hr>
<div id="log"></div>
<form method="post"
enctype="application/x-www-form-urlencoded"
action=""
name="input_form">
<p><input type='date' id='input_date'></p>
<p><input type='time' id='input_time'></p>
<p><input type='week' id='input_week'></p>
<p><input type='month' id='input_month'></p>
<p><input type='datetime-local' id='input_datetime-local'></p>
<p><input type='range' id='input_range'></p>
<p><input type='number' id='input_number'></p>
</form>
<script>
function test_stepping(inputType, stringValue, steppedString, baseNumber, stepAmount) {
test(function() {
// put number in
input = document.getElementById("input_" + inputType);
input.valueAsNumber = baseNumber
// get string out
// startsWith is here to allow for optional seconds and milliseconds.
// the replace("T", " ") fallback is for https://github.com/web-platform-tests/wpt/issues/20994
var sanitizedStr = input.value;
assert_true(sanitizedStr.startsWith(stringValue) || sanitizedStr.startsWith(stringValue.replace("T", " ")),
"The input value [" + sanitizedStr + "] must resemble [" + stringValue + "]");
// get number out
var sanitized = input.valueAsNumber;
assert_equals(sanitized, baseNumber, "The input valueAsNumber must equal the original number.")
// step up, get new date out
input.stepUp()
var steppedNumber = input.valueAsNumber;
assert_equals(steppedNumber, baseNumber + stepAmount, "Stepping must be by the correct amount")
// get new string out
var steppedStrOut = input.value;
assert_true(steppedStrOut.startsWith(steppedString) || steppedStrOut.startsWith(steppedString.replace("T", " ")),
"The changed input value [" + steppedStrOut + "] must resemble [" + steppedString + "]");
// step back down, get first date out again
input.stepDown()
var backDown = input.valueAsNumber;
assert_equals(backDown, baseNumber, "Stepping back down must return the number to its original value");
}, inputType + " should step correctly");
}
var millis_per_day = 24 * 60 * 60 * 1000;
// jan 1 midnight, step 1 day to jan 2
test_stepping("date", "1970-01-01", "1970-01-02", 0, millis_per_day);
// jan 1 midnight, step 1 minute to 00:01:00
test_stepping("time", "00:00", "00:01", 0, 60 * 1000);
// jan 1 midnight, step 1 month (not counting by milliseconds) to feb 1
test_stepping("month", "1970-01", "1970-02", 0, 1);
// monday jan 5 1970 midnight, step 7 days to jan 12
// (this has to start on a monday for stepping up and down to return)
test_stepping("week", "1970-W02", "1970-W03", 4 * millis_per_day, 7 * millis_per_day);
// jan 1 midnight, step 1 minute to 00:01:00
test_stepping("datetime-local", "1970-01-01T00:00", "1970-01-01T00:01", 0, 60 * 1000);
// numbers, for which the default step is 1
test_stepping("range", "22", "23", 22, 1);
test_stepping("number", "24", "25", 24, 1);
</script>
</body>
</html>