add test, tidy up

aa-coordination
Rich Harris 8 months ago
parent 148ffd2783
commit 51e50ecb3f

@ -969,15 +969,6 @@ export function get(signal) {
captured_signals.add(signal);
}
if (DEV && from_async_derived) {
var tracking = (from_async_derived.f & REACTION_IS_UPDATING) !== 0;
var was_read = from_async_derived.deps !== null && from_async_derived.deps.includes(signal);
if (!tracking && !was_read) {
w.await_reactivity_loss();
}
}
// Register the dependency on the current reaction signal.
if (active_reaction !== null && !untracking) {
if (derived_sources !== null && derived_sources.includes(signal)) {
@ -1043,25 +1034,35 @@ export function get(signal) {
}
}
if (
DEV &&
tracing_mode_flag &&
tracing_expressions !== null &&
active_reaction !== null &&
tracing_expressions.reaction === active_reaction
) {
// Used when mapping state between special blocks like `each`
if (signal.debug) {
signal.debug();
} else if (signal.created) {
var entry = tracing_expressions.entries.get(signal);
if (entry === undefined) {
entry = { read: [] };
tracing_expressions.entries.set(signal, entry);
if (DEV) {
if (from_async_derived) {
var tracking = (from_async_derived.f & REACTION_IS_UPDATING) !== 0;
var was_read = from_async_derived.deps !== null && from_async_derived.deps.includes(signal);
if (!tracking && !was_read) {
w.await_reactivity_loss();
}
}
entry.read.push(get_stack('TracedAt'));
if (
tracing_mode_flag &&
tracing_expressions !== null &&
active_reaction !== null &&
tracing_expressions.reaction === active_reaction
) {
// Used when mapping state between special blocks like `each`
if (signal.debug) {
signal.debug();
} else if (signal.created) {
var entry = tracing_expressions.entries.get(signal);
if (entry === undefined) {
entry = { read: [] };
tracing_expressions.entries.set(signal, entry);
}
entry.read.push(get_stack('TracedAt'));
}
}
}

@ -0,0 +1,26 @@
import { flushSync, tick } from 'svelte';
import { test } from '../../test';
export default test({
compileOptions: {
dev: true
},
html: `<button>a</button><button>b</button><p>pending</p>`,
async test({ assert, target, warnings }) {
await Promise.resolve();
await Promise.resolve();
await Promise.resolve();
await Promise.resolve();
await Promise.resolve();
await Promise.resolve();
await Promise.resolve();
await Promise.resolve();
await tick();
flushSync();
assert.htmlEqual(target.innerHTML, '<button>a</button><button>b</button><h1>3</h1>');
assert.deepEqual(warnings, ['Detected reactivity loss']);
}
});

@ -0,0 +1,19 @@
<script>
let a = $state(1);
let b = $state(2);
async function a_plus_b() {
return await a + await b;
}
</script>
<button onclick={() => a++}>a</button>
<button onclick={() => b++}>b</button>
<svelte:boundary>
<h1>{await a_plus_b()}</h1>
{#snippet pending()}
<p>pending</p>
{/snippet}
</svelte:boundary>
Loading…
Cancel
Save