From f0aac15fca47803be354fac48854899dda7f4289 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Mon, 30 Jun 2025 11:36:45 -0400 Subject: [PATCH] fix test --- packages/svelte/src/index-server.js | 3 ++- .../samples/get-abort-signal/_config.js | 16 +++++++++++++--- .../samples/get-abort-signal/main.svelte | 14 ++++++++++---- 3 files changed, 25 insertions(+), 8 deletions(-) diff --git a/packages/svelte/src/index-server.js b/packages/svelte/src/index-server.js index f4cb6f8c41..ab2258ac5f 100644 --- a/packages/svelte/src/index-server.js +++ b/packages/svelte/src/index-server.js @@ -2,6 +2,7 @@ import { current_component } from './internal/server/context.js'; import { noop } from './internal/shared/utils.js'; import * as e from './internal/server/errors.js'; +import { STALE_REACTION } from '#client/constants'; /** @param {() => void} fn */ export function onDestroy(fn) { @@ -42,7 +43,7 @@ export function getAbortSignal() { if (controller === null) { const c = (controller = new AbortController()); queueMicrotask(() => { - c.abort(); + c.abort(STALE_REACTION); controller = null; }); } diff --git a/packages/svelte/tests/runtime-runes/samples/get-abort-signal/_config.js b/packages/svelte/tests/runtime-runes/samples/get-abort-signal/_config.js index 45d4cef567..ecc2de4db7 100644 --- a/packages/svelte/tests/runtime-runes/samples/get-abort-signal/_config.js +++ b/packages/svelte/tests/runtime-runes/samples/get-abort-signal/_config.js @@ -3,14 +3,24 @@ import { test } from '../../test'; export default test({ html: `

loading...

`, - async test({ assert, target }) { + async test({ assert, target, variant, logs }) { + await new Promise((f) => setTimeout(f, 50)); + + if (variant === 'hydrate') { + assert.deepEqual(logs, ['aborted', { stale: true }]); + } + + logs.length = 0; + const [button] = target.querySelectorAll('button'); - await new Promise((f) => setTimeout(f, 50)); // TODO replace with `tick` once `await` lands + await new Promise((f) => setTimeout(f, 50)); assert.htmlEqual(target.innerHTML, '

0

'); button.click(); - await new Promise((f) => setTimeout(f, 50)); // TODO replace with `tick` once `await` lands + await new Promise((f) => setTimeout(f, 50)); assert.htmlEqual(target.innerHTML, '

2

'); + + assert.deepEqual(logs, ['aborted', { stale: true }]); } }); diff --git a/packages/svelte/tests/runtime-runes/samples/get-abort-signal/main.svelte b/packages/svelte/tests/runtime-runes/samples/get-abort-signal/main.svelte index f8e600040b..5933b0bae3 100644 --- a/packages/svelte/tests/runtime-runes/samples/get-abort-signal/main.svelte +++ b/packages/svelte/tests/runtime-runes/samples/get-abort-signal/main.svelte @@ -4,11 +4,17 @@ let count = $state(0); let delayed_count = $derived.by(async () => { - const response = await fetch(`data:text/plain;charset=utf-8,${count}`, { - signal: getAbortSignal() - }); + let c = count; - return await response.json(); + const signal = getAbortSignal(); + + await new Promise((f) => setTimeout(f)); + + if (signal.aborted) { + console.log('aborted', signal.reason); + } + + return c; });