more tests for event emitter weirdness

This commit is contained in:
Jarred Sumner
2022-12-05 00:42:02 -08:00
parent 682af03cdc
commit 79094e6643

View File

@@ -60,3 +60,62 @@ describe("EventEmitter", () => {
setTimeout(() => emitter.emit("wow"), 1);
});
});
const waysOfCreating = [
() => Object.create(EventEmitter.prototype),
() => new EventEmitter(),
() => new (class extends EventEmitter {})(),
() => {
class MyEmitter extends EventEmitter {}
return new MyEmitter();
},
() => {
var foo = {};
Object.setPrototypeOf(foo, EventEmitter.prototype);
return foo;
},
() => {
const FakeEmitter = function FakeEmitter() {
return EventEmitter.call(this);
};
Object.setPrototypeOf(FakeEmitter.prototype, EventEmitter.prototype);
Object.setPrototypeOf(FakeEmitter, EventEmitter);
return new FakeEmitter();
},
() => {
const FakeEmitter = function FakeEmitter() {
EventEmitter.call(this);
};
Object.assign(FakeEmitter.prototype, EventEmitter.prototype);
Object.assign(FakeEmitter, EventEmitter);
return new FakeEmitter();
},
() => {
var foo = {};
Object.assign(foo, EventEmitter.prototype);
return foo;
},
];
for (let create of waysOfCreating) {
it(`${create
.toString()
.slice(10, 40)
.replaceAll("\n", "\\n")
.trim()} should work`, () => {
var myEmitter = create();
var called = false;
myEmitter.once("event", () => {
called = true;
});
var firstEvents = myEmitter._events;
expect(myEmitter.listenerCount("event")).toBe(1);
expect(myEmitter.emit("event")).toBe(true);
expect(myEmitter.listenerCount("event")).toBe(0);
expect(firstEvents).toBe(myEmitter._events);
expect(called).toBe(true);
});
}