tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>