diff options
author | 2023-01-22 19:53:59 -0800 | |
---|---|---|
committer | 2023-01-22 19:53:59 -0800 | |
commit | eaea08ea454929c9e84e5e0b9294ea3cff4e5a7e (patch) | |
tree | 7709491178b14bc0058646fd7ce730f7dd2ff742 | |
parent | 4dfc09018fe3fee391afc7b4edc129730bd037b8 (diff) | |
download | bun-eaea08ea454929c9e84e5e0b9294ea3cff4e5a7e.tar.gz bun-eaea08ea454929c9e84e5e0b9294ea3cff4e5a7e.tar.zst bun-eaea08ea454929c9e84e5e0b9294ea3cff4e5a7e.zip |
Add one gc test for eventemitter
Diffstat (limited to '')
-rw-r--r-- | test/bun.js/event-emitter.test.ts | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/bun.js/event-emitter.test.ts b/test/bun.js/event-emitter.test.ts index 1752af1f5..4e586cea4 100644 --- a/test/bun.js/event-emitter.test.ts +++ b/test/bun.js/event-emitter.test.ts @@ -7,6 +7,7 @@ import EventEmitter, { getEventListeners, captureRejectionSymbol, } from "node:events"; +import { heapStats } from "bun:jsc"; describe("EventEmitter", () => { it("captureRejectionSymbol", () => { @@ -147,3 +148,32 @@ test("EventEmitter.off", () => { var myEmitter = new EventEmitter(); expect(myEmitter.off("foo", () => {})).toBe(myEmitter); }); + +// Internally, EventEmitter has a JSC::Weak with the thisValue of the listener +test("EventEmitter GCs", () => { + Bun.gc(true); + + const startCount = heapStats().objectTypeCounts["EventEmitter"] || 0; + (function () { + Bun.gc(true); + + function EventEmitterSubclass() { + EventEmitter.call(this); + } + + Object.setPrototypeOf( + EventEmitterSubclass.prototype, + EventEmitter.prototype, + ); + Object.setPrototypeOf(EventEmitterSubclass, EventEmitter); + + var myEmitter = new EventEmitterSubclass(); + myEmitter.on("foo", () => {}); + myEmitter.emit("foo"); + Bun.gc(true); + })(); + Bun.gc(true); + + const endCount = heapStats().objectTypeCounts["EventEmitter"] || 0; + expect(endCount).toBe(startCount); +}); |