From 90ce1d5f0bd01f34cc5568aa658c1c04ea64b76a Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 17 Jun 2024 18:33:33 -0700 Subject: [PATCH] chore: add unowned derived memory leak test (#12075) --- packages/svelte/tests/signals/test.ts | 35 +++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/packages/svelte/tests/signals/test.ts b/packages/svelte/tests/signals/test.ts index f8e8e54b8..33bf6a24b 100644 --- a/packages/svelte/tests/signals/test.ts +++ b/packages/svelte/tests/signals/test.ts @@ -37,6 +37,16 @@ function test(text: string, fn: (runes: boolean) => any) { it(`${text} (runes mode)`, run_test(true, fn)); } +test.only = (text: string, fn: (runes: boolean) => any) => { + it.only(`${text} (legacy mode)`, run_test(false, fn)); + it.only(`${text} (runes mode)`, run_test(true, fn)); +}; + +test.skip = (text: string, fn: (runes: boolean) => any) => { + it.skip(`${text} (legacy mode)`, run_test(false, fn)); + it.skip(`${text} (runes mode)`, run_test(true, fn)); +}; + describe('signals', () => { test('effect with state and derived in it', () => { const log: string[] = []; @@ -537,4 +547,29 @@ describe('signals', () => { assert.deepEqual(branch, 'if'); }; }); + + test('unowned deriveds are not added as reactions', () => { + var count = source(0); + + function create_derived() { + return derived(() => $.get(count) * 2); + } + + return () => { + let d = create_derived(); + assert.equal($.get(d), 0); + assert.equal(count.reactions, null); + assert.equal(d.deps?.length, 1); + + set(count, 1); + assert.equal($.get(d), 2); + assert.equal(count.reactions, null); + assert.equal(d.deps?.length, 1); + + d = create_derived(); + assert.equal($.get(d), 2); + assert.equal(count.reactions, null); + assert.equal(d.deps?.length, 1); + }; + }); });