first commit
This commit is contained in:
91
xterminal/tests/emitter.test.ts
Normal file
91
xterminal/tests/emitter.test.ts
Normal file
@@ -0,0 +1,91 @@
|
||||
import { describe, it, expect, beforeEach } from "vitest";
|
||||
import XEventEmitter from "../source/emitter/index";
|
||||
|
||||
describe("XEventEmitter", () => {
|
||||
let emitter: XEventEmitter;
|
||||
|
||||
beforeEach(() => {
|
||||
emitter = new XEventEmitter();
|
||||
});
|
||||
|
||||
describe("on", () => {
|
||||
it("should add event listener", () => {
|
||||
let called = false;
|
||||
emitter.on("test", () => {
|
||||
called = true;
|
||||
});
|
||||
emitter.emit("test");
|
||||
expect(called).toBe(true);
|
||||
});
|
||||
|
||||
it("should handle multiple listeners", () => {
|
||||
let count = 0;
|
||||
emitter.on("test", () => count++);
|
||||
emitter.on("test", () => count++);
|
||||
emitter.emit("test");
|
||||
expect(count).toBe(2);
|
||||
});
|
||||
});
|
||||
|
||||
describe("once", () => {
|
||||
it("should call listener only once", () => {
|
||||
let count = 0;
|
||||
emitter.once("test", () => count++);
|
||||
emitter.emit("test");
|
||||
emitter.emit("test");
|
||||
expect(count).toBe(1);
|
||||
});
|
||||
});
|
||||
|
||||
describe("off", () => {
|
||||
it("should remove event listener", () => {
|
||||
let called = false;
|
||||
const listener = () => {
|
||||
called = true;
|
||||
};
|
||||
emitter.on("test", listener);
|
||||
emitter.off("test", listener);
|
||||
emitter.emit("test");
|
||||
expect(called).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("emit", () => {
|
||||
it("should emit events with arguments", () => {
|
||||
let args: unknown[] = [];
|
||||
emitter.on("test", (...a) => {
|
||||
args = a;
|
||||
});
|
||||
emitter.emit("test", 1, "hello", { key: "value" });
|
||||
expect(args).toEqual([1, "hello", { key: "value" }]);
|
||||
});
|
||||
|
||||
it("should prevent recursive emits", () => {
|
||||
let count = 0;
|
||||
emitter.on("test", () => {
|
||||
count++;
|
||||
if (count < 2) emitter.emit("test");
|
||||
});
|
||||
emitter.emit("test");
|
||||
expect(count).toBe(1);
|
||||
});
|
||||
|
||||
it("should not emit if disposed", () => {
|
||||
let called = false;
|
||||
emitter.on("test", () => {
|
||||
called = true;
|
||||
});
|
||||
emitter.dispose();
|
||||
emitter.emit("test");
|
||||
expect(called).toBe(false);
|
||||
});
|
||||
});
|
||||
|
||||
describe("dispose", () => {
|
||||
it("should dispose and clear store", () => {
|
||||
emitter.on("test", () => {});
|
||||
emitter.dispose();
|
||||
expect(emitter.isDisposed).toBe(true);
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user