UNPKG

itsa-utils

Version:

ITSA's utility functions

714 lines (694 loc) 22.6 kB
/*global describe, it */ /*jshint unused:false */ "use strict"; var expect = require("chai").expect; Object.prototype.each = function (fn, context) { for (var key in this) { if (this.hasOwnProperty(key)) { fn.call(context, this[key], key, this); } } return this; }; var timers = require("../index.js"), merge = function (obj1, obj2) { obj2.each(function (value, key) { if (!(key in obj1)) { obj1[key] = obj2[key]; } }); }; describe("Testing later-method", function () { describe("without repeat", function () { it("later", function (done) { var count = 0; timers.later(function() { count++; }, 100); // purposly, check after >2x timeout --> count should only increase 1x setTimeout(function() { expect(count).to.eql(1); done(); }, 280); }); it("canceled later", function (done) { var count = 0; var handle = timers.later(function() { count++; }, 100); setTimeout(function() { handle.cancel(); }, 10); setTimeout(function() { expect(count).to.eql(0); done(); }, 180); }); it("without timeout", function (done) { var count = 0, countbefore; timers.later(function() { count++; }); // also check `countbefore` --> in case later doesn"t run asynchronously, // count will be 1 at this stage (which has to be 0) countbefore = count; setTimeout(function() { expect(count).to.eql(1); expect(countbefore).to.eql(0); done(); }, 80); }); it("canceled without timeout", function (done) { var count = 0; var handle = timers.later(function() { count++; }); handle.cancel(); setTimeout(function() { expect(count).to.eql(0); done(); }, 80); }); }); describe("repeated", function () { it("later repeated every 100ms, check at 50ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, true); setTimeout(function() { handle.cancel(); expect(count).to.eql(0); done(); }, 50); }); it("later repeated every 100ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, true); setTimeout(function() { handle.cancel(); expect(count).to.eql(2); done(); }, 280); }); it("later repeated every 100ms canceled at 50ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, true); setTimeout(function() { handle.cancel(); }, 50); setTimeout(function() { expect(count).to.eql(0); done(); }, 280); }); it("later repeated every 100ms canceled at 250ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, true); setTimeout(function() { handle.cancel(); }, 250); setTimeout(function() { expect(count).to.eql(2); done(); }, 480); }); }); describe("repeated with different first interval", function () { it("later first 100ms, repeated every 200ms, check at 50ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 200); setTimeout(function() { handle.cancel(); expect(count).to.eql(0); done(); }, 50); }); it("later first 100ms, repeated every 200ms, check at 150ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 200); setTimeout(function() { handle.cancel(); expect(count).to.eql(1); done(); }, 150); }); it("later first 100ms, repeated every 200ms, check at 250ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 200); setTimeout(function() { handle.cancel(); expect(count).to.eql(1); done(); }, 250); }); it("later first 100ms, repeated every 200ms, check at 350ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 200); setTimeout(function() { handle.cancel(); expect(count).to.eql(2); done(); }, 350); }); it("later first 100ms, repeated every 200ms, check at 450ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 200); setTimeout(function() { handle.cancel(); expect(count).to.eql(2); done(); }, 450); }); it("later first 100ms, repeated every 200ms, check at 550ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 200); setTimeout(function() { handle.cancel(); expect(count).to.eql(3); done(); }, 550); }); it("later first 100ms, repeated every 200ms canceled at 50ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 200); setTimeout(function() { handle.cancel(); }, 50); setTimeout(function() { expect(count).to.eql(0); done(); }, 650); }); it("later first 100ms, repeated every 200ms canceled at 250ms", function (done) { var count = 0, handle; handle = timers.later(function() { console.log(count); count++; }, 100, 200); setTimeout(function() { handle.cancel(); }, 250); setTimeout(function() { expect(count).to.eql(1); done(); }, 650); }); it("later first 100ms, repeated every 200ms canceled at 600ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 200); setTimeout(function() { handle.cancel(); }, 600); setTimeout(function() { expect(count).to.eql(3); done(); }, 850); }); it("check context without interval", function (done) { var a = {}, fn = function() { expect(this).to.be.eql(a); done(); }; timers.later(fn.bind(a), 0); }); it("check context with interval", function (done) { var a = {}, fn = function() { expect(this).to.be.eql(a); }, handle = timers.later(fn.bind(a), 50, true); setTimeout(function() { handle.cancel(); done(); }, 100); }); it("check going to async", function (done) { timers.later(done); }); }); }); describe("Testing later-method with long timeout", function () { this.timeout(10000); describe("without repeat", function () { it("later", function (done) { var count = 0; timers.later(function() { count++; }, 1000); // purposly, check after >2x timeout --> count should only increase 1x setTimeout(function() { expect(count).to.eql(1); done(); }, 2080); }); it("canceled later within first loop", function (done) { var count = 0; var handle = timers.later(function() { count++; }, 1000); setTimeout(function() { handle.cancel(); }, 10); setTimeout(function() { expect(count).to.eql(0); done(); }, 1080); }); it("canceled later within second loop", function (done) { var count = 0; var handle = timers.later(function() { count++; }, 1000); setTimeout(function() { handle.cancel(); }, 550); setTimeout(function() { expect(count).to.eql(0); done(); }, 1080); }); it("canceled later within third loop", function (done) { var count = 0; var handle = timers.later(function() { count++; }, 1000); setTimeout(function() { handle.cancel(); }, 950); setTimeout(function() { expect(count).to.eql(0); done(); }, 1080); }); }); describe("repeated", function () { it("later repeated every 1000ms, check at 50ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 1000, true); setTimeout(function() { handle.cancel(); expect(count).to.eql(0); done(); }, 50); }); it("later repeated every 1000ms check at 1100ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 1000, true); setTimeout(function() { handle.cancel(); expect(count).to.eql(1); done(); }, 1100); }); it("later repeated every 1000ms check at 2100ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 1000, true); setTimeout(function() { handle.cancel(); expect(count).to.eql(2); done(); }, 2100); }); it("later repeated every 1000ms canceled at 50ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 1000, true); setTimeout(function() { handle.cancel(); }, 50); setTimeout(function() { expect(count).to.eql(0); done(); }, 1080); }); it("later repeated every 1000ms canceled at 1100ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 1000, true); setTimeout(function() { handle.cancel(); }, 1100); setTimeout(function() { expect(count).to.eql(1); done(); }, 1180); }); it("later repeated every 1000ms canceled at 2100ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 1000, true); setTimeout(function() { handle.cancel(); }, 2100); setTimeout(function() { expect(count).to.eql(2); done(); }, 2180); }); }); describe("repeated with different first interval - first large, second large", function () { it("later repeated 450ms/500ms, check at 50ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 450, 500); setTimeout(function() { handle.cancel(); expect(count).to.eql(0); done(); }, 50); }); it("later repeated 450ms/500ms, check at 550ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 450, 500); setTimeout(function() { handle.cancel(); expect(count).to.eql(1); done(); }, 550); }); it("later repeated 450ms/500ms, check at 1050ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 450, 500); setTimeout(function() { handle.cancel(); expect(count).to.eql(2); done(); }, 1050); }); it("later repeated 450ms/500ms, canceled at 50ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 450, 500); setTimeout(function() { handle.cancel(); }, 50); setTimeout(function() { expect(count).to.eql(0); done(); }, 1050); }); it("later repeated 450ms/500ms, canceled at 550ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 450, 500); setTimeout(function() { handle.cancel(); }, 550); setTimeout(function() { expect(count).to.eql(1); done(); }, 1550); }); it("later repeated 450ms/500ms, canceled at 1050ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 450, 500); setTimeout(function() { handle.cancel(); }, 1050); setTimeout(function() { expect(count).to.eql(2); done(); }, 2050); }); }); describe("repeated with different first interval - first small, second large", function () { it("later repeated 100ms/500ms, check at 50ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 500); setTimeout(function() { handle.cancel(); expect(count).to.eql(0); done(); }, 50); }); it("later repeated 100ms/500ms, check at 250ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 500); setTimeout(function() { handle.cancel(); expect(count).to.eql(1); done(); }, 250); }); it("later repeated 100ms/500ms, check at 750ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 500); setTimeout(function() { handle.cancel(); expect(count).to.eql(2); done(); }, 750); }); it("later repeated 100ms/500ms, check at 1250ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 500); setTimeout(function() { handle.cancel(); expect(count).to.eql(3); done(); }, 1250); }); it("later repeated 100ms/500ms, canceled at 50ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 500); setTimeout(function() { handle.cancel(); }, 50); setTimeout(function() { expect(count).to.eql(0); done(); }, 1150); }); it("later repeated 100ms/500ms, canceled at 250ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 500); setTimeout(function() { handle.cancel(); }, 250); setTimeout(function() { expect(count).to.eql(1); done(); }, 1650); }); it("later repeated 100ms/500ms, canceled at 750ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 500); setTimeout(function() { handle.cancel(); }, 750); setTimeout(function() { expect(count).to.eql(2); done(); }, 2150); }); it("later repeated 100ms/500ms, canceled at 1250ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 100, 500); setTimeout(function() { handle.cancel(); }, 1250); setTimeout(function() { expect(count).to.eql(3); done(); }, 2650); }); }); describe("repeated with different first interval - first large, second small", function () { it("later repeated 500ms/100ms, check at 50ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 500, 100); setTimeout(function() { handle.cancel(); expect(count).to.eql(0); done(); }, 50); }); it("later repeated 500ms/100ms, check at 550ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 500, 100); setTimeout(function() { handle.cancel(); expect(count).to.eql(1); done(); }, 550); }); it("later repeated 500ms/100ms, check at 650ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 500, 100); setTimeout(function() { handle.cancel(); expect(count).to.eql(2); done(); }, 650); }); it("later repeated 500ms/100ms, check at 750ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 500, 100); setTimeout(function() { handle.cancel(); expect(count).to.eql(3); done(); }, 750); }); it("later repeated 500ms/100ms, canceled at 50ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 500, 100); setTimeout(function() { handle.cancel(); }, 50); setTimeout(function() { expect(count).to.eql(0); done(); }, 750); }); it("later repeated 500ms/100ms, canceled at 550ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 500, 100); setTimeout(function() { handle.cancel(); }, 550); setTimeout(function() { expect(count).to.eql(1); done(); }, 850); }); it("later repeated 500ms/100ms, canceled at 650ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 500, 100); setTimeout(function() { handle.cancel(); }, 650); setTimeout(function() { expect(count).to.eql(2); done(); }, 950); }); it("later repeated 500ms/100ms, canceled at 750ms", function (done) { var count = 0, handle; handle = timers.later(function() { count++; }, 500, 100); setTimeout(function() { handle.cancel(); }, 750); setTimeout(function() { expect(count).to.eql(3); done(); }, 1050); }); }); });