123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- import { describe, expect, it } from "vitest";
- import { NanoEmitter } from "./NanoEmitter.js";
- describe("NanoEmitter", () => {
- it("Functional", async () => {
- const evts = new NanoEmitter<{
- val: (v1: number, v2: number) => void;
- }>({
- publicEmit: true,
- });
- setTimeout(() => evts.emit("val", 5, 5), 1);
- const [v1, v2] = await evts.once("val");
- expect(v1 + v2).toBe(10);
- let v3 = 0, v4 = 0;
- const unsub = evts.on("val", (v1, v2) => {
- v3 = v1;
- v4 = v2;
- });
- evts.emit("val", 10, 10);
- expect(v3 + v4).toBe(20);
- unsub();
- evts.emit("val", 20, 20);
- expect(v3 + v4).toBe(20);
- evts.on("val", (v1, v2) => {
- v3 = v1;
- v4 = v2;
- });
- evts.emit("val", 30, 30);
- expect(v3 + v4).toBe(60);
- evts.unsubscribeAll();
- evts.emit("val", 40, 40);
- expect(v3 + v4).toBe(60);
- });
- it("Object oriented", async () => {
- class MyEmitter extends NanoEmitter<{
- val: (v1: number, v2: number) => void;
- }> {
- constructor() {
- super({ publicEmit: false });
- }
- run() {
- this.events.emit("val", 5, 5);
- }
- }
- const evts = new MyEmitter();
- setTimeout(() => evts.run(), 1);
- const [v1, v2] = await evts.once("val");
- expect(v1 + v2).toBe(10);
- expect(evts.emit("val", 0, 0)).toBe(false);
- });
- });
|