aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-22 19:53:59 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-22 19:53:59 -0800
commiteaea08ea454929c9e84e5e0b9294ea3cff4e5a7e (patch)
tree7709491178b14bc0058646fd7ce730f7dd2ff742
parent4dfc09018fe3fee391afc7b4edc129730bd037b8 (diff)
downloadbun-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.ts30
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);
+});