From 515a37a88d8c84ff3ac750d3c489c028a98d3e06 Mon Sep 17 00:00:00 2001 From: il-sairamg Date: Wed, 1 Jul 2026 18:51:45 +0530 Subject: [PATCH] Added test verifying frameTick and idle renderer listeners are unregistered on destroy --- src/component.test.js | 51 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/component.test.js b/src/component.test.js index 7b93b3cd..43091f63 100644 --- a/src/component.test.js +++ b/src/component.test.js @@ -30,6 +30,9 @@ initLog() if (renderer && !renderer.on) { renderer.on = () => {} } +if (renderer && !renderer.off) { + renderer.off = () => {} +} test('Type', (assert) => { const expected = 'function' @@ -532,6 +535,54 @@ test('Component - Warn when method name matches prop name', (assert) => { assert.end() }) +test('Component - Should unregister renderer hook listeners on destroy', (assert) => { + const offCapture = assert.capture(renderer, 'off', () => {}) + const onCapture = assert.capture(renderer, 'on', () => {}) + const config = { + code: { + render: () => { + return { elms: [{ node: { on: () => {} } }], cleanup: () => {} } + }, + effects: [], + }, + hooks: { + frameTick() {}, + idle() {}, + }, + } + + const holder = { destroy() {} } + const parent = { $focus() {} } + const foo = Component('Foo', config)({}, holder, parent, {}) + const onCalls = onCapture() + + foo.destroy() + + const offCalls = offCapture() + const frameTickCb = onCalls.find((c) => c.args[0] === 'frameTick').args[1] + const idleCb = onCalls.find((c) => c.args[0] === 'idle').args[1] + const activeCb = onCalls.find((c) => c.args[0] === 'active').args[1] + + assert.ok( + offCalls.some((c) => c.args[0] === 'frameTick' && c.args[1] === frameTickCb), + 'frameTick listener should be removed on destroy' + ) + assert.ok( + offCalls.some((c) => c.args[0] === 'idle' && c.args[1] === idleCb), + 'idle listener should be removed on destroy' + ) + assert.ok( + offCalls.some((c) => c.args[0] === 'active' && c.args[1] === activeCb), + 'active listener should be removed on destroy' + ) + assert.equal( + foo[symbols.rendererEventListeners], + null, + 'rendererEventListeners should be cleared' + ) + assert.end() +}) + test('Component - Should register renderer event listeners for hooks', (assert) => { assert.capture(renderer, 'on', () => {}) const config = {