aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-12-05 00:42:02 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-12-05 00:42:02 -0800
commit79094e6643d72653d800c6ffa617da35a79d76bd (patch)
tree35b7f19a2b2d2805ea957a9453fb1efc2c1fec5f
parent682af03cdce591d2a91cb78103b91f05325b8921 (diff)
downloadbun-79094e6643d72653d800c6ffa617da35a79d76bd.tar.gz
bun-79094e6643d72653d800c6ffa617da35a79d76bd.tar.zst
bun-79094e6643d72653d800c6ffa617da35a79d76bd.zip
more tests for event emitter weirdness
Diffstat (limited to '')
-rw-r--r--test/bun.js/event-emitter.test.ts59
1 files changed, 59 insertions, 0 deletions
diff --git a/test/bun.js/event-emitter.test.ts b/test/bun.js/event-emitter.test.ts
index 98ea17d5d..d7c320fa1 100644
--- a/test/bun.js/event-emitter.test.ts
+++ b/test/bun.js/event-emitter.test.ts
@@ -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);
+ });
+}