2025-11-05 17:04:23 -03:00

56 lines
1.5 KiB
JavaScript

import promise from "../lib/promise.js";
import { EventEmitter } from "../index.js";
class Socket extends EventEmitter {
constructor(fn) {
super();
this.fn = fn;
}
async connect() {
if (!this.fn) return;
await Promise.resolve();
this.fn();
}
}
test('resolves if "event" is emitted', async () => {
const value = {};
// eslint-disable-next-line func-names
const socket = new Socket(function () {
this.emit("connect", value);
});
expect(socket.listenerCount("error")).toBe(0);
expect(socket.listenerCount("connect")).toBe(0);
socket.connect();
const p = promise(socket, "connect");
expect(socket.listenerCount("error")).toBe(1);
expect(socket.listenerCount("connect")).toBe(1);
const result = await p;
expect(result).toBe(value);
expect(socket.listenerCount("error")).toBe(0);
expect(socket.listenerCount("connect")).toBe(0);
});
test('rejects if "errorEvent" is emitted', async () => {
const error = new Error("foobar");
// eslint-disable-next-line func-names
const socket = new Socket(function () {
this.emit("error", error);
});
socket.connect();
expect(socket.listenerCount("error")).toBe(0);
expect(socket.listenerCount("connect")).toBe(0);
const p = promise(socket, "connect", "error");
expect(socket.listenerCount("error")).toBe(1);
expect(socket.listenerCount("connect")).toBe(1);
await expect(p).rejects.toBe(error);
expect(socket.listenerCount("error")).toBe(0);
expect(socket.listenerCount("connect")).toBe(0);
});