michael@0: const Cc = Components.classes; michael@0: const Ci = Components.interfaces; michael@0: michael@0: // 5 seconds. michael@0: const kExpectedDelay1 = 5; michael@0: // 1 second. michael@0: const kExpectedDelay2 = 1; michael@0: michael@0: var gStartTime1; michael@0: var gStartTime2; michael@0: var timer; michael@0: michael@0: var observer1 = { michael@0: observe: function observeTC1(subject, topic, data) { michael@0: if (topic == "timer-callback") { michael@0: // Stop timer, so it doesn't repeat (if test runs slowly). michael@0: timer.cancel(); michael@0: michael@0: // Actual delay may not be exact, so convert to seconds and round. michael@0: do_check_eq(Math.round((Date.now() - gStartTime1) / 1000), michael@0: kExpectedDelay1); michael@0: michael@0: timer = null; michael@0: michael@0: do_print("1st timer triggered (before being cancelled). Should not have happened!"); michael@0: do_check_true(false); michael@0: } michael@0: } michael@0: }; michael@0: michael@0: var observer2 = { michael@0: observe: function observeTC2(subject, topic, data) { michael@0: if (topic == "timer-callback") { michael@0: // Stop timer, so it doesn't repeat (if test runs slowly). michael@0: timer.cancel(); michael@0: michael@0: // Actual delay may not be exact, so convert to seconds and round. michael@0: do_check_eq(Math.round((Date.now() - gStartTime2) / 1000), michael@0: kExpectedDelay2); michael@0: michael@0: timer = null; michael@0: michael@0: do_test_finished(); michael@0: } michael@0: } michael@0: }; michael@0: michael@0: function run_test() { michael@0: do_test_pending(); michael@0: michael@0: timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer); michael@0: michael@0: // Initialize the timer (with some delay), then cancel it. michael@0: gStartTime1 = Date.now(); michael@0: timer.init(observer1, kExpectedDelay1 * 1000, timer.TYPE_REPEATING_PRECISE); michael@0: timer.cancel(); michael@0: michael@0: // Re-initialize the timer (with a different delay). michael@0: gStartTime2 = Date.now(); michael@0: timer.init(observer2, kExpectedDelay2 * 1000, timer.TYPE_REPEATING_PRECISE); michael@0: }