hal/tests/browser_alarms.js

Fri, 16 Jan 2015 18:13:44 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Fri, 16 Jan 2015 18:13:44 +0100
branch
TOR_BUG_9701
changeset 14
925c144e1f1f
permissions
-rw-r--r--

Integrate suggestion from review to improve consistency with existing code.

     1 XPCOMUtils.defineLazyModuleGetter(this, "AlarmService",
     2                                   "resource://gre/modules/AlarmService.jsm");
     4 /*
     5  * Tests for Bug 867868 and related Alarm API bugs.
     6  *
     7  * NOTE: These tests pass the alarm time to AlarmService as a number and not as
     8  * a date. See bug 810973 about Date truncating milliseconds. AlarmService does
     9  * not officially allow a integer, but nor does it disallow it. Of course this
    10  * test will break if AlarmService adds a type check, hence this note.
    11  * FIXME: when bug 810973 is fixed.
    12  */
    14 function add_alarm_future(cb) {
    15   let alarmId = undefined;
    16   AlarmService.add({
    17     date: new Date(Date.now() + 143),
    18     ignoreTimezone: true
    19   },
    20   function onAlarmFired(aAlarm) {
    21     ok(alarmId === aAlarm.id, "Future alarm fired successfully.");
    22     cb();
    23   },
    24   function onSuccess(aAlarmId) {
    25     alarmId = aAlarmId;
    26   },
    27   function onError(error) {
    28     ok(false, "Unexpected error adding future alarm " + error);
    29     cb();
    30   });
    31 }
    33 function add_alarm_present(cb) {
    34   let self = this;
    35   let alarmId = undefined;
    36   AlarmService.add({
    37     date: new Date(),
    38     ignoreTimezone: true
    39   },
    40   function onAlarmFired(aAlarm) {
    41     ok(alarmId === aAlarm.id, "Present alarm fired successfully.");
    42     cb();
    43   },
    44   function onSuccess(aAlarmId) {
    45     alarmId = aAlarmId;
    46   }, function onError(error) {
    47     ok(false, "Unexpected error adding alarm for current time " + error);
    48     cb();
    49   });
    50 }
    52 function add_alarm_past(cb) {
    53   let self = this;
    54   let alarmId = undefined;
    55   AlarmService.add({
    56     date: new Date(Date.now() - 5),
    57     ignoreTimezone: true
    58   },
    59   function onAlarmFired(aAlarm) {
    60     ok(alarmId === aAlarm.id, "Past alarm fired successfully.");
    61     cb();
    62   },
    63   function onSuccess(aAlarmId) {
    64     alarmId = aAlarmId;
    65   },
    66   function onError(error) {
    67     ok(false, "Unexpected error adding alarm for time in the past " + error);
    68     cb();
    69   });
    70 }
    72 function trigger_all_alarms(cb) {
    73   let n = 10;
    74   let counter = 0;
    75   let date = new Date(Date.now() + 57);
    76   function onAlarmFired() {
    77     counter++;
    78     info("trigger_all_alarms count " + counter);
    79     if (counter == n) {
    80       ok(true, "All " + n + " alarms set to a particular time fired.");
    81       cb();
    82     }
    83   }
    85   for (let i = 0; i < n; i++) {
    86     AlarmService.add(
    87       {
    88         date: date,
    89         ignoreTimezone: true
    90       },
    91       onAlarmFired
    92     );
    93   }
    94 }
    96 function multiple_handlers(cb) {
    97   let d = new Date(Date.now() + 100);
    98   let called = 0;
   100   function done() {
   101     if (called == 2) {
   102       ok(true, "Two alarms for the same time fired.");
   103       cb();
   104     }
   105   }
   107   function handler1() {
   108     called++;
   109     done();
   110   }
   112   function handler2() {
   113     called++;
   114     done();
   115   }
   117   AlarmService.add(
   118     {
   119       date: d,
   120       ignoreTimezone: true
   121     },
   122     handler1
   123   );
   124   AlarmService.add(
   125     {
   126       date: d,
   127       ignoreTimezone: true
   128     },
   129     handler2
   130   );
   131 }
   133 function same_time_alarms(cb) {
   134   var fired = 0;
   135   var delay = new Date(Date.now() + 100);
   137   function check() {
   138     fired++;
   139     if (fired == 4) {
   140       ok(true, "All alarms set for the same time fired.");
   141       cb();
   142     }
   143   }
   145   function addImmediateAlarm() {
   146     fired++;
   147     AlarmService.add({
   148       date: delay,
   149       ignoreTimezone: true
   150     }, check);
   151   }
   153   AlarmService.add({
   154     date: delay,
   155     ignoreTimezone: true
   156   }, addImmediateAlarm);
   158   AlarmService.add({
   159     date: delay,
   160     ignoreTimezone: true
   161   }, addImmediateAlarm);
   162 }
   164 function test() {
   165   var tests = [
   166     add_alarm_future,
   167     add_alarm_present,
   168     add_alarm_past,
   169     trigger_all_alarms,
   170     multiple_handlers,
   171     same_time_alarms
   172   ]
   174   var testIndex = -1;
   175   function nextTest() {
   176     testIndex++;
   177     if (testIndex >= tests.length)
   178       return;
   180     waitForExplicitFinish();
   181     tests[testIndex](function() {
   182       finish();
   183       nextTest();
   184     });
   185   }
   186   nextTest();
   187 }

mercurial