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>