adjust test

entangle-batches-2
Simon Holthausen 2 weeks ago
parent 0fa394fec5
commit 8e98c03e25
No known key found for this signature in database

@ -15,15 +15,16 @@ export default test({
`
<button>startA</button>
<button>startB</button>
<button>settleA</button>
<button>settleB</button>
<p>A0/B0</p>
<div><span>1</span><span>2</span></div>
`
);
const [startA, startB, settleB] = target.querySelectorAll('button');
const [startA, startB, settleA, settleB] = target.querySelectorAll('button');
// Batch A: add key 9, then block forever on gate A.
// Batch A: add key 9, then block on gate A.
startA.click();
await tick();
@ -32,18 +33,31 @@ export default test({
await tick();
// Settle B first so B commits while A is still pending.
// Without the fix this throws reading `.e` of undefined and leaves a/b stuck.
settleB.click();
await tick();
assert.htmlEqual(
target.innerHTML,
`
<button>startA</button>
<button>startB</button>
<button>settleA</button>
<button>settleB</button>
<p>A0/B0</p>
<div><span>1</span><span>2</span></div>
`
);
settleA.click();
await tick();
assert.htmlEqual(
target.innerHTML,
`
<button>startA</button>
<button>startB</button>
<button>settleA</button>
<button>settleB</button>
<p>A0/B1</p>
<div></div>
<p>A1/B1</p>
<div><span>9</span></div>
`
);
}

@ -8,6 +8,8 @@
// and are not merged.
const items = $derived(extraKey === null ? base : [...base, extraKey]);
/** @type {((value: string) => void) | undefined} */
let resolveA;
/** @type {((value: string) => void) | undefined} */
let resolveB;
@ -19,7 +21,8 @@
n === 0
? Promise.resolve(`${name}0`)
: new Promise((r) => {
if (name === 'B') resolveB = r;
if (name === 'A') resolveA = r;
else resolveB = r;
});
const a = $derived(await gate('A', tickA));
@ -34,15 +37,12 @@
base = [];
tickB = 1;
}
function settleB() {
resolveB?.('B1');
}
</script>
<button onclick={startA}>startA</button>
<button onclick={startB}>startB</button>
<button onclick={settleB}>settleB</button>
<button onclick={() => resolveA?.('A1')}>settleA</button>
<button onclick={() => resolveB?.('B1')}>settleB</button>
<p>{a}/{b}</p>

Loading…
Cancel
Save