products/sources/formale Sprachen/C/Firefox/dom/html/test/forms/test_stepup_stepdown.html
<!
DOCTYPE HTML >
<
html >
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=636627
-->
<
head >
<
title >Test for Bug 636627</
title >
<
script src=
"/tests/SimpleTest/SimpleTest.js" ></
script >
<
link rel=
"stylesheet" type=
"text/css" href=
"/tests/SimpleTest/test.css" />
</
head >
<
body >
<a target=
"_blank" href=
"https://bugzilla.mozilla.org/show_bug.cgi?id=636627 " >Mozill
a Bug 636627</a>
<p id="display" ></p>
<pre id="test" >
<script type="application/javascript" >
/** Test for Bug 636627 **/
/**
* This test is testing stepDown() and stepUp().
*/
function checkPresence()
{
var input = document.createElement('input' );
is('stepDown' in input , true, 'stepDown() should be an input function' );
is('stepUp' in input , true, 'stepUp() should be an input function' );
}
function checkAvailability()
{
var testData =
[
["text" , false],
["password" , false],
["search" , false],
["telephone" , false],
["email" , false],
["url" , false],
["hidden" , false],
["checkbox" , false],
["radio" , false],
["file" , false],
["submit" , false],
["image" , false],
["reset" , false],
["button" , false],
["number" , true],
["range" , true],
["date" , true],
["time" , true],
["month" , true],
["week" , true],
["datetime-local" , true],
["color" , false],
];
var element = document.createElement("input" );
element.setAttribute('value' , '0' );
for (data of testData) {
var exceptionCaught = false;
element.type = data[0];
try {
element.stepDown();
} catch (e) {
exceptionCaught = true;
}
is(exceptionCaught, !data[1], "stepDown() availability is not correct" );
exceptionCaught = false;
try {
element.stepUp();
} catch (e) {
exceptionCaught = true;
}
is(exceptionCaught, !data[1], "stepUp() availability is not correct" );
}
}
function checkStepDown()
{
// This testData is very similar to the one in checkStepUp with some changes
// relative to stepDown.
var testData = [
/* Initial value | step | min | max | stepDown arg | final value | exception */
{ type: 'number' , data: [
// Regular case.
[ '1' , null, null, null, null, '0' , false ],
// Argument testing.
[ '1' , null, null, null, 1, '0' , false ],
[ '9' , null, null, null, 9, '0' , false ],
[ '1' , null, null, null, -1, '2' , false ],
[ '1' , null, null, null, 0, '1' , false ],
// Float values are rounded to integer (1.1 -> 1).
[ '1' , null, null, null, 1.1, '0' , false ],
// With step values.
[ '1' , '0.5' , null, null, null, '0.5' , false ],
[ '1' , '0.25' , null, null, 4, '0' , false ],
// step = 0 isn't allowed (-> step = 1).
[ '1' , '0' , null, null, null, '0' , false ],
// step < 0 isn't allowed (-> step = 1).
[ '1' , '-1' , null, null, null, '0' , false ],
// step = NaN isn't allowed (-> step = 1).
[ '1' , 'foo' , null, null, null, '0' , false ],
// Min values testing.
[ '1' , '1' , 'foo' , null, null, '0' , false ],
[ '1' , null, '-10' , null, null, '0' , false ],
[ '1' , null, '0' , null, null, '0' , false ],
[ '1' , null, '10' , null, null, '1' , false ],
[ '1' , null, '2' , null, null, '1' , false ],
[ '1' , null, '1' , null, null, '1' , false ],
// Max values testing.
[ '1' , '1' , null, 'foo' , null, '0' , false ],
[ '1' , null, null, '10' , null, '0' , false ],
[ '1' , null, null, '0' , null, '0' , false ],
[ '1' , null, null, '-10' , null, '-10' , false ],
[ '1' , null, null, '1' , null, '0' , false ],
[ '5' , null, null, '3' , '3' , '2' , false ],
[ '5' , '2' , '-6' , '3' , '2' , '2' , false ],
[ '-3' , '5' , '-10' , '-3' , null, '-5' , false ],
// Step mismatch.
[ '1' , '2' , '-2' , null, null, '0' , false ],
[ '3' , '2' , '-2' , null, null, '2' , false ],
[ '3' , '2' , '-2' , null, '2' , '0' , false ],
[ '3' , '2' , '-2' , null, '-2' , '6' , false ],
[ '1' , '2' , '-6' , null, null, '0' , false ],
[ '1' , '2' , '-2' , null, null, '0' , false ],
[ '1' , '3' , '-6' , null, null, '0' , false ],
[ '2' , '3' , '-6' , null, null, '0' , false ],
[ '2' , '3' , '1' , null, null, '1' , false ],
[ '5' , '3' , '1' , null, null, '4' , false ],
[ '3' , '2' , '-6' , null, null, '2' , false ],
[ '5' , '2' , '-6' , null, null, '4' , false ],
[ '6' , '2' , '1' , null, null, '5' , false ],
[ '8' , '3' , '1' , null, null, '7' , false ],
[ '9' , '2' , '-10' , null, null, '8' , false ],
[ '7' , '3' , '-10' , null, null, '5' , false ],
[ '-2' , '3' , '-10' , null, null, '-4' , false ],
// Clamping.
[ '0' , '2' , '-1' , null, null, '-1' , false ],
[ '10' , '2' , '0' , '4' , '10' , '0' , false ],
[ '10' , '2' , '0' , '4' , '5' , '0' , false ],
// value = "" (NaN).
[ '' , null, null, null, null, '-1' , false ],
[ '' , '2' , null, null, null, '-2' , false ],
[ '' , '2' , '3' , null, null, '3' , false ],
[ '' , null, '3' , null, null, '3' , false ],
[ '' , '2' , '3' , '8' , null, '3' , false ],
[ '' , null, '-10' , '10' , null, '-1' , false ],
[ '' , '3' , '-10' , '10' , null, '-1' , false ],
// With step = 'any' .
[ '0' , 'any' , null, null, 1, null, true ],
[ '0' , 'ANY' , null, null, 1, null, true ],
[ '0' , 'AnY' , null, null, 1, null, true ],
[ '0' , 'aNy' , null, null, 1, null, true ],
// With @value = step base .
[ '1' , '2' , null, null, null, '-1' , false ],
]},
{ type: 'range' , data: [
// Regular case.
[ '1' , null, null, null, null, '0' , false ],
// Argument testing.
[ '1' , null, null, null, 1, '0' , false ],
[ '9' , null, null, null, 9, '0' , false ],
[ '1' , null, null, null, -1, '2' , false ],
[ '1' , null, null, null, 0, '1' , false ],
// Float values are rounded to integer (1.1 -> 1).
[ '1' , null, null, null, 1.1, '0' , false ],
// With step values.
[ '1' , '0.5' , null, null, null, '0.5' , false ],
[ '1' , '0.25' , null, null, 4, '0' , false ],
// step = 0 isn't allowed (-> step = 1).
[ '1' , '0' , null, null, null, '0' , false ],
// step < 0 isn't allowed (-> step = 1).
[ '1' , '-1' , null, null, null, '0' , false ],
// step = NaN isn't allowed (-> step = 1).
[ '1' , 'foo' , null, null, null, '0' , false ],
// Min values testing.
[ '1' , '1' , 'foo' , null, null, '0' , false ],
[ '1' , null, '-10' , null, null, '0' , false ],
[ '1' , null, '0' , null, null, '0' , false ],
[ '1' , null, '10' , null, null, '10' , false ],
[ '1' , null, '2' , null, null, '2' , false ],
[ '1' , null, '1' , null, null, '1' , false ],
// Max values testing.
[ '1' , '1' , null, 'foo' , null, '0' , false ],
[ '1' , null, null, '10' , null, '0' , false ],
[ '1' , null, null, '0' , null, '0' , false ],
[ '1' , null, null, '-10' , null, '0' , false ],
[ '1' , null, null, '1' , null, '0' , false ],
[ '5' , null, null, '3' , '3' , '0' , false ],
[ '5' , '2' , '-6' , '3' , '2' , '-2' , false ],
[ '-3' , '5' , '-10' , '-3' , null, '-10' , false ],
// Step mismatch.
[ '1' , '2' , '-2' , null, null, '0' , false ],
[ '3' , '2' , '-2' , null, null, '2' , false ],
[ '3' , '2' , '-2' , null, '2' , '0' , false ],
[ '3' , '2' , '-2' , null, '-2' , '8' , false ],
[ '1' , '2' , '-6' , null, null, '0' , false ],
[ '1' , '2' , '-2' , null, null, '0' , false ],
[ '1' , '3' , '-6' , null, null, '-3' , false ],
[ '2' , '3' , '-6' , null, null, '0' , false ],
[ '2' , '3' , '1' , null, null, '1' , false ],
[ '5' , '3' , '1' , null, null, '1' , false ],
[ '3' , '2' , '-6' , null, null, '2' , false ],
[ '5' , '2' , '-6' , null, null, '4' , false ],
[ '6' , '2' , '1' , null, null, '5' , false ],
[ '8' , '3' , '1' , null, null, '4' , false ],
[ '9' , '2' , '-10' , null, null, '8' , false ],
[ '7' , '3' , '-10' , null, null, '5' , false ],
[ '-2' , '3' , '-10' , null, null, '-4' , false ],
// Clamping.
[ '0' , '2' , '-1' , null, null, '-1' , false ],
[ '10' , '2' , '0' , '4' , '10' , '0' , false ],
[ '10' , '2' , '0' , '4' , '5' , '0' , false ],
// value = "" (default will be 50).
[ '' , null, null, null, null, '49' , false ],
// With step = 'any' .
[ '0' , 'any' , null, null, 1, null, true ],
[ '0' , 'ANY' , null, null, 1, null, true ],
[ '0' , 'AnY' , null, null, 1, null, true ],
[ '0' , 'aNy' , null, null, 1, null, true ],
// With @value = step base .
[ '1' , '2' , null, null, null, '1' , false ],
]},
{ type: 'date' , data: [
// Regular case.
[ '2012-07-09' , null, null, null, null, '2012-07-08' , false ],
// Argument testing.
[ '2012-07-09' , null, null, null, 1, '2012-07-08' , false ],
[ '2012-07-09' , null, null, null, 5, '2012-07-04' , false ],
[ '2012-07-09' , null, null, null, -1, '2012-07-10' , false ],
[ '2012-07-09' , null, null, null, 0, '2012-07-09' , false ],
// Month/Year wrapping.
[ '2012-08-01' , null, null, null, 1, '2012-07-31' , false ],
[ '1969-01-02' , null, null, null, 4, '1968-12-29' , false ],
[ '1969-01-01' , null, null, null, -365, '1970-01-01' , false ],
[ '2012-02-29' , null, null, null, -1, '2012-03-01' , false ],
// Float values are rounded to integer (1.1 -> 1).
[ '2012-01-02' , null, null, null, 1.1, '2012-01-01' , false ],
[ '2012-01-02' , null, null, null, 1.9, '2012-01-01' , false ],
// With step values.
[ '2012-01-03' , '0.5' , null, null, null, '2012-01-02' , false ],
[ '2012-01-02' , '0.5' , null, null, null, '2012-01-01' , false ],
[ '2012-01-01' , '2' , null, null, null, '2011-12-30' , false ],
[ '2012-01-02' , '0.25' ,null, null, 4, '2011-12-29' , false ],
[ '2012-01-15' , '1.1' , '2012-01-01' , null, 1, '2012-01-14' , false ],
[ '2012-01-12' , '1.1' , '2012-01-01' , null, 2, '2012-01-10' , false ],
[ '2012-01-23' , '1.1' , '2012-01-01' , null, 10, '2012-01-13' , false ],
[ '2012-01-23' , '1.1' , '2012-01-01' , null, 11, '2012-01-12' , false ],
[ '1968-01-12' , '1.1' , '1968-01-01' , null, 8, '1968-01-04' , false ],
// step = 0 isn't allowed (-> step = 1).
[ '2012-01-02' , '0' , null, null, null, '2012-01-01' , false ],
// step < 0 isn't allowed (-> step = 1).
[ '2012-01-02' , '-1' , null, null, null, '2012-01-01' , false ],
// step = NaN isn't allowed (-> step = 1).
[ '2012-01-02' , 'foo' , null, null, null, '2012-01-01' , false ],
// Min values testing.
[ '2012-01-03' , '1' , 'foo' , null, 2, '2012-01-01' , false ],
[ '2012-01-02' , '1' , '2012-01-01' , null, null, '2012-01-01' , false ],
[ '2012-01-01' , '1' , '2012-01-01' , null, null, '2012-01-01' , false ],
[ '2012-01-01' , '1' , '2012-01-10' , null, 1, '2012-01-01' , false ],
[ '2012-01-05' , '3' , '2012-01-01' , null, null, '2012-01-04' , false ],
[ '1969-01-01' , '5' , '1969-01-01' , '1969-01-02' , null, '1969-01-01' , false ],
// Max values testing.
[ '2012-01-02' , '1' , null, 'foo' , null, '2012-01-01' , false ],
[ '2012-01-02' , null, null, '2012-01-05' , null, '2012-01-01' , false ],
[ '2012-01-03' , null, null, '2012-01-03' , null, '2012-01-02' , false ],
[ '2012-01-07' , null, null, '2012-01-04' , 4, '2012-01-03' , false ],
[ '2012-01-07' , '2' , null, '2012-01-04' , 3, '2012-01-01' , false ],
// Step mismatch.
[ '2012-01-04' , '2' , '2012-01-01' , null, null, '2012-01-03' , false ],
[ '2012-01-06' , '2' , '2012-01-01' , null, 2, '2012-01-03' , false ],
[ '2012-01-05' , '2' , '2012-01-04' , '2012-01-08' , null, '2012-01-04' , false ],
[ '1970-01-04' , '2' , null, null, null, '1970-01-02' , false ],
[ '1970-01-09' , '3' , null, null, null, '1970-01-06' , false ],
// Clamping.
[ '2012-05-01' , null, null, '2012-01-05' , null, '2012-01-05' , false ],
[ '1970-01-05' , '2' , '1970-01-02' , '1970-01-05' , null, '1970-01-04' , false ],
[ '1970-01-01' , '5' , '1970-01-02' , '1970-01-09' , 10, '1970-01-01' , false ],
[ '1970-01-07' , '5' , '1969-12-27' , '1970-01-06' , 2, '1970-01-01' , false ],
[ '1970-03-08' , '3' , '1970-02-01' , '1970-02-07' , 15, '1970-02-01' , false ],
[ '1970-01-10' , '3' , '1970-01-01' , '1970-01-06' , 2, '1970-01-04' , false ],
// value = "" (NaN).
[ '' , null, null, null, null, '1969-12-31' , false ],
// With step = 'any' .
[ '2012-01-01' , 'any' , null, null, 1, null, true ],
[ '2012-01-01' , 'ANY' , null, null, 1, null, true ],
[ '2012-01-01' , 'AnY' , null, null, 1, null, true ],
[ '2012-01-01' , 'aNy' , null, null, 1, null, true ],
]},
{ type: 'time' , data: [
// Regular case.
[ '16:39' , null, null, null, null, '16:38' , false ],
// Argument testing.
[ '16:40' , null, null, null, 1, '16:39' , false ],
[ '16:40' , null, null, null, 5, '16:35' , false ],
[ '16:40' , null, null, null, -1, '16:41' , false ],
[ '16:40' , null, null, null, 0, '16:40' , false ],
// hour/minutes/seconds wrapping.
[ '05:00' , null, null, null, null, '04:59' , false ],
[ '05:00:00' , 1, null, null, null, '04:59:59' , false ],
[ '05:00:00' , 0.1, null, null, null, '04:59:59.900' , false ],
[ '05:00:00' , 0.01, null, null, null, '04:59:59.990' , false ],
[ '05:00:00' , 0.001, null, null, null, '04:59:59.999' , false ],
// stepDown() on '00:00' gives '23:59' .
[ '00:00' , null, null, null, 1, '23:59' , false ],
[ '00:00' , null, null, null, 3, '23:57' , false ],
// Some random step values..
[ '16:56' , '0.5' , null, null, null, '16:55:59.500' , false ],
[ '16:56' , '2' , null, null, null, '16:55:58' , false ],
[ '16:56' , '0.25' ,null, null, 4, '16:55:59' , false ],
[ '16:57' , '1.1' , '16:00' , null, 1, '16:56:59.900' , false ],
[ '16:57' , '1.1' , '16:00' , null, 2, '16:56:58.800' , false ],
[ '16:57' , '1.1' , '16:00' , null, 10, '16:56:50' , false ],
[ '16:57' , '1.1' , '16:00' , null, 11, '16:56:48.900' , false ],
[ '16:57' , '1.1' , '16:00' , null, 8, '16:56:52.200' , false ],
// Invalid @step, means that we use the default value.
[ '17:01' , '0' , null, null, null, '17:00' , false ],
[ '17:01' , '-1' , null, null, null, '17:00' , false ],
[ '17:01' , 'foo' , null, null, null, '17:00' , false ],
// Min values testing.
[ '17:02' , '60' , 'foo' , null, 2, '17:00' , false ],
[ '17:10' , '60' , '17:09' , null, null, '17:09' , false ],
[ '17:10' , '60' , '17:10' , null, null, '17:10' , false ],
[ '17:10' , '60' , '17:30' , null, 1, '17:10' , false ],
[ '17:10' , '180' , '17:05' , null, null, '17:08' , false ],
[ '17:10' , '300' , '17:10' , '17:11' , null, '17:10' , false ],
// Max values testing.
[ '17:15' , '60' , null, 'foo' , null, '17:14' , false ],
[ '17:15' , null, null, '17:20' , null, '17:14' , false ],
[ '17:15' , null, null, '17:15' , null, '17:14' , false ],
[ '17:15' , null, null, '17:13' , 4, '17:11' , false ],
[ '17:15' , '120' , null, '17:13' , 3, '17:09' , false ],
// Step mismatch.
[ '17:19' , '120' , '17:10' , null, null, '17:18' , false ],
[ '17:19' , '120' , '17:10' , null, 2, '17:16' , false ],
[ '17:19' , '120' , '17:18' , '17:25' , null, '17:18' , false ],
[ '17:19' , '120' , null, null, null, '17:17' , false ],
[ '17:19' , '180' , null, null, null, '17:16' , false ],
// Clamping.
[ '17:22' , null, null, '17:11' , null, '17:11' , false ],
[ '17:22' , '120' , '17:20' , '17:22' , null, '17:20' , false ],
[ '17:22' , '300' , '17:12' , '17:20' , 10, '17:12' , false ],
[ '17:22' , '300' , '17:18' , '17:20' , 2, '17:18' , false ],
[ '17:22' , '180' , '17:00' , '17:20' , 15, '17:00' , false ],
[ '17:22' , '180' , '17:10' , '17:20' , 2, '17:16' , false ],
// value = "" (NaN).
[ '' , null, null, null, null, '23:59' , false ],
// With step = 'any' .
[ '17:26' , 'any' , null, null, 1, null, true ],
[ '17:26' , 'ANY' , null, null, 1, null, true ],
[ '17:26' , 'AnY' , null, null, 1, null, true ],
[ '17:26' , 'aNy' , null, null, 1, null, true ],
]},
{ type: 'month' , data: [
// Regular case.
[ '2016-08' , null, null, null, null, '2016-07' , false ],
// Argument testing.
[ '2016-08' , null, null, null, 1, '2016-07' , false ],
[ '2016-08' , null, null, null, 5, '2016-03' , false ],
[ '2016-08' , null, null, null, -1, '2016-09' , false ],
[ '2016-08' , null, null, null, 0, '2016-08' , false ],
// Month/Year wrapping.
[ '2016-01' , null, null, null, 1, '2015-12' , false ],
[ '1969-02' , null, null, null, 4, '1968-10' , false ],
[ '1969-01' , null, null, null, -12, '1970-01' , false ],
// Float values are rounded to integer (1.1 -> 1).
[ '2016-08' , null, null, null, 1.1, '2016-07' , false ],
[ '2016-01' , null, null, null, 1.9, '2015-12' , false ],
// With step values.
[ '2016-03' , '0.5' , null, null, null, '2016-02' , false ],
[ '2016-03' , '2' , null, null, null, '2016-01' , false ],
[ '2016-03' , '0.25' ,null, null, 4, '2015-11' , false ],
[ '2016-12' , '1.1' , '2016-01' , null, 1, '2016-11' , false ],
[ '2016-12' , '1.1' , '2016-01' , null, 2, '2016-10' , false ],
[ '2016-12' , '1.1' , '2016-01' , null, 10, '2016-02' , false ],
[ '2016-12' , '1.1' , '2016-01' , null, 12, '2016-01' , false ],
[ '1968-12' , '1.1' , '1968-01' , null, 8, '1968-04' , false ],
// step = 0 isn't allowed (-> step = 1).
[ '2016-02' , '0' , null, null, null, '2016-01' , false ],
// step < 0 isn't allowed (-> step = 1).
[ '2016-02' , '-1' , null, null, null, '2016-01' , false ],
// step = NaN isn't allowed (-> step = 1).
[ '2016-02' , 'foo' , null, null, null, '2016-01' , false ],
// Min values testing.
[ '2016-03' , '1' , 'foo' , null, 2, '2016-01' , false ],
[ '2016-02' , '1' , '2016-01' , null, null, '2016-01' , false ],
[ '2016-01' , '1' , '2016-01' , null, null, '2016-01' , false ],
[ '2016-01' , '1' , '2016-01' , null, 1, '2016-01' , false ],
[ '2016-05' , '3' , '2016-01' , null, null, '2016-04' , false ],
[ '1969-01' , '5' , '1969-01' , '1969-02' , null, '1969-01' , false ],
// Max values testing.
[ '2016-02' , '1' , null, 'foo' , null, '2016-01' , false ],
[ '2016-02' , null, null, '2016-05' , null, '2016-01' , false ],
[ '2016-03' , null, null, '2016-03' , null, '2016-02' , false ],
[ '2016-07' , null, null, '2016-04' , 4, '2016-03' , false ],
[ '2016-07' , '2' , null, '2016-04' , 3, '2016-01' , false ],
// Step mismatch.
[ '2016-04' , '2' , '2016-01' , null, null, '2016-03' , false ],
[ '2016-06' , '2' , '2016-01' , null, 2, '2016-03' , false ],
[ '2016-05' , '2' , '2016-04' , '2016-08' , null, '2016-04' , false ],
[ '1970-04' , '2' , null, null, null, '1970-02' , false ],
[ '1970-09' , '3' , null, null, null, '1970-06' , false ],
// Clamping.
[ '2016-05' , null, null, '2016-01' , null, '2016-01' , false ],
[ '1970-05' , '2' , '1970-02' , '1970-05' , null, '1970-04' , false ],
[ '1970-01' , '5' , '1970-02' , '1970-09' , 10, '1970-01' , false ],
[ '1970-07' , '5' , '1969-12' , '1970-10' , 2, '1969-12' , false ],
[ '1970-08' , '3' , '1970-01' , '1970-07' , 15, '1970-01' , false ],
[ '1970-10' , '3' , '1970-01' , '1970-06' , 2, '1970-04' , false ],
// value = "" (NaN).
[ '' , null, null, null, null, '1969-12' , false ],
// With step = 'any' .
[ '2016-01' , 'any' , null, null, 1, null, true ],
[ '2016-01' , 'ANY' , null, null, 1, null, true ],
[ '2016-01' , 'AnY' , null, null, 1, null, true ],
[ '2016-01' , 'aNy' , null, null, 1, null, true ],
]},
{ type: 'week' , data: [
// Regular case.
[ '2016-W40' , null, null, null, null, '2016-W39' , false ],
// Argument testing.
[ '2016-W40' , null, null, null, 1, '2016-W39' , false ],
[ '2016-W40' , null, null, null, 5, '2016-W35' , false ],
[ '2016-W40' , null, null, null, -1, '2016-W41' , false ],
[ '2016-W40' , null, null, null, 0, '2016-W40' , false ],
// Week/Year wrapping.
[ '2016-W01' , null, null, null, 1, '2015-W53' , false ],
[ '1969-W02' , null, null, null, 4, '1968-W50' , false ],
[ '1969-W01' , null, null, null, -52, '1970-W01' , false ],
// Float values are rounded to integer (1.1 -> 1).
[ '2016-W40' , null, null, null, 1.1, '2016-W39' , false ],
[ '2016-W01' , null, null, null, 1.9, '2015-W53' , false ],
// With step values.
[ '2016-W03' , '0.5' , null, null, null, '2016-W02' , false ],
[ '2016-W03' , '2' , null, null, null, '2016-W01' , false ],
[ '2016-W03' , '0.25' , null, null, 4, '2015-W52' , false ],
[ '2016-W52' , '1.1' , '2016-W01' , null, 1, '2016-W51' , false ],
[ '2016-W52' , '1.1' , '2016-W01' , null, 2, '2016-W50' , false ],
[ '2016-W52' , '1.1' , '2016-W01' , null, 10, '2016-W42' , false ],
[ '2016-W52' , '1.1' , '2016-W01' , null, 52, '2016-W01' , false ],
[ '1968-W52' , '1.1' , '1968-W01' , null, 8, '1968-W44' , false ],
// step = 0 isn't allowed (-> step = 1).
[ '2016-W02' , '0' , null, null, null, '2016-W01' , false ],
// step < 0 isn't allowed (-> step = 1).
[ '2016-W02' , '-1' , null, null, null, '2016-W01' , false ],
// step = NaN isn't allowed (-> step = 1).
[ '2016-W02' , 'foo' , null, null, null, '2016-W01' , false ],
// Min values testing.
[ '2016-W03' , '1' , 'foo' , null, 2, '2016-W01' , false ],
[ '2016-W02' , '1' , '2016-01' , null, null, '2016-W01' , false ],
[ '2016-W01' , '1' , '2016-W01' , null, null, '2016-W01' , false ],
[ '2016-W01' , '1' , '2016-W01' , null, 1, '2016-W01' , false ],
[ '2016-W05' , '3' , '2016-W01' , null, null, '2016-W04' , false ],
[ '1969-W01' , '5' , '1969-W01' , '1969-W02' , null, '1969-W01' , false ],
// Max values testing.
[ '2016-W02' , '1' , null, 'foo' , null, '2016-W01' , false ],
[ '2016-W02' , null, null, '2016-W05' , null, '2016-W01' , false ],
[ '2016-W03' , null, null, '2016-W03' , null, '2016-W02' , false ],
[ '2016-W07' , null, null, '2016-W04' , 4, '2016-W03' , false ],
[ '2016-W07' , '2' , null, '2016-W04' , 3, '2016-W01' , false ],
// Step mismatch.
[ '2016-W04' , '2' , '2016-W01' , null, null, '2016-W03' , false ],
[ '2016-W06' , '2' , '2016-W01' , null, 2, '2016-W03' , false ],
[ '2016-W05' , '2' , '2016-W04' , '2016-W08' , null, '2016-W04' , false ],
[ '1970-W04' , '2' , null, null, null, '1970-W02' , false ],
[ '1970-W09' , '3' , null, null, null, '1970-W06' , false ],
// Clamping.
[ '2016-W05' , null, null, '2016-W01' , null, '2016-W01' , false ],
[ '1970-W05' , '2' , '1970-W02' , '1970-W05' , null, '1970-W04' , false ],
[ '1970-W01', ' 5', ' 1970-W02', ' 1970-W09', 10, ' 1970-W01', false ],
[ '1970-W07' , '5' , '1969-W52' , '1970-W10' , 2, '1969-W52' , false ],
[ '1970-W08' , '3' , '1970-W01' , '1970-W07' , 15, '1970-W01' , false ],
[ '1970-W10' , '3' , '1970-W01' , '1970-W06' , 2, '1970-W04' , false ],
// value = "" (NaN).
[ '' , null , null , null , null , '1970-W01' , false ],
// With step = 'any'.
[ '2016-W01' , 'any' , null , null , 1, null , true ],
[ '2016-W01' , 'ANY' , null , null , 1, null , true ],
[ '2016-W01' , 'AnY' , null , null , 1, null , true ],
[ '2016-W01' , 'aNy' , null , null , 1, null , true ],
]},
{ type: 'datetime-local' , data: [
// Regular case.
[ '2017-02-07T09:30' , null , null , null , null , '2017-02-07T09:29' , false ],
// Argument testing.
[ '2017-02-07T09:30' , null , null , null , 1, '2017-02-07T09:29' , false ],
[ '2017-02-07T09:30' , null , null , null , 5, '2017-02-07T09:25' , false ],
[ '2017-02-07T09:30' , null , null , null , -1, '2017-02-07T09:31' , false ],
[ '2017-02-07T09:30' , null , null , null , 0, '2017-02-07T09:30' , false ],
// hour/minutes/seconds wrapping.
[ '2000-01-01T05:00' , null , null , null , null , '2000-01-01T04:59' , false ],
[ '2000-01-01T05:00:00' , 1, null , null , null , '2000-01-01T04:59:59' , false ],
[ '2000-01-01T05:00:00' , 0.1, null , null , null , '2000-01-01T04:59:59.900' , false ],
[ '2000-01-01T05:00:00' , 0.01, null , null , null , '2000-01-01T04:59:59.990' , false ],
[ '2000-01-01T05:00:00' , 0.001, null , null , null , '2000-01-01T04:59:59.999' , false ],
// month/year wrapping.
[ '2012-08-01T12:00' , null , null , null , 1440, '2012-07-31T12:00' , false ],
[ '1969-01-02T12:00' , null , null , null , 5760, '1968-12-29T12:00' , false ],
[ '1969-12-31T00:00' , null , null , null , -1440, '1970-01-01T00:00' , false ],
[ '2012-02-29T00:00' , null , null , null , -1440, '2012-03-01T00:00' , false ],
// stepDown() on '00:00' gives '23:59'.
[ '2017-02-07T00:00' , null , null , null , 1, '2017-02-06T23:59' , false ],
[ '2017-02-07T00:00' , null , null , null , 3, '2017-02-06T23:57' , false ],
// Some random step values..
[ '2017-02-07T16:07' , '0.5' , null , null , null , '2017-02-07T16:06:59.500' , false ],
[ '2017-02-07T16:07' , '2' , null , null , null , '2017-02-07T16:06:58' , false ],
[ '2017-02-07T16:07' , '0.25' , null , null , 4, '2017-02-07T16:06:59' , false ],
[ '2017-02-07T16:07' , '1.1' , '2017-02-07T16:00' , null , 1, '2017-02-07T16:06:59.100' , false ],
[ '2017-02-07T16:07' , '1.1' , '2017-02-07T16:00' , null , 2, '2017-02-07T16:06:58' , false ],
[ '2017-02-07T16:07' , '1.1' , '2017-02-07T16:00' , null , 10, '2017-02-07T16:06:49.200' , false ],
[ '2017-02-07T16:07' , '129600' , '2017-02-01T00:00' , null , 2, '2017-02-05T12:00' , false ],
// step = 0 isn't allowed (-> step = 1).
[ '2017-02-07T10:15' , '0' , null , null , null , '2017-02-07T10:14' , false ],
// step < 0 isn't allowed (-> step = 1).
[ '2017-02-07T10:15' , '-1' , null , null , null , '2017-02-07T10:14' , false ],
// step = NaN isn't allowed (-> step = 1).
[ '2017-02-07T10:15' , 'foo' , null , null , null , '2017-02-07T10:14' , false ],
// Min values testing.
[ '2012-02-02T17:02' , '60' , 'foo' , null , 2, '2012-02-02T17:00' , false ],
[ '2012-02-02T17:10' , '60' , '2012-02-02T17:09' , null , null , '2012-02-02T17:09' , false ],
[ '2012-02-02T17:10' , '60' , '2012-02-02T17:10' , null , null , '2012-02-02T17:10' , false ],
[ '2012-02-02T17:10' , '60' , '2012-02-02T17:30' , null , 1, '2012-02-02T17:10' , false ],
[ '2012-02-02T17:10' , '180' , '2012-02-02T17:05' , null , null , '2012-02-02T17:08' , false ],
[ '2012-02-03T20:05' , '86400' , '2012-02-02T17:05' , null , null , '2012-02-03T17:05' , false ],
[ '2012-02-03T18:00' , '129600' , '2012-02-01T00:00' , null , null , '2012-02-02T12:00' , false ],
// Max values testing.
[ '2012-02-02T17:15' , '60' , null , 'foo' , null , '2012-02-02T17:14' , false ],
[ '2012-02-02T17:15' , null , null , '2012-02-02T17:20' , null , '2012-02-02T17:14' , false ],
[ '2012-02-02T17:15' , null , null , '2012-02-02T17:15' , null , '2012-02-02T17:14' , false ],
[ '2012-02-02T17:15' , null , null , '2012-02-02T17:13' , 4, '2012-02-02T17:11' , false ],
[ '2012-02-02T17:15' , '120' , null , '2012-02-02T17:13' , 3, '2012-02-02T17:09' , false ],
[ '2012-02-03T20:05' , '86400' , null , '2012-02-03T20:05' , null , '2012-02-02T20:05' , false ],
[ '2012-02-03T18:00' , '129600' , null , '2012-02-03T20:00' , null , '2012-02-02T06:00' , false ],
// Step mismatch.
[ '2017-02-07T17:19' , '120' , '2017-02-07T17:10' , null , null , '2017-02-07T17:18' , false ],
[ '2017-02-07T17:19' , '120' , '2017-02-07T17:10' , null , 2, '2017-02-07T17:16' , false ],
[ '2017-02-07T17:19' , '120' , '2017-02-07T17:18' , '2017-02-07T17:25' , null , '2017-02-07T17:18' , false ],
[ '2017-02-07T17:19' , '120' , null , null , null , '2017-02-07T17:17' , false ],
[ '2017-02-07T17:19' , '180' , null , null , null , '2017-02-07T17:16' , false ],
[ '2017-02-07T17:19' , '172800' , '2017-02-02T17:19' , '2017-02-10T17:19' , null , '2017-02-06T17:19' , false ],
// Clamping.
[ '2017-02-07T17:22' , null , null , '2017-02-07T17:11' , null , '2017-02-07T17:11' , false ],
[ '2017-02-07T17:22' , '120' , '2017-02-07T17:20' , '2017-02-07T17:22' , null , '2017-02-07T17:20' , false ],
[ '2017-02-07T17:22' , '300' , '2017-02-07T17:12' , '2017-02-07T17:20' , 10, '2017-02-07T17:12' , false ],
[ '2017-02-07T17:22' , '300' , '2017-02-07T17:18' , '2017-02-07T17:20' , 2, '2017-02-07T17:18' , false ],
[ '2017-02-07T17:22' , '600' , '2017-02-02T17:00' , '2017-02-07T17:00' , 15, '2017-02-07T15:00' , false ],
[ '2017-02-07T17:22' , '600' , '2017-02-02T17:00' , '2017-02-07T17:00' , 2, '2017-02-07T17:00' , false ],
// value = "" (NaN).
[ '' , null , null , null , null , '1969-12-31T23:59' , false ],
// With step = 'any'.
[ '2017-02-07T15:20' , 'any' , null , null , 1, null , true ],
[ '2017-02-07T15:20' , 'ANY' , null , null , 1, null , true ],
[ '2017-02-07T15:20' , 'AnY' , null , null , 1, null , true ],
[ '2017-02-07T15:20' , 'aNy' , null , null , 1, null , true ],
]},
];
for (var test of testData) {
for (var data of test.data) {
var element = document.createElement("input" );
element.type = test.type;
if (data[1] != null ) {
element.step = data[1];
}
if (data[2] != null ) {
element.min = data[2];
}
if (data[3] != null ) {
element.max = data[3];
}
// Set 'value' last for type=range, because the final sanitized value
// after setting 'step', 'min' and 'max' can be affected by the order in
// which those attributes are set. Setting 'value' last makes it simpler
// to reason about what the final value should be.
if (data[0] != null ) {
element.setAttribute('value' , data[0]);
}
var exceptionCaught = false ;
try {
if (data[4] != null ) {
element.stepDown(data[4]);
} else {
element.stepDown();
}
is(element.value, data[5], "The value for type=" + test.type + " should be " + data[5]);
} catch (e) {
exceptionCaught = true ;
is(element.value, data[0], e.name + "The value should not have changed" );
is(e.name, 'InvalidStateError' ,
"It should be a InvalidStateError exception." );
} finally {
is(exceptionCaught, data[6], "exception status should be " + data[6]);
}
}
}
}
function checkStepUp()
{
// This testData is very similar to the one in checkStepDown with some changes
// relative to stepUp.
var testData = [
/* Initial value | step | min | max | stepUp arg | final value | exception */
{ type: 'number' , data: [
// Regular case.
[ '1' , null , null , null , null , '2' , false ],
// Argument testing.
[ '1' , null , null , null , 1, '2' , false ],
[ '9' , null , null , null , 9, '18' , false ],
[ '1' , null , null , null , -1, '0' , false ],
[ '1' , null , null , null , 0, '1' , false ],
// Float values are rounded to integer (1.1 -> 1).
[ '1' , null , null , null , 1.1, '2' , false ],
// With step values.
[ '1' , '0.5' , null , null , null , '1.5' , false ],
[ '1' , '0.25' , null , null , 4, '2' , false ],
// step = 0 isn't allowed (-> step = 1).
[ '1' , '0' , null , null , null , '2' , false ],
// step < 0 isn't allowed (-> step = 1).
[ '1' , '-1' , null , null , null , '2' , false ],
// step = NaN isn't allowed (-> step = 1).
[ '1' , 'foo' , null , null , null , '2' , false ],
// Min values testing.
[ '1' , '1' , 'foo' , null , null , '2' , false ],
[ '1' , null , '-10' , null , null , '2' , false ],
[ '1' , null , '0' , null , null , '2' , false ],
[ '1' , null , '10' , null , null , '10' , false ],
[ '1' , null , '2' , null , null , '2' , false ],
[ '1' , null , '1' , null , null , '2' , false ],
[ '0' , null , '4' , null , '5' , '5' , false ],
[ '0' , '2' , '5' , null , '3' , '5' , false ],
// Max values testing.
[ '1' , '1' , null , 'foo' , null , '2' , false ],
[ '1' , null , null , '10' , null , '2' , false ],
[ '1' , null , null , '0' , null , '1' , false ],
[ '1' , null , null , '-10' , null , '1' , false ],
[ '1' , null , null , '1' , null , '1' , false ],
[ '-3' , '5' , '-10' , '-3' , null , '-3' , false ],
// Step mismatch.
[ '1' , '2' , '0' , null , null , '2' , false ],
[ '1' , '2' , '0' , null , '2' , '4' , false ],
[ '8' , '2' , null , '9' , null , '8' , false ],
[ '-3' , '2' , '-6' , null , null , '-2' , false ],
[ '9' , '3' , '-10' , null , null , '11' , false ],
[ '7' , '3' , '-10' , null , null , '8' , false ],
[ '7' , '3' , '5' , null , null , '8' , false ],
[ '9' , '4' , '3' , null , null , '11' , false ],
[ '-2' , '3' , '-6' , null , null , '0' , false ],
[ '7' , '3' , '6' , null , null , '9' , false ],
// Clamping.
[ '1' , '2' , '0' , '3' , null , '2' , false ],
[ '0' , '5' , '1' , '8' , '10' , '6' , false ],
[ '-9' , '3' , '-8' , '-1' , '5' , '-2' , false ],
[ '-9' , '3' , '8' , '15' , '15' , '14' , false ],
[ '-1' , '3' , '-1' , '4' , '3' , '2' , false ],
[ '-3' , '2' , '-6' , '-2' , null , '-2' , false ],
[ '-3' , '2' , '-6' , '-1' , null , '-2' , false ],
// value = "" (NaN).
[ '' , null , null , null , null , '1' , false ],
[ '' , null , null , null , null , '1' , false ],
[ '' , '2' , null , null , null , '2' , false ],
[ '' , '2' , '3' , null , null , '3' , false ],
[ '' , null , '3' , null , null , '3' , false ],
[ '' , '2' , '3' , '8' , null , '3' , false ],
[ '' , null , '-10' , '10' , null , '1' , false ],
[ '' , '3' , '-10' , '10' , null , '2' , false ],
// With step = 'any'.
[ '0' , 'any' , null , null , 1, null , true ],
[ '0' , 'ANY' , null , null , 1, null , true ],
[ '0' , 'AnY' , null , null , 1, null , true ],
[ '0' , 'aNy' , null , null , 1, null , true ],
// With @value = step base.
[ '1' , '2' , null , null , null , '3' , false ],
]},
{ type: 'range' , data: [
// Regular case.
[ '1' , null , null , null , null , '2' , false ],
// Argument testing.
[ '1' , null , null , null , 1, '2' , false ],
[ '9' , null , null , null , 9, '18' , false ],
[ '1' , null , null , null , -1, '0' , false ],
[ '1' , null , null , null , 0, '1' , false ],
// Float values are rounded to integer (1.1 -> 1).
[ '1' , null , null , null , 1.1, '2' , false ],
// With step values.
[ '1' , '0.5' , null , null , null , '1.5' , false ],
[ '1' , '0.25' , null , null , 4, '2' , false ],
// step = 0 isn't allowed (-> step = 1).
[ '1' , '0' , null , null , null , '2' , false ],
// step < 0 isn't allowed (-> step = 1).
[ '1' , '-1' , null , null , null , '2' , false ],
// step = NaN isn't allowed (-> step = 1).
[ '1' , 'foo' , null , null , null , '2' , false ],
// Min values testing.
[ '1' , '1' , 'foo' , null , null , '2' , false ],
[ '1' , null , '-10' , null , null , '2' , false ],
[ '1' , null , '0' , null , null , '2' , false ],
[ '1' , null , '10' , null , null , '11' , false ],
[ '1' , null , '2' , null , null , '3' , false ],
[ '1' , null , '1' , null , null , '2' , false ],
[ '0' , null , '4' , null , '5' , '9' , false ],
[ '0' , '2' , '5' , null , '3' , '11' , false ],
// Max values testing.
[ '1' , '1' , null , 'foo' , null , '2' , false ],
[ '1' , null , null , '10' , null , '2' , false ],
[ '1' , null , null , '0' , null , '0' , false ],
[ '1' , null , null , '-10' , null , '0' , false ],
[ '1' , null , null , '1' , null , '1' , false ],
[ '-3' , '5' , '-10' , '-3' , null , '-5' , false ],
// Step mismatch.
[ '1' , '2' , '0' , null , null , '4' , false ],
[ '1' , '2' , '0' , null , '2' , '6' , false ],
[ '8' , '2' , null , '9' , null , '8' , false ],
[ '-3' , '2' , '-6' , null , null , '0' , false ],
[ '9' , '3' , '-10' , null , null , '11' , false ],
[ '7' , '3' , '-10' , null , null , '11' , false ],
[ '7' , '3' , '5' , null , null , '11' , false ],
[ '9' , '4' , '3' , null , null , '15' , false ],
[ '-2' , '3' , '-6' , null , null , '0' , false ],
[ '7' , '3' , '6' , null , null , '9' , false ],
// Clamping.
[ '1' , '2' , '0' , '3' , null , '2' , false ],
[ '0' , '5' , '1' , '8' , '10' , '6' , false ],
[ '-9' , '3' , '-8' , '-1' , '5' , '-2' , false ],
[ '-9' , '3' , '8' , '15' , '15' , '14' , false ],
[ '-1' , '3' , '-1' , '4' , '3' , '2' , false ],
[ '-3' , '2' , '-6' , '-2' , null , '-2' , false ],
[ '-3' , '2' , '-6' , '-1' , null , '-2' , false ],
// value = "" (default will be 50).
[ '' , null , null , null , null , '51' , false ],
// With step = 'any'.
[ '0' , 'any' , null , null , 1, null , true ],
[ '0' , 'ANY' , null , null , 1, null , true ],
[ '0' , 'AnY' , null , null , 1, null , true ],
[ '0' , 'aNy' , null , null , 1, null , true ],
// With @value = step base.
[ '1' , '2' , null , null , null , '3' , false ],
]},
{ type: 'date' , data: [
// Regular case.
[ '2012-07-09' , null , null , null , null , '2012-07-10' , false ],
// Argument testing.
[ '2012-07-09' , null , null , null , 1, '2012-07-10' , false ],
[ '2012-07-09' , null , null , null , 9, '2012-07-18' , false ],
[ '2012-07-09' , null , null , null , -1, '2012-07-08' , false ],
[ '2012-07-09' , null , null , null , 0, '2012-07-09' , false ],
// Month/Year wrapping.
[ '2012-07-31' , null , null , null , 1, '2012-08-01' , false ],
[ '1968-12-29' , null , null , null , 4, '1969-01-02' , false ],
[ '1970-01-01' , null , null , null , -365, '1969-01-01' , false ],
[ '2012-03-01' , null , null , null , -1, '2012-02-29' , false ],
// Float values are rounded to integer (1.1 -> 1).
[ '2012-01-01' , null , null , null , 1.1, '2012-01-02' , false ],
[ '2012-01-01' , null , null , null , 1.9, '2012-01-02' , false ],
// With step values.
[ '2012-01-01' , '0.5' , null , null , null , '2012-01-02' , false ],
[ '2012-01-01' , '2' , null , null , null , '2012-01-03' , false ],
[ '2012-01-01' , '0.25' , null , null , 4, '2012-01-05' , false ],
[ '2012-01-01' , '1.1' , '2012-01-01' , null , 1, '2012-01-02' , false ],
[ '2012-01-01' , '1.1' , '2012-01-01' , null , 2, '2012-01-03' , false ],
[ '2012-01-01' , '1.1' , '2012-01-01' , null , 10, '2012-01-11' , false ],
[ '2012-01-01' , '1.1' , '2012-01-01' , null , 11, '2012-01-12' , false ],
// step = 0 isn't allowed (-> step = 1).
[ '2012-01-01' , '0' , null , null , null , '2012-01-02' , false ],
// step < 0 isn't allowed (-> step = 1).
[ '2012-01-01' , '-1' , null , null , null , '2012-01-02' , false ],
// step = NaN isn't allowed (-> step = 1).
[ '2012-01-01' , 'foo' , null , null , null , '2012-01-02' , false ],
// Min values testing.
[ '2012-01-01' , '1' , 'foo' , null , null , '2012-01-02' , false ],
[ '2012-01-01' , null , '2011-12-01' , null , null , '2012-01-02' , false ],
[ '2012-01-01' , null , '2012-01-02' , null , null , '2012-01-02' , false ],
[ '2012-01-01' , null , '2012-01-01' , null , null , '2012-01-02' , false ],
[ '2012-01-01' , null , '2012-01-04' , null , 4, '2012-01-05' , false ],
[ '2012-01-01' , '2' , '2012-01-04' , null , 3, '2012-01-06' , false ],
// Max values testing.
[ '2012-01-01' , '1' , null , 'foo' , 2, '2012-01-03' , false ],
[ '2012-01-01' , '1' , null , '2012-01-10' , 1, '2012-01-02' , false ],
[ '2012-01-02' , null , null , '2012-01-01' , null , '2012-01-02' , false ],
[ '2012-01-02' , null , null , '2012-01-02' , null , '2012-01-02' , false ],
[ '1969-01-02' , '5' , '1969-01-01' , '1969-01-02' , null , '1969-01-02' , false ],
// Step mismatch.
[ '2012-01-02' , '2' , '2012-01-01' , null , null , '2012-01-03' , false ],
[ '2012-01-02' , '2' , '2012-01-01' , null , 2, '2012-01-05' , false ],
[ '2012-01-05' , '2' , '2012-01-01' , '2012-01-06' , null , '2012-01-05' , false ],
[ '1970-01-02' , '2' , null , null , null , '1970-01-04' , false ],
[ '1970-01-05' , '3' , null , null , null , '1970-01-08' , false ],
[ '1970-01-03' , '3' , null , null , null , '1970-01-06' , false ],
[ '1970-01-03' , '3' , '1970-01-02' , null , null , '1970-01-05' , false ],
// Clamping.
[ '2012-01-01' , null , '2012-01-31' , null , null , '2012-01-31' , false ],
[ '1970-01-02' , '2' , '1970-01-01' , '1970-01-04' , null , '1970-01-03' , false ],
[ '1970-01-01' , '5' , '1970-01-02' , '1970-01-09' , 10, '1970-01-07' , false ],
[ '1969-12-28' , '5' , '1969-12-29' , '1970-01-06' , 3, '1970-01-03' , false ],
[ '1970-01-01' , '3' , '1970-02-01' , '1970-02-07' , 15, '1970-02-07' , false ],
[ '1970-01-01' , '3' , '1970-01-01' , '1970-01-06' , 2, '1970-01-04' , false ],
// value = "" (NaN).
[ '' , null , null , null , null , '1970-01-02' , false ],
// With step = 'any'.
[ '2012-01-01' , 'any' , null , null , 1, null , true ],
[ '2012-01-01' , 'ANY' , null , null , 1, null , true ],
[ '2012-01-01' , 'AnY' , null , null , 1, null , true ],
[ '2012-01-01' , 'aNy' , null , null , 1, null , true ],
]},
{ type: 'time' , data: [
// Regular case.
[ '16:39' , null , null , null , null , '16:40' , false ],
// Argument testing.
[ '16:40' , null , null , null , 1, '16:41' , false ],
[ '16:40' , null , null , null , 5, '16:45' , false ],
[ '16:40' , null , null , null , -1, '16:39' , false ],
[ '16:40' , null , null , null , 0, '16:40' , false ],
// hour/minutes/seconds wrapping.
[ '04:59' , null , null , null , null , '05:00' , false ],
[ '04:59:59' , 1, null , null , null , '05:00' , false ],
[ '04:59:59.900' , 0.1, null , null , null , '05:00' , false ],
[ '04:59:59.990' , 0.01, null , null , null , '05:00' , false ],
[ '04:59:59.999' , 0.001, null , null , null , '05:00' , false ],
// stepUp() on '23:59' gives '00:00'.
[ '23:59' , null , null , null , 1, '00:00' , false ],
[ '23:59' , null , null , null , 3, '00:02' , false ],
// Some random step values..
[ '16:56' , '0.5' , null , null , null , '16:56:00.500' , false ],
[ '16:56' , '2' , null , null , null , '16:56:02' , false ],
[ '16:56' , '0.25' ,null , null , 4, '16:56:01' , false ],
[ '16:57' , '1.1' , '16:00' , null , 1, '16:57:01' , false ],
[ '16:57' , '1.1' , '16:00' , null , 2, '16:57:02.100' , false ],
[ '16:57' , '1.1' , '16:00' , null , 10, '16:57:10.900' , false ],
[ '16:57' , '1.1' , '16:00' , null , 11, '16:57:12' , false ],
[ '16:57' , '1.1' , '16:00' , null , 8, '16:57:08.700' , false ],
// Invalid @step, means that we use the default value.
[ '17:01' , '0' , null , null , null , '17:02' , false ],
[ '17:01' , '-1' , null , null , null , '17:02' , false ],
[ '17:01' , 'foo' , null , null , null , '17:02' , false ],
// Min values testing.
[ '17:02' , '60' , 'foo' , null , 2, '17:04' , false ],
[ '17:10' , '60' , '17:09' , null , null , '17:11' , false ],
[ '17:10' , '60' , '17:10' , null , null , '17:11' , false ],
[ '17:10' , '60' , '17:30' , null , 1, '17:30' , false ],
[ '17:10' , '180' , '17:05' , null , null , '17:11' , false ],
[ '17:10' , '300' , '17:10' , '17:11' , null ,'17:10' , false ],
// Max values testing.
[ '17:15' , '60' , null , 'foo' , null , '17:16' , false ],
[ '17:15' , null , null , '17:20' , null , '17:16' , false ],
[ '17:15' , null , null , '17:15' , null , '17:15' , false ],
[ '17:15' , null , null , '17:13' , 4, '17:15' , false ],
[ '17:15' , '120' , null , '17:13' , 3, '17:15' , false ],
// Step mismatch.
[ '17:19' , '120' , '17:10' , null , null , '17:20' , false ],
[ '17:19' , '120' , '17:10' , null , 2, '17:22' , false ],
[ '17:19' , '120' , '17:18' , '17:25' , null , '17:20' , false ],
[ '17:19' , '120' , null , null , null , '17:21' , false ],
[ '17:19' , '180' , null , null , null , '17:22' , false ],
// Clamping.
[ '17:22' , null , null , '17:11' , null , '17:22' , false ],
[ '17:22' , '120' , '17:20' , '17:22' , null , '17:22' , false ],
[ '17:22' , '300' , '17:12' , '17:20' , 10, '17:22' , false ],
[ '17:22' , '300' , '17:18' , '17:20' , 2, '17:22' , false ],
[ '17:22' , '180' , '17:00' , '17:20' , 15, '17:22' , false ],
[ '17:22' , '180' , '17:10' , '17:20' , 2, '17:22' , false ],
// value = "" (NaN).
[ '' , null , null , null , null , '00:01' , false ],
// With step = 'any'.
[ '17:26' , 'any' , null , null , 1, null , true ],
[ '17:26' , 'ANY' , null , null , 1, null , true ],
[ '17:26' , 'AnY' , null , null , 1, null , true ],
[ '17:26' , 'aNy' , null , null , 1, null , true ],
]},
{ type: 'month' , data: [
// Regular case.
[ '2016-08' , null , null , null , null , '2016-09' , false ],
// Argument testing.
[ '2016-08' , null , null , null , 1, '2016-09' , false ],
[ '2016-08' , null , null , null , 9, '2017-05' , false ],
[ '2016-08' , null , null , null , -1, '2016-07' , false ],
[ '2016-08' , null , null , null , 0, '2016-08' , false ],
// Month/Year wrapping.
[ '2015-12' , null , null , null , 1, '2016-01' , false ],
[ '1968-12' , null , null , null , 4, '1969-04' , false ],
[ '1970-01' , null , null , null , -12, '1969-01' , false ],
// Float values are rounded to integer (1.1 -> 1).
[ '2016-01' , null , null , null , 1.1, '2016-02' , false ],
[ '2016-01' , null , null , null , 1.9, '2016-02' , false ],
// With step values.
[ '2016-01' , '0.5' , null , null , null , '2016-02' , false ],
[ '2016-01' , '2' , null , null , null , '2016-03' , false ],
[ '2016-01' , '0.25' , null , null , 4, '2016-05' , false ],
[ '2016-01' , '1.1' , '2016-01' , null , 1, '2016-02' , false ],
[ '2016-01' , '1.1' , '2016-01' , null , 2, '2016-03' , false ],
[ '2016-01' , '1.1' , '2016-01' , null , 10, '2016-11' , false ],
[ '2016-01' , '1.1' , '2016-01' , null , 11, '2016-12' , false ],
// step = 0 isn't allowed (-> step = 1).
[ '2016-01' , '0' , null , null , null , '2016-02' , false ],
// step < 0 isn't allowed (-> step = 1).
[ '2016-01' , '-1' , null , null , null , '2016-02' , false ],
// step = NaN isn't allowed (-> step = 1).
[ '2016-01' , 'foo' , null , null , null , '2016-02' , false ],
// Min values testing.
[ '2016-01' , '1' , 'foo' , null , null , '2016-02' , false ],
[ '2016-01' , null , '2015-12' , null , null , '2016-02' , false ],
[ '2016-01' , null , '2016-02' , null , null , '2016-02' , false ],
[ '2016-01' , null , '2016-01' , null , null , '2016-02' , false ],
[ '2016-01' , null , '2016-04' , null , 4, '2016-05' , false ],
[ '2016-01' , '2' , '2016-04' , null , 3, '2016-06' , false ],
// Max values testing.
[ '2016-01' , '1' , null , 'foo' , 2, '2016-03' , false ],
[ '2016-01' , '1' , null , '2016-02' , 1, '2016-02' , false ],
[ '2016-02' , null , null , '2016-01' , null , '2016-02' , false ],
[ '2016-02' , null , null , '2016-02' , null , '2016-02' , false ],
[ '1969-02' , '5' , '1969-01' , '1969-02' , null , '1969-02' , false ],
// Step mismatch.
[ '2016-02' , '2' , '2016-01' , null , null , '2016-03' , false ],
[ '2016-02' , '2' , '2016-01' , null , 2, '2016-05' , false ],
[ '2016-05' , '2' , '2016-01' , '2016-06' , null , '2016-05' , false ],
[ '1970-02' , '2' , null , null , null , '1970-04' , false ],
[ '1970-05' , '3' , null , null , null , '1970-08' , false ],
[ '1970-03' , '3' , null , null , null , '1970-06' , false ],
[ '1970-03' , '3' , '1970-02' , null , null , '1970-05' , false ],
// Clamping.
[ '2016-01' , null , '2016-12' , null , null , '2016-12' , false ],
[ '1970-02' , '2' , '1970-01' , '1970-04' , null , '1970-03' , false ],
[ '1970-01' , '5' , '1970-02' , '1970-09' , 10, '1970-07' , false ],
[ '1969-11' , '5' , '1969-12' , '1970-06' , 3, '1970-05' , false ],
[ '1970-01' , '3' , '1970-02' , '1971-07' , 15, '1971-05' , false ],
[ '1970-01' , '3' , '1970-01' , '1970-06' , 2, '1970-04' , false ],
// value = "" (NaN).
[ '' , null , null , null , null , '1970-02' , false ],
// With step = 'any'.
[ '2016-01' , 'any' , null , null , 1, null , true ],
[ '2016-01' , 'ANY' , null , null , 1, null , true ],
[ '2016-01' , 'AnY' , null , null , 1, null , true ],
[ '2016-01' , 'aNy' , null , null , 1, null , true ],
]},
{ type: 'week' , data: [
// Regular case.
[ '2016-W40' , null , null , null , null , '2016-W41' , false ],
// Argument testing.
[ '2016-W40' , null , null , null , 1, '2016-W41' , false ],
[ '2016-W40' , null , null , null , 20, '2017-W08' , false ],
[ '2016-W40' , null , null , null , -1, '2016-W39' , false ],
[ '2016-W40' , null , null , null , 0, '2016-W40' , false ],
// Week/Year wrapping.
[ '2015-W53' , null , null , null , 1, '2016-W01' , false ],
[ '1968-W52' , null , null , null , 4, '1969-W04' , false ],
[ '1970-W01' , null , null , null , -52, '1969-W01' , false ],
// Float values are rounded to integer (1.1 -> 1).
[ '2016-W01' , null , null , null , 1.1, '2016-W02' , false ],
[ '2016-W01' , null , null , null , 1.9, '2016-W02' , false ],
// With step values.
[ '2016-W01' , '0.5' , null , null , null , '2016-W02' , false ],
[ '2016-W01' , '2' , null , null , null , '2016-W03' , false ],
[ '2016-W01' , '0.25' , null , null , 4, '2016-W05' , false ],
[ '2016-W01' , '1.1' , '2016-01' , null , 1, '2016-W02' , false ],
[ '2016-W01' , '1.1' , '2016-01' , null , 2, '2016-W03' , false ],
[ '2016-W01' , '1.1' , '2016-01' , null , 10, '2016-W11' , false ],
[ '2016-W01' , '1.1' , '2016-01' , null , 20, '2016-W21' , false ],
// step = 0 isn't allowed (-> step = 1).
[ '2016-W01' , '0' , null , null , null , '2016-W02' , false ],
// step < 0 isn't allowed (-> step = 1).
[ '2016-W01' , '-1' , null , null , null , '2016-W02' , false ],
// step = NaN isn't allowed (-> step = 1).
[ '2016-W01' , 'foo' , null , null , null , '2016-W02' , false ],
// Min values testing.
[ '2016-W01' , '1' , 'foo' , null , null , '2016-W02' , false ],
[ '2016-W01' , null , '2015-W53' , null , null , '2016-W02' , false ],
[ '2016-W01' , null , '2016-W02' , null , null , '2016-W02' , false ],
[ '2016-W01' , null , '2016-W01' , null , null , '2016-W02' , false ],
[ '2016-W01' , null , '2016-W04' , null , 4, '2016-W05' , false ],
[ '2016-W01' , '2' , '2016-W04' , null , 3, '2016-W06' , false ],
// Max values testing.
[ '2016-W01' , '1' , null , 'foo' , 2, '2016-W03' , false ],
[ '2016-W01' , '1' , null , '2016-W02' , 1, '2016-W02' , false ],
[ '2016-W02' , null , null , '2016-W01' , null , '2016-W02' , false ],
[ '2016-W02' , null , null , '2016-W02' , null , '2016-W02' , false ],
[ '1969-W02' , '5' , '1969-W01' , '1969-W02' , null , '1969-W02' , false ],
// Step mismatch.
[ '2016-W02' , '2' , '2016-W01' , null , null , '2016-W03' , false ],
[ '2016-W02' , '2' , '2016-W01' , null , 2, '2016-W05' , false ],
[ '2016-W05' , '2' , '2016-W01' , '2016-W06' , null , '2016-W05' , false ],
[ '1970-W02' , '2' , null , null , null , '1970-W04' , false ],
[ '1970-W05' , '3' , null , null , null , '1970-W08' , false ],
[ '1970-W03' , '3' , null , null , null , '1970-W06' , false ],
[ '1970-W03' , '3' , '1970-W02' , null , null , '1970-W05' , false ],
// Clamping.
[ '2016-W01' , null , '2016-W52' , null , null , '2016-W52' , false ],
[ '1970-W02' , '2' , '1970-W01' , '1970-W04' , null , '1970-W03' , false ],
[ '1970-W01' , '5' , '1970-W02' , '1970-W09' , 10, '1970-W07' , false ],
[ '1969-W50' , '5' , '1969-W52' , '1970-W06' , 3, '1970-W05' , false ],
[ '1970-W01' , '3' , '1970-W02' , '1971-W07' , 15, '1970-W44' , false ],
[ '1970-W01' , '3' , '1970-W01' , '1970-W06' , 2, '1970-W04' , false ],
// value = "" (NaN).
[ '' , null , null , null , null , '1970-W02' , false ],
// With step = 'any'.
[ '2016-W01' , 'any' , null , null , 1, null , true ],
[ '2016-W01' , 'ANY' , null , null , 1, null , true ],
[ '2016-W01' , 'AnY' , null , null , 1, null , true ],
[ '2016-W01' , 'aNy' , null , null , 1, null , true ],
]},
{ type: 'datetime-local' , data: [
// Regular case.
[ '2017-02-07T17:09' , null , null , null , null , '2017-02-07T17:10' , false ],
// Argument testing.
[ '2017-02-07T17:10' , null , null , null , 1, '2017-02-07T17:11' , false ],
[ '2017-02-07T17:10' , null , null , null , 5, '2017-02-07T17:15' , false ],
[ '2017-02-07T17:10' , null , null , null , -1, '2017-02-07T17:09' , false ],
[ '2017-02-07T17:10' , null , null , null , 0, '2017-02-07T17:10' , false ],
// hour/minutes/seconds wrapping.
[ '2000-01-01T04:59' , null , null , null , null , '2000-01-01T05:00' , false ],
[ '2000-01-01T04:59:59' , 1, null , null , null , '2000-01-01T05:00' , false ],
[ '2000-01-01T04:59:59.900' , 0.1, null , null , null , '2000-01-01T05:00' , false ],
[ '2000-01-01T04:59:59.990' , 0.01, null , null , null , '2000-01-01T05:00' , false ],
[ '2000-01-01T04:59:59.999' , 0.001, null , null , null , '2000-01-01T05:00' , false ],
// month/year wrapping.
[ '2012-07-31T12:00' , null , null , null , 1440, '2012-08-01T12:00' , false ],
[ '1968-12-29T12:00' , null , null , null , 5760, '1969-01-02T12:00' , false ],
[ '1970-01-01T00:00' , null , null , null , -1440, '1969-12-31T00:00' , false ],
[ '2012-03-01T00:00' , null , null , null , -1440, '2012-02-29T00:00' , false ],
// stepUp() on '23:59' gives '00:00'.
[ '2017-02-07T23:59' , null , null , null , 1, '2017-02-08T00:00' , false ],
[ '2017-02-07T23:59' , null , null , null , 3, '2017-02-08T00:02' , false ],
// Some random step values..
[ '2017-02-07T17:40' , '0.5' , null , null , null , '2017-02-07T17:40:00.500' , false ],
[ '2017-02-07T17:40' , '2' , null , null , null , '2017-02-07T17:40:02' , false ],
[ '2017-02-07T17:40' , '0.25' , null , null , 4, '2017-02-07T17:40:01' , false ],
[ '2017-02-07T17:40' , '1.1' , '2017-02-07T17:00' , null , 1, '2017-02-07T17:40:00.200' , false ],
[ '2017-02-07T17:40' , '1.1' , '2017-02-07T17:00' , null , 2, '2017-02-07T17:40:01.300' , false ],
[ '2017-02-07T17:40' , '1.1' , '2017-02-07T17:00' , null , 10, '2017-02-07T17:40:10.100' , false ],
[ '2017-02-07T17:40' , '129600' , '2017-02-01T00:00' , null , 2, '2017-02-10T00:00' , false ],
// step = 0 isn't allowed (-> step = 1).
[ '2017-02-07T17:39' , '0' , null , null , null , '2017-02-07T17:40' , false ],
// step < 0 isn't allowed (-> step = 1).
[ '2017-02-07T17:39' , '-1' , null , null , null , '2017-02-07T17:40' , false ],
// step = NaN isn't allowed (-> step = 1).
[ '2017-02-07T17:39' , 'foo' , null , null , null , '2017-02-07T17:40' , false ],
// Min values testing.
[ '2012-02-02T17:00' , '60' , 'foo' , null , 2, '2012-02-02T17:02' , false ],
[ '2012-02-02T17:10' , '60' , '2012-02-02T17:10' , null , null , '2012-02-02T17:11' , false ],
[ '2012-02-02T17:10' , '60' , '2012-02-02T17:30' , null , 1, '2012-02-02T17:30' , false ],
[ '2012-02-02T17:10' , '180' , '2012-02-02T17:05' , null , null , '2012-02-02T17:11' , false ],
[ '2012-02-02T17:10' , '86400' , '2012-02-02T17:05' , null , null , '2012-02-03T17:05' , false ],
[ '2012-02-02T17:10' , '129600' , '2012-02-01T00:00' , null , null , '2012-02-04T00:00' , false ],
// Max values testing.
[ '2012-02-02T17:15' , '60' , null , 'foo' , null , '2012-02-02T17:16' , false ],
[ '2012-02-02T17:15' , null , null , '2012-02-02T17:20' , null , '2012-02-02T17:16' , false ],
[ '2012-02-02T17:15' , null , null , '2012-02-02T17:15' , null , '2012-02-02T17:15' , false ],
[ '2012-02-02T17:15' , null , null , '2012-02-02T17:13' , 4, '2012-02-02T17:15' , false ],
[ '2012-02-02T20:05' , '86400' , null , '2012-02-03T20:05' , null , '2012-02-03T20:05' , false ],
[ '2012-02-02T18:00' , '129600' , null , '2012-02-04T20:00' , null , '2012-02-04T06:00' , false ],
// Step mismatch.
[ '2017-02-07T17:19' , '120' , '2017-02-07T17:10' , null , null , '2017-02-07T17:20' , false ],
[ '2017-02-07T17:19' , '120' , '2017-02-07T17:10' , null , 2, '2017-02-07T17:22' , false ],
[ '2017-02-07T17:19' , '120' , '2017-02-07T17:18' , '2017-02-07T17:25' , null , '2017-02-07T17:20' , false ],
[ '2017-02-07T17:19' , '120' , null , null , null , '2017-02-07T17:21' , false ],
[ '2017-02-07T17:19' , '180' , null , null , null , '2017-02-07T17:22' , false ],
[ '2017-02-03T17:19' , '172800' , '2017-02-02T17:19' , '2017-02-10T17:19' , null , '2017-02-04T17:19' , false ],
// Clamping.
[ '2017-02-07T17:22' , null , null , '2017-02-07T17:11' , null , '2017-02-07T17:22' , false ],
[ '2017-02-07T17:22' , '120' , '2017-02-07T17:20' , '2017-02-07T17:22' , null , '2017-02-07T17:22' , false ],
[ '2017-02-07T17:22' , '300' , '2017-02-07T17:12' , '2017-02-07T17:20' , 10, '2017-02-07T17:22' , false ],
[ '2017-02-07T17:22' , '300' , '2017-02-07T17:18' , '2017-02-07T17:20' , 2, '2017-02-07T17:22' , false ],
[ '2017-02-06T17:22' , '600' , '2017-02-02T17:00' , '2017-02-07T17:20' , 15, '2017-02-06T19:50' , false ],
[ '2017-02-06T17:22' , '600' , '2017-02-02T17:10' , '2017-02-07T17:20' , 2, '2017-02-06T17:40' , false ],
// value = "" (NaN).
[ '' , null , null , null , null , '1970-01-01T00:01' , false ],
// With step = 'any'.
[ '2017-02-07T17:30' , 'any' , null , null , 1, null , true ],
[ '2017-02-07T17:30' , 'ANY' , null , null , 1, null , true ],
[ '2017-02-07T17:30' , 'AnY' , null , null , 1, null , true ],
[ '2017-02-07T17:30' , 'aNy' , null , null , 1, null , true ],
]},
];
for (var test of testData) {
for (var data of test.data) {
var element = document.createElement("input" );
element.type = test.type;
if (data[1] != null ) {
element.step = data[1];
}
if (data[2] != null ) {
element.min = data[2];
}
if (data[3] != null ) {
element.max = data[3];
}
// Set 'value' last for type=range, because the final sanitized value
// after setting 'step', 'min' and 'max' can be affected by the order in
// which those attributes are set. Setting 'value' last makes it simpler
// to reason about what the final value should be.
if (data[0] != null ) {
element.setAttribute('value' , data[0]);
}
var exceptionCaught = false ;
try {
if (data[4] != null ) {
element.stepUp(data[4]);
} else {
element.stepUp();
}
is(element.value, data[5], "The value for type=" + test.type + " should be " + data[5]);
} catch (e) {
exceptionCaught = true ;
is(element.value, data[0], e.name + "The value should not have changed" );
is(e.name, 'InvalidStateError' ,
"It should be a InvalidStateError exception." );
} finally {
is(exceptionCaught, data[6], "exception status should be " + data[6]);
}
}
}
}
checkPresence();
checkAvailability();
checkStepDown();
checkStepUp();
</script>
</pre>
</body>
</html>
Messung V0.5 C=92 H=100 G=95
¤ Dauer der Verarbeitung: 0.56 Sekunden
¤
*© Formatika GbR, Deutschland