eventemitter3-timer
Version:
`EventEmitter3-Timer` is a plugin extend [EventEmitter3](https://github.com/primus/eventemitter3) to create time events easily.
131 lines (114 loc) • 4.07 kB
text/typescript
import { Timer, TimerManager } from "../dist/eventemitter3-timer";
import { expect } from "chai";
describe("Timer", () => {
const manager: TimerManager = Timer.timerManager;
context("#Timer add & delete", () => {
const timers: Timer[] = [];
let num = 10;
let prevNum: number;
it("Global TimerManager is created", () => {
prevNum = manager.timers.length;
timers.push(new Timer(1000));
expect(manager).to.not.equal(null);
});
it("Timer count is correct", () => {
expect(manager.timers.length).to.equal(prevNum + 1);
});
it("Add " + num + " timers", () => {
for (let i = 0; i < num; i++) {
timers.push(new Timer(Math.random() * 1000 + 1000));
}
expect(manager.timers.length).to.equal(num + prevNum + 1);
});
it("Delete one timer using TimeManager.removeTimer()", () => {
manager.removeTimer(timers[0]);
manager.update(5);
expect(manager.timers.length).to.equal(num + prevNum);
});
it("Delete all timers using Timer.prototype.remove()", () => {
for (const timer of timers) {
timer.remove();
}
manager.update(5);
expect(manager.timers.length).to.equal(prevNum);
});
});
context("#Timer functionalities", () => {
const timer = new Timer(1000);
let started: boolean = false;
let ended: boolean = false;
let repeated: number = 0;
let _delta: number = 0;
let _elapsed: number = 0;
timer.on("start", () => started = true);
timer.on("update", (elapsed, delta) => {
_delta = delta;
_elapsed = elapsed;
});
timer.on("repeat", (elapsed, repeat) => repeated = repeat);
timer.on("end", elapsed => {
ended = true;
_elapsed = elapsed;
});
it("Timer is started", () => {
timer.start();
timer.update(500);
expect(started).to.equal(true);
expect(timer.isStarted).to.equal(true);
expect(ended).to.equal(false);
expect(timer.isEnded).to.equal(false);
});
it("Timer is updated", () => {
expect(_elapsed).to.equal(500);
expect(_delta).to.equal(500);
});
it("Timer is ended", () => {
timer.update(600);
expect(_elapsed).to.equal(1000);
expect(ended).to.equal(true);
expect(timer.isEnded).to.equal(true);
});
it("Timer is looping", () => {
expect(timer.active).to.equal(false);
timer.loop = true;
timer.time = 500;
timer.reset();
timer.start();
for (let i = 0; i < 10; i++) {
timer.update(500);
expect(repeated).to.equal(i + 1);
}
});
it("Timer is repeated", () => {
expect(timer.active).to.equal(true);
timer.loop = false;
timer.repeat = 5;
timer.reset();
timer.start();
for (let i = 0; i < 10; i++) {
timer.update(500);
}
expect(repeated).to.equal(5);
expect(timer.active).to.equal(false);
});
it("Timer is delayed", () => {
timer.repeat = 0;
timer.reset();
timer.delay = 500;
timer.start();
timer.update(500);
expect(timer.active).to.equal(true);
expect(timer.isEnded).to.equal(false);
timer.update(500);
expect(timer.isEnded).to.equal(true);
});
it("Timer can be expired", () => {
timer.expire = true;
timer.delay = 0;
timer.reset();
timer.start();
timer.timerManager.update(500);
expect(timer.timerManager).to.equal(null);
});
});
});