itsa-utils
Version:
ITSA's utility functions
714 lines (694 loc) • 22.6 kB
JavaScript
/*global describe, it */
/*jshint unused:false */
;
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);
});
});
});