toolkit/content/tests/chrome/test_timepicker.xul

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/toolkit/content/tests/chrome/test_timepicker.xul	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,206 @@
     1.4 +<?xml version="1.0"?>
     1.5 +<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
     1.6 +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
     1.7 +<!--
     1.8 +  XUL Widget Test for timepicker
     1.9 +  -->
    1.10 +<window title="timepicker" width="500" height="600"
    1.11 +        onload="setTimeout(testtag_timepicker, 0);"
    1.12 +        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
    1.13 +  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>  
    1.14 +  <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>  
    1.15 +
    1.16 +<timepicker id="timepicker"/>
    1.17 +
    1.18 +<body xmlns="http://www.w3.org/1999/xhtml">
    1.19 +<p id="display"></p>
    1.20 +<div id="content" style="display: none">
    1.21 +</div>
    1.22 +<pre id="test">
    1.23 +</pre>
    1.24 +</body>
    1.25 +
    1.26 +<script>
    1.27 +<![CDATA[
    1.28 +
    1.29 +SimpleTest.waitForExplicitFinish();
    1.30 +
    1.31 +function testtag_timepicker()
    1.32 +{
    1.33 +  var tp = document.getElementById("timepicker");
    1.34 +  
    1.35 +  var testid = "timepicker ";
    1.36 +
    1.37 +  var today = new Date();
    1.38 +  var thour = today.getHours();
    1.39 +  var tminute = today.getMinutes();
    1.40 +  var tsecond = today.getSeconds();
    1.41 +
    1.42 +  // testtag_comparetime(tp, testid + "initial", thour, tminute, tsecond);
    1.43 +
    1.44 +  // check that setting the value property works
    1.45 +  tp.value = testtag_gettimestring(thour, tminute, tsecond);
    1.46 +  testtag_comparetime(tp, testid + "set value", thour, tminute, tsecond);
    1.47 +
    1.48 +  var numberOrder = /^(\D*)\s*(\d+)(\D*)(\d+)(\D*)(\d+)\s*(\D*)$/;
    1.49 +  var fdt = new Date(2000,0,1,16,7,9).toLocaleFormat("%X");
    1.50 +  is(tp.is24HourClock, Number(fdt.match(numberOrder)[2]) > 12, "is24HourClock");
    1.51 +
    1.52 +  // check that setting the dateValue property works
    1.53 +  tp.dateValue = today;
    1.54 +  testtag_comparetime(tp, testid + "set dateValue", thour, tminute, tsecond);
    1.55 +  ok(tp.value !== today, testid + " set dateValue different time");
    1.56 +
    1.57 +  ok(!tp.readOnly, testid + "readOnly");
    1.58 +  tp.readOnly = true;
    1.59 +  ok(tp.readOnly, testid + "set readOnly");
    1.60 +  tp.readOnly = false;
    1.61 +  ok(!tp.readOnly, testid + "clear readOnly");
    1.62 +
    1.63 +  function setTimeField(field, value, expectException,
    1.64 +                        expectedHour, expectedMinute, expectedSecond)
    1.65 +  {
    1.66 +    var exh = false;
    1.67 +    try {
    1.68 +      tp[field] = value;
    1.69 +    } catch (ex) { exh = true; }
    1.70 +    is(exh, expectException, testid + "set " + field + " " + value);
    1.71 +    testtag_comparetime(tp, testid + "set " + field + " " + value,
    1.72 +                        expectedHour, expectedMinute, expectedSecond);
    1.73 +  }
    1.74 +
    1.75 +  // check the value property
    1.76 +  setTimeField("value", "0:0:0", false, 0, 0, 0);
    1.77 +  setTimeField("value", "21:1:40", false, 21, 1, 40);
    1.78 +  setTimeField("value", "7:11:8", false, 7, 11, 8);
    1.79 +  setTimeField("value", "04:07:02", false, 4, 7, 2);
    1.80 +  setTimeField("value", "10:42:20", false, 10, 42, 20);
    1.81 +
    1.82 +  // check that the hour, minute and second fields can be set properly
    1.83 +  setTimeField("hour", 7, false, 7, 42, 20);
    1.84 +  setTimeField("hour", 0, false, 0, 42, 20);
    1.85 +  setTimeField("hour", 21, false, 21, 42, 20);
    1.86 +  setTimeField("hour", -1, true, 21, 42, 20);
    1.87 +  setTimeField("hour", 24, true, 21, 42, 20);
    1.88 +
    1.89 +  setTimeField("minute", 0, false, 21, 0, 20);
    1.90 +  setTimeField("minute", 9, false, 21, 9, 20);
    1.91 +  setTimeField("minute", 10, false, 21, 10, 20);
    1.92 +  setTimeField("minute", 35, false, 21, 35, 20);
    1.93 +  setTimeField("minute", -1, true, 21, 35, 20);
    1.94 +  setTimeField("minute", 60, true, 21, 35, 20);
    1.95 +
    1.96 +  setTimeField("second", 0, false, 21, 35, 0);
    1.97 +  setTimeField("second", 9, false, 21, 35, 9);
    1.98 +  setTimeField("second", 10, false, 21, 35, 10);
    1.99 +  setTimeField("second", 51, false, 21, 35, 51);
   1.100 +  setTimeField("second", -1, true, 21, 35, 51);
   1.101 +  setTimeField("second", 60, true, 21, 35, 51);
   1.102 +
   1.103 +  // check when seconds is not specified
   1.104 +  setTimeField("value", "06:05", false, 6, 5, 0);
   1.105 +  setTimeField("value", "06:15", false, 6, 15, 0);
   1.106 +  setTimeField("value", "16:15", false, 16, 15, 0);
   1.107 +
   1.108 +  // check that times overflow properly
   1.109 +  setTimeField("value", "5:65:21", false, 6, 5, 21);
   1.110 +  setTimeField("value", "5:25:72", false, 5, 26, 12);
   1.111 +
   1.112 +  // check invalid values for the value and dateValue properties
   1.113 +  tp.value = "14:25:48";
   1.114 +  setTimeField("value", "", true, 14, 25, 48);
   1.115 +  setTimeField("value", "1:5:6:6", true, 14, 25, 48);
   1.116 +  setTimeField("value", "2:a:19", true, 14, 25, 48);
   1.117 +  setTimeField("dateValue", "none", true, 14, 25, 48);
   1.118 +
   1.119 +  // check the fields
   1.120 +  ok(tp.hourField instanceof HTMLInputElement, testid + "hourField");
   1.121 +  ok(tp.minuteField instanceof HTMLInputElement, testid + "minuteField");
   1.122 +  ok(tp.secondField instanceof HTMLInputElement, testid + "secondField");
   1.123 +
   1.124 +  testtag_timepicker_UI(tp, testid);
   1.125 +
   1.126 +  tp.readOnly = true;
   1.127 +
   1.128 +  // check that keyboard usage doesn't change the value when the timepicker
   1.129 +  // is read only
   1.130 +  testtag_timepicker_UI_key(tp, testid + "readonly ", "14:25:48",
   1.131 +                            tp.hourField, 14, 25, 48, 14, 25, 48);
   1.132 +  testtag_timepicker_UI_key(tp, testid + "readonly ", "14:25:48",
   1.133 +                            tp.minuteField, 14, 25, 48, 14, 25, 48);
   1.134 +  testtag_timepicker_UI_key(tp, testid + "readonly ", "14:25:48",
   1.135 +                            tp.secondField, 14, 25, 48, 14, 25, 48);
   1.136 +
   1.137 +  SimpleTest.finish();
   1.138 +}
   1.139 +
   1.140 +function testtag_timepicker_UI(tp, testid)
   1.141 +{
   1.142 +  testid += "UI";
   1.143 +
   1.144 +  // test adjusting the time with the up and down keys
   1.145 +  testtag_timepicker_UI_key(tp, testid, "0:12:25", tp.hourField, 1, 12, 25, 0, 12, 25);
   1.146 +  testtag_timepicker_UI_key(tp, testid, "11:12:25", tp.hourField, 12, 12, 25, 11, 12, 25);
   1.147 +  testtag_timepicker_UI_key(tp, testid, "7:12:25", tp.hourField, 8, 12, 25, 7, 12, 25);
   1.148 +  testtag_timepicker_UI_key(tp, testid, "16:12:25", tp.hourField, 17, 12, 25, 16, 12, 25);
   1.149 +  testtag_timepicker_UI_key(tp, testid, "23:12:25", tp.hourField, 0, 12, 25, 23, 12, 25);
   1.150 +
   1.151 +  testtag_timepicker_UI_key(tp, testid, "15:23:46", tp.minuteField, 15, 24, 46, 15, 23, 46);
   1.152 +  testtag_timepicker_UI_key(tp, testid, "15:0:46", tp.minuteField, 15, 1, 46, 15, 0, 46);
   1.153 +  testtag_timepicker_UI_key(tp, testid, "15:59:46", tp.minuteField, 15, 0, 46, 15, 59, 46);
   1.154 +
   1.155 +  testtag_timepicker_UI_key(tp, testid, "11:50:46", tp.secondField, 11, 50, 47, 11, 50, 46);
   1.156 +  testtag_timepicker_UI_key(tp, testid, "11:50:0", tp.secondField, 11, 50, 1, 11, 50, 0);
   1.157 +  testtag_timepicker_UI_key(tp, testid, "11:50:59", tp.secondField, 11, 50, 0, 11, 50, 59);
   1.158 +}
   1.159 +
   1.160 +function testtag_timepicker_UI_key(tp, testid, value, field,
   1.161 +                                   uhour, uminute, usecond,
   1.162 +                                   dhour, dminute, dsecond)
   1.163 +{
   1.164 +  tp.value = value;
   1.165 +  field.focus();
   1.166 +
   1.167 +  var eventTarget = tp.readOnly ? null : tp;
   1.168 +
   1.169 +  var testname = testid + " " + value + " key up";
   1.170 +  synthesizeKeyExpectEvent("VK_UP", { }, eventTarget, "change", testname);
   1.171 +  testtag_comparetime(tp, testname, uhour, uminute, usecond);
   1.172 +
   1.173 +  testname = testid + " " + value + " key down";
   1.174 +  synthesizeKeyExpectEvent("VK_DOWN", { }, eventTarget, "change", testname);
   1.175 +  testtag_comparetime(tp, testname, dhour, dminute, dsecond);
   1.176 +}
   1.177 +
   1.178 +function testtag_gettimestring(hour, minute, second)
   1.179 +{
   1.180 +  if (minute < 10)
   1.181 +    minute = "0" + minute;
   1.182 +  if (second < 10)
   1.183 +    second = "0" + second;
   1.184 +  return hour + ":" + minute + ":" + second;
   1.185 +}
   1.186 +
   1.187 +function testtag_comparetime(tp, testid, hour, minute, second)
   1.188 +{
   1.189 +  is(tp.value, testtag_gettimestring(hour, minute, second), testid + " value");
   1.190 +  is(tp.getAttribute("value"),
   1.191 +                testtag_gettimestring(hour, minute, second),
   1.192 +                testid + " value attribute");
   1.193 +
   1.194 +  var dateValue = tp.dateValue;
   1.195 +  ok(dateValue.getHours() == hour &&
   1.196 +                dateValue.getMinutes() == minute &&
   1.197 +                dateValue.getSeconds() == second,
   1.198 +                testid + " dateValue");
   1.199 +
   1.200 +  is(tp.hour, hour, testid + " hour");
   1.201 +  is(tp.minute, minute, testid + " minute");
   1.202 +  is(tp.second, second, testid + " second");
   1.203 +}
   1.204 +
   1.205 +]]>
   1.206 +
   1.207 +</script>
   1.208 +
   1.209 +</window>

mercurial