mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-26 18:31:29 +00:00
a327e90d00
--HG-- extra : rebase_source : c319da81514194bd5adef260f78e9317b1a044a8
188 lines
3.7 KiB
JavaScript
188 lines
3.7 KiB
JavaScript
XPCOMUtils.defineLazyModuleGetter(this, "AlarmService",
|
|
"resource://gre/modules/AlarmService.jsm");
|
|
|
|
/*
|
|
* Tests for Bug 867868 and related Alarm API bugs.
|
|
*
|
|
* NOTE: These tests pass the alarm time to AlarmService as a number and not as
|
|
* a date. See bug 810973 about Date truncating milliseconds. AlarmService does
|
|
* not officially allow a integer, but nor does it disallow it. Of course this
|
|
* test will break if AlarmService adds a type check, hence this note.
|
|
* FIXME: when bug 810973 is fixed.
|
|
*/
|
|
|
|
function add_alarm_future(cb) {
|
|
let alarmId = undefined;
|
|
AlarmService.add({
|
|
date: new Date(Date.now() + 143),
|
|
ignoreTimezone: true
|
|
},
|
|
function onAlarmFired(aAlarm) {
|
|
ok(alarmId === aAlarm.id, "Future alarm fired successfully.");
|
|
cb();
|
|
},
|
|
function onSuccess(aAlarmId) {
|
|
alarmId = aAlarmId;
|
|
},
|
|
function onError(error) {
|
|
ok(false, "Unexpected error adding future alarm " + error);
|
|
cb();
|
|
});
|
|
}
|
|
|
|
function add_alarm_present(cb) {
|
|
let self = this;
|
|
let alarmId = undefined;
|
|
AlarmService.add({
|
|
date: new Date(),
|
|
ignoreTimezone: true
|
|
},
|
|
function onAlarmFired(aAlarm) {
|
|
ok(alarmId === aAlarm.id, "Present alarm fired successfully.");
|
|
cb();
|
|
},
|
|
function onSuccess(aAlarmId) {
|
|
alarmId = aAlarmId;
|
|
}, function onError(error) {
|
|
ok(false, "Unexpected error adding alarm for current time " + error);
|
|
cb();
|
|
});
|
|
}
|
|
|
|
function add_alarm_past(cb) {
|
|
let self = this;
|
|
let alarmId = undefined;
|
|
AlarmService.add({
|
|
date: new Date(Date.now() - 5),
|
|
ignoreTimezone: true
|
|
},
|
|
function onAlarmFired(aAlarm) {
|
|
ok(alarmId === aAlarm.id, "Past alarm fired successfully.");
|
|
cb();
|
|
},
|
|
function onSuccess(aAlarmId) {
|
|
alarmId = aAlarmId;
|
|
},
|
|
function onError(error) {
|
|
ok(false, "Unexpected error adding alarm for time in the past " + error);
|
|
cb();
|
|
});
|
|
}
|
|
|
|
function trigger_all_alarms(cb) {
|
|
let n = 10;
|
|
let counter = 0;
|
|
let date = new Date(Date.now() + 57);
|
|
function onAlarmFired() {
|
|
counter++;
|
|
info("trigger_all_alarms count " + counter);
|
|
if (counter == n) {
|
|
ok(true, "All " + n + " alarms set to a particular time fired.");
|
|
cb();
|
|
}
|
|
}
|
|
|
|
for (let i = 0; i < n; i++) {
|
|
AlarmService.add(
|
|
{
|
|
date: date,
|
|
ignoreTimezone: true
|
|
},
|
|
onAlarmFired
|
|
);
|
|
}
|
|
}
|
|
|
|
function multiple_handlers(cb) {
|
|
let d = new Date(Date.now() + 100);
|
|
let called = 0;
|
|
|
|
function done() {
|
|
if (called == 2) {
|
|
ok(true, "Two alarms for the same time fired.");
|
|
cb();
|
|
}
|
|
}
|
|
|
|
function handler1() {
|
|
called++;
|
|
done();
|
|
}
|
|
|
|
function handler2() {
|
|
called++;
|
|
done();
|
|
}
|
|
|
|
AlarmService.add(
|
|
{
|
|
date: d,
|
|
ignoreTimezone: true
|
|
},
|
|
handler1
|
|
);
|
|
AlarmService.add(
|
|
{
|
|
date: d,
|
|
ignoreTimezone: true
|
|
},
|
|
handler2
|
|
);
|
|
}
|
|
|
|
function same_time_alarms(cb) {
|
|
var fired = 0;
|
|
var delay = new Date(Date.now() + 100);
|
|
|
|
function check() {
|
|
fired++;
|
|
if (fired == 4) {
|
|
ok(true, "All alarms set for the same time fired.");
|
|
cb();
|
|
}
|
|
}
|
|
|
|
function addImmediateAlarm() {
|
|
fired++;
|
|
AlarmService.add({
|
|
date: delay,
|
|
ignoreTimezone: true
|
|
}, check);
|
|
}
|
|
|
|
AlarmService.add({
|
|
date: delay,
|
|
ignoreTimezone: true
|
|
}, addImmediateAlarm);
|
|
|
|
AlarmService.add({
|
|
date: delay,
|
|
ignoreTimezone: true
|
|
}, addImmediateAlarm);
|
|
}
|
|
|
|
function test() {
|
|
var tests = [
|
|
add_alarm_future,
|
|
add_alarm_present,
|
|
add_alarm_past,
|
|
trigger_all_alarms,
|
|
multiple_handlers,
|
|
same_time_alarms
|
|
]
|
|
|
|
var testIndex = -1;
|
|
function nextTest() {
|
|
testIndex++;
|
|
if (testIndex >= tests.length)
|
|
return;
|
|
|
|
waitForExplicitFinish();
|
|
tests[testIndex](function() {
|
|
finish();
|
|
nextTest();
|
|
});
|
|
}
|
|
nextTest();
|
|
}
|