1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/hal/tests/browser_alarms.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,187 @@ 1.4 +XPCOMUtils.defineLazyModuleGetter(this, "AlarmService", 1.5 + "resource://gre/modules/AlarmService.jsm"); 1.6 + 1.7 +/* 1.8 + * Tests for Bug 867868 and related Alarm API bugs. 1.9 + * 1.10 + * NOTE: These tests pass the alarm time to AlarmService as a number and not as 1.11 + * a date. See bug 810973 about Date truncating milliseconds. AlarmService does 1.12 + * not officially allow a integer, but nor does it disallow it. Of course this 1.13 + * test will break if AlarmService adds a type check, hence this note. 1.14 + * FIXME: when bug 810973 is fixed. 1.15 + */ 1.16 + 1.17 +function add_alarm_future(cb) { 1.18 + let alarmId = undefined; 1.19 + AlarmService.add({ 1.20 + date: new Date(Date.now() + 143), 1.21 + ignoreTimezone: true 1.22 + }, 1.23 + function onAlarmFired(aAlarm) { 1.24 + ok(alarmId === aAlarm.id, "Future alarm fired successfully."); 1.25 + cb(); 1.26 + }, 1.27 + function onSuccess(aAlarmId) { 1.28 + alarmId = aAlarmId; 1.29 + }, 1.30 + function onError(error) { 1.31 + ok(false, "Unexpected error adding future alarm " + error); 1.32 + cb(); 1.33 + }); 1.34 +} 1.35 + 1.36 +function add_alarm_present(cb) { 1.37 + let self = this; 1.38 + let alarmId = undefined; 1.39 + AlarmService.add({ 1.40 + date: new Date(), 1.41 + ignoreTimezone: true 1.42 + }, 1.43 + function onAlarmFired(aAlarm) { 1.44 + ok(alarmId === aAlarm.id, "Present alarm fired successfully."); 1.45 + cb(); 1.46 + }, 1.47 + function onSuccess(aAlarmId) { 1.48 + alarmId = aAlarmId; 1.49 + }, function onError(error) { 1.50 + ok(false, "Unexpected error adding alarm for current time " + error); 1.51 + cb(); 1.52 + }); 1.53 +} 1.54 + 1.55 +function add_alarm_past(cb) { 1.56 + let self = this; 1.57 + let alarmId = undefined; 1.58 + AlarmService.add({ 1.59 + date: new Date(Date.now() - 5), 1.60 + ignoreTimezone: true 1.61 + }, 1.62 + function onAlarmFired(aAlarm) { 1.63 + ok(alarmId === aAlarm.id, "Past alarm fired successfully."); 1.64 + cb(); 1.65 + }, 1.66 + function onSuccess(aAlarmId) { 1.67 + alarmId = aAlarmId; 1.68 + }, 1.69 + function onError(error) { 1.70 + ok(false, "Unexpected error adding alarm for time in the past " + error); 1.71 + cb(); 1.72 + }); 1.73 +} 1.74 + 1.75 +function trigger_all_alarms(cb) { 1.76 + let n = 10; 1.77 + let counter = 0; 1.78 + let date = new Date(Date.now() + 57); 1.79 + function onAlarmFired() { 1.80 + counter++; 1.81 + info("trigger_all_alarms count " + counter); 1.82 + if (counter == n) { 1.83 + ok(true, "All " + n + " alarms set to a particular time fired."); 1.84 + cb(); 1.85 + } 1.86 + } 1.87 + 1.88 + for (let i = 0; i < n; i++) { 1.89 + AlarmService.add( 1.90 + { 1.91 + date: date, 1.92 + ignoreTimezone: true 1.93 + }, 1.94 + onAlarmFired 1.95 + ); 1.96 + } 1.97 +} 1.98 + 1.99 +function multiple_handlers(cb) { 1.100 + let d = new Date(Date.now() + 100); 1.101 + let called = 0; 1.102 + 1.103 + function done() { 1.104 + if (called == 2) { 1.105 + ok(true, "Two alarms for the same time fired."); 1.106 + cb(); 1.107 + } 1.108 + } 1.109 + 1.110 + function handler1() { 1.111 + called++; 1.112 + done(); 1.113 + } 1.114 + 1.115 + function handler2() { 1.116 + called++; 1.117 + done(); 1.118 + } 1.119 + 1.120 + AlarmService.add( 1.121 + { 1.122 + date: d, 1.123 + ignoreTimezone: true 1.124 + }, 1.125 + handler1 1.126 + ); 1.127 + AlarmService.add( 1.128 + { 1.129 + date: d, 1.130 + ignoreTimezone: true 1.131 + }, 1.132 + handler2 1.133 + ); 1.134 +} 1.135 + 1.136 +function same_time_alarms(cb) { 1.137 + var fired = 0; 1.138 + var delay = new Date(Date.now() + 100); 1.139 + 1.140 + function check() { 1.141 + fired++; 1.142 + if (fired == 4) { 1.143 + ok(true, "All alarms set for the same time fired."); 1.144 + cb(); 1.145 + } 1.146 + } 1.147 + 1.148 + function addImmediateAlarm() { 1.149 + fired++; 1.150 + AlarmService.add({ 1.151 + date: delay, 1.152 + ignoreTimezone: true 1.153 + }, check); 1.154 + } 1.155 + 1.156 + AlarmService.add({ 1.157 + date: delay, 1.158 + ignoreTimezone: true 1.159 + }, addImmediateAlarm); 1.160 + 1.161 + AlarmService.add({ 1.162 + date: delay, 1.163 + ignoreTimezone: true 1.164 + }, addImmediateAlarm); 1.165 +} 1.166 + 1.167 +function test() { 1.168 + var tests = [ 1.169 + add_alarm_future, 1.170 + add_alarm_present, 1.171 + add_alarm_past, 1.172 + trigger_all_alarms, 1.173 + multiple_handlers, 1.174 + same_time_alarms 1.175 + ] 1.176 + 1.177 + var testIndex = -1; 1.178 + function nextTest() { 1.179 + testIndex++; 1.180 + if (testIndex >= tests.length) 1.181 + return; 1.182 + 1.183 + waitForExplicitFinish(); 1.184 + tests[testIndex](function() { 1.185 + finish(); 1.186 + nextTest(); 1.187 + }); 1.188 + } 1.189 + nextTest(); 1.190 +}