input-valueasnumber.html (4548B)
1 <!DOCTYPE HTML> 2 <meta charset="utf-8"> 3 <html> 4 <head> 5 <title>HTMLInputElement valueAsNumber</title> 6 <link rel="author" title="pmdartus" href="mailto:dartus.pierremarie@gmail.com"> 7 <link rel=help href="https://html.spec.whatwg.org/#dom-input-valueasnumber"> 8 9 <script src="/resources/testharness.js"></script> 10 <script src="/resources/testharnessreport.js"></script> 11 </head> 12 <body> 13 <h3>input_valueAsNumber</h3> 14 <hr> 15 <div id="log"></div> 16 17 <input id="input_date" type="date" /> 18 <input id="input_month" type="month" /> 19 <input id="input_week" type="week" /> 20 <input id="input_time" type="time" /> 21 <input id="input_datetime-local" type="datetime-local" /> 22 <input id="input_number" type="number" /> 23 <input id="input_range" type="range" min="0" max="100" /> 24 25 <script> 26 "use strict"; 27 28 function testValueAsNumberGetter(type, element, cases) { 29 for (const [value, expectedValueAsNumber] of cases) { 30 test( 31 () => { 32 element.value = value; 33 assert_equals(element.valueAsNumber, expectedValueAsNumber); 34 }, 35 `valueAsNumber getter on type ${type} (actual value: ${value}, ` + 36 `expected valueAsNumber: ${expectedValueAsNumber})` 37 ); 38 } 39 } 40 41 function testValueAsNumberSetter(type, element, cases) { 42 for (const [valueAsNumber, expectedValue] of cases) { 43 test( 44 () => { 45 element.valueAsNumber = valueAsNumber; 46 assert_equals(element.value, expectedValue); 47 }, 48 `valueAsNumber setter on type ${type} (actual valueAsNumber: ${valueAsNumber}, ` + 49 `expected value: ${expectedValue})` 50 ); 51 } 52 } 53 54 const dateInput = document.getElementById("input_date"); 55 testValueAsNumberGetter("date", dateInput, [ 56 ["", NaN], 57 ["0000-12-10", NaN], 58 ["2019-00-12", NaN], 59 ["2019-12-00", NaN], 60 ["2019-13-10", NaN], 61 ["2019-02-29", NaN], 62 ["2019-12-10", 1575936000000], 63 ["2016-02-29", 1456704000000] // Leap year 64 ]); 65 testValueAsNumberSetter("date", dateInput, [ 66 [0, "1970-01-01"], 67 [1575936000000, "2019-12-10"], 68 [1456704000000, "2016-02-29"] // Leap year 69 ]); 70 71 const monthInput = document.getElementById("input_month"); 72 testValueAsNumberGetter("month", monthInput, [ 73 ["", NaN], 74 ["0000-12", NaN], 75 ["2019-00", NaN], 76 ["2019-12", 599], 77 ["1969-12", -1], 78 ]); 79 testValueAsNumberSetter("month", monthInput, [ 80 [599, "2019-12"], 81 [-1, "1969-12"], 82 ]); 83 84 const weekInput = document.getElementById("input_week"); 85 testValueAsNumberGetter("week", weekInput, [ 86 ["", NaN], 87 ["0000-W50", NaN], 88 ["2019-W00", NaN], 89 ["2019-W60", NaN], 90 ["2019-W50", 1575849600000], 91 ["1969-W20", -20217600000], 92 ]); 93 testValueAsNumberSetter("week", weekInput, [ 94 [0, "1970-W01"], 95 [1575849600000, "2019-W50"], 96 [-20217600000, "1969-W20"], 97 ]); 98 99 const timeInput = document.getElementById("input_time"); 100 testValueAsNumberGetter("time", timeInput, [ 101 ["", NaN], 102 ["24:00", NaN], 103 ["00:60", NaN], 104 ["00:00", 0], 105 ["12:00", 12 * 3600 * 1000], 106 ["23:59", ((23 * 3600) + (59 * 60)) * 1000] 107 ]); 108 testValueAsNumberSetter("time", timeInput, [ 109 [0, "00:00"], 110 [12 * 3600 * 1000, "12:00"], 111 [((23 * 3600) + (59 * 60)) * 1000, "23:59"] 112 ]); 113 114 const dateTimeLocalInput = document.getElementById("input_datetime-local"); 115 testValueAsNumberGetter("datetime-local", dateTimeLocalInput, [ 116 ["", NaN], 117 ["2019-12-10T00:00", 1575936000000], 118 ["2019-12-10T12:00", 1575979200000] 119 ]); 120 testValueAsNumberSetter("datetime-local", dateTimeLocalInput, [ 121 [1575936000000, "2019-12-10T00:00"], 122 [1575979200000, "2019-12-10T12:00"] 123 ]); 124 125 const numberInput = document.getElementById("input_number"); 126 testValueAsNumberGetter("number", numberInput, [ 127 ["", NaN], 128 ["123", 123], 129 ["123.456", 123.456], 130 ["1e3", 1000], 131 ["1e", NaN], 132 ["-123", -123] 133 ]); 134 testValueAsNumberSetter("number", numberInput, [ 135 [123, "123"], 136 [123.456, "123.456"], 137 [1e3, "1000"], 138 [-123, "-123"] 139 ]); 140 141 const rangeInput = document.getElementById("input_range"); 142 testValueAsNumberGetter("range", rangeInput, [ 143 ["", 50], 144 ["0", 0], 145 ["50", 50], 146 ["100", 100], 147 ["-10", 0], // Realign to the min 148 ["110", 100] // Realign to the max 149 ]); 150 testValueAsNumberSetter("range", rangeInput, [ 151 [0, "0"], 152 [50, "50"], 153 [100, "100"] 154 ]); 155 </script> 156 </body> 157 </html>