From 66ee4d88d64523c9cb144db7f5a80cb33d65450d Mon Sep 17 00:00:00 2001 From: Lazizbek Ergashev Date: Wed, 12 Aug 2026 18:18:00 +0500 Subject: [PATCH] test: add coverage for removeEventListener boolean capture removeEventListener(type, fn, true) never matched a listener added the same way, because removeEventListener compared options?.capture === true directly while addEventListener flattened a boolean third argument via validateEventListenerOptions(). The underlying fix landed independently in nodejs/node#64894 (worker: add support for Web Workers), as a side effect of an unrelated refactor, so this PR now only adds the regression test that would have caught it. WPT does not cover this path: the EventTarget-removeEventListener.any.js test is skipped in test/wpt/status/dom/events.json. Fixes: https://github.com/nodejs/node/issues/65244 Signed-off-by: Lazizbek Ergashev --- test/parallel/test-eventtarget.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/parallel/test-eventtarget.js b/test/parallel/test-eventtarget.js index d0b3ad03a1df..0d47511118bf 100644 --- a/test/parallel/test-eventtarget.js +++ b/test/parallel/test-eventtarget.js @@ -419,6 +419,20 @@ let asyncTest = Promise.resolve(); target.removeEventListener('foo', a, { capture: false }); target.dispatchEvent(new Event('foo')); } + +{ + const target = new EventTarget(); + const a = common.mustCall(3); + + target.addEventListener('foo', a, true); + target.addEventListener('foo', a, false); + + target.dispatchEvent(new Event('foo')); + target.removeEventListener('foo', a, true); + target.dispatchEvent(new Event('foo')); + target.removeEventListener('foo', a, false); + target.dispatchEvent(new Event('foo')); +} { const target = new EventTarget(); assert.strictEqual(target.toString(), '[object EventTarget]');