michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: var timer = require("sdk/timers"); michael@0: const { Loader } = require("sdk/test/loader"); michael@0: michael@0: exports.testSetTimeout = function(assert, end) { michael@0: timer.setTimeout(function() { michael@0: assert.pass("testSetTimeout passed"); michael@0: end(); michael@0: }, 1); michael@0: }; michael@0: michael@0: exports.testParamedSetTimeout = function(assert, end) { michael@0: let params = [1, 'foo', { bar: 'test' }, null, undefined]; michael@0: timer.setTimeout.apply(null, [function() { michael@0: assert.equal(arguments.length, params.length); michael@0: for (let i = 0, ii = params.length; i < ii; i++) michael@0: assert.equal(params[i], arguments[i]); michael@0: end(); michael@0: }, 1].concat(params)); michael@0: }; michael@0: michael@0: exports.testClearTimeout = function(assert, end) { michael@0: var myFunc = function myFunc() { michael@0: assert.fail("myFunc() should not be called in testClearTimeout"); michael@0: }; michael@0: var id = timer.setTimeout(myFunc, 1); michael@0: timer.setTimeout(function() { michael@0: assert.pass("testClearTimeout passed"); michael@0: end(); michael@0: }, 2); michael@0: timer.clearTimeout(id); michael@0: }; michael@0: michael@0: exports.testParamedClearTimeout = function(assert, end) { michael@0: let params = [1, 'foo', { bar: 'test' }, null, undefined]; michael@0: var myFunc = function myFunc() { michael@0: assert.fail("myFunc() should not be called in testClearTimeout"); michael@0: }; michael@0: var id = timer.setTimeout(myFunc, 1); michael@0: timer.setTimeout.apply(null, [function() { michael@0: assert.equal(arguments.length, params.length); michael@0: for (let i = 0, ii = params.length; i < ii; i++) michael@0: assert.equal(params[i], arguments[i]); michael@0: end(); michael@0: }, 1].concat(params)); michael@0: timer.clearTimeout(id); michael@0: }; michael@0: michael@0: exports.testSetInterval = function (assert, end) { michael@0: var count = 0; michael@0: var id = timer.setInterval(function () { michael@0: count++; michael@0: if (count >= 5) { michael@0: timer.clearInterval(id); michael@0: assert.pass("testSetInterval passed"); michael@0: end(); michael@0: } michael@0: }, 1); michael@0: }; michael@0: michael@0: exports.testParamedSetInerval = function(assert, end) { michael@0: let params = [1, 'foo', { bar: 'test' }, null, undefined]; michael@0: let count = 0; michael@0: let id = timer.setInterval.apply(null, [function() { michael@0: count ++; michael@0: if (count < 5) { michael@0: assert.equal(arguments.length, params.length); michael@0: for (let i = 0, ii = params.length; i < ii; i++) michael@0: assert.equal(params[i], arguments[i]); michael@0: } else { michael@0: timer.clearInterval(id); michael@0: end(); michael@0: } michael@0: }, 1].concat(params)); michael@0: }; michael@0: michael@0: exports.testClearInterval = function (assert, end) { michael@0: timer.clearInterval(timer.setInterval(function () { michael@0: assert.fail("setInterval callback should not be called"); michael@0: }, 1)); michael@0: var id = timer.setInterval(function () { michael@0: timer.clearInterval(id); michael@0: assert.pass("testClearInterval passed"); michael@0: end(); michael@0: }, 2); michael@0: }; michael@0: michael@0: exports.testParamedClearInterval = function(assert, end) { michael@0: timer.clearInterval(timer.setInterval(function () { michael@0: assert.fail("setInterval callback should not be called"); michael@0: }, 1, timer, {}, null)); michael@0: michael@0: let id = timer.setInterval(function() { michael@0: timer.clearInterval(id); michael@0: assert.equal(3, arguments.length); michael@0: end(); michael@0: }, 2, undefined, 'test', {}); michael@0: }; michael@0: michael@0: michael@0: exports.testImmediate = function(assert, end) { michael@0: let actual = []; michael@0: let ticks = 0; michael@0: timer.setImmediate(function(...params) { michael@0: actual.push(params); michael@0: assert.equal(ticks, 1, "is a next tick"); michael@0: assert.deepEqual(actual, [["start", "immediates"]]); michael@0: }, "start", "immediates"); michael@0: michael@0: timer.setImmediate(function(...params) { michael@0: actual.push(params); michael@0: assert.deepEqual(actual, [["start", "immediates"], michael@0: ["added"]]); michael@0: assert.equal(ticks, 1, "is a next tick"); michael@0: timer.setImmediate(function(...params) { michael@0: actual.push(params); michael@0: assert.equal(ticks, 2, "is second tick"); michael@0: assert.deepEqual(actual, [["start", "immediates"], michael@0: ["added"], michael@0: [], michael@0: ["last", "immediate", "handler"], michael@0: ["side-effect"]]); michael@0: end(); michael@0: }, "side-effect"); michael@0: }, "added"); michael@0: michael@0: timer.setImmediate(function(...params) { michael@0: actual.push(params); michael@0: assert.equal(ticks, 1, "is a next tick"); michael@0: assert.deepEqual(actual, [["start", "immediates"], michael@0: ["added"], michael@0: []]); michael@0: timer.clearImmediate(removeID); michael@0: }); michael@0: michael@0: function removed() { michael@0: assert.fail("should be removed"); michael@0: } michael@0: let removeID = timer.setImmediate(removed); michael@0: michael@0: timer.setImmediate(function(...params) { michael@0: actual.push(params); michael@0: assert.equal(ticks, 1, "is a next tick"); michael@0: assert.deepEqual(actual, [["start", "immediates"], michael@0: ["added"], michael@0: [], michael@0: ["last", "immediate", "handler"]]); michael@0: ticks = ticks + 1; michael@0: }, "last", "immediate", "handler"); michael@0: michael@0: michael@0: ticks = ticks + 1; michael@0: }; michael@0: michael@0: exports.testUnload = function(assert, end) { michael@0: var loader = Loader(module); michael@0: var sbtimer = loader.require("sdk/timers"); michael@0: michael@0: var myFunc = function myFunc() { michael@0: assert.fail("myFunc() should not be called in testUnload"); michael@0: }; michael@0: michael@0: sbtimer.setTimeout(myFunc, 1); michael@0: sbtimer.setTimeout(myFunc, 1, 'foo', 4, {}, undefined); michael@0: sbtimer.setInterval(myFunc, 1); michael@0: sbtimer.setInterval(myFunc, 1, {}, null, 'bar', undefined, 87); michael@0: loader.unload(); michael@0: timer.setTimeout(function() { michael@0: assert.pass("timer testUnload passed"); michael@0: end(); michael@0: }, 2); michael@0: }; michael@0: michael@0: require("test").run(exports);