make test better; sadly it fails again now

eager-effect-rework
Simon Holthausen 5 months ago
parent 47df6082d9
commit 430f57e82b

@ -3,28 +3,55 @@ import { test } from '../../test';
export default test({
async test({ assert, target }) {
await new Promise((r) => setTimeout(r, 110));
const btn_a = target.querySelector('button.a');
await tick();
const resolve = /** @type {HTMLButtonElement} */ (target.querySelector('button'));
const btn_a = /** @type {HTMLButtonElement} */ (target.querySelector('button.a'));
/** @type {HTMLButtonElement} */ (btn_a).click();
await new Promise((r) => setTimeout(r, 10));
btn_a.click();
await tick();
assert.htmlEqual(
target.innerHTML,
`
<button>resolve</button>
<p>Loading...</p>
<button class="b">/b</button>
`
);
const btn_b = target.querySelector('button.b');
/** @type {HTMLButtonElement} */ (btn_b).click();
await new Promise((r) => setTimeout(r, 10));
const btn_b = /** @type {HTMLButtonElement} */ (target.querySelector('button.b'));
btn_b.click();
await tick();
assert.htmlEqual(
target.innerHTML,
`
<button>resolve</button>
<button class="a">/a</button>
<p>Loading...</p>
`
);
resolve.click();
await tick();
assert.htmlEqual(
target.innerHTML,
`
<button>resolve</button>
<button class="a">/a</button>
<p>Loading...</p>
/a
`
);
resolve.click();
await tick();
assert.htmlEqual(
target.innerHTML,
`
<button>resolve</button>
<button class="a">/a</button>
<button class="b">/b</button>
/b
`
);
}
});

@ -1,16 +1,21 @@
<script>
let href = $state('');
const resolvers = [];
async function load(href) {
function push(value) {
if (!href) return '';
await new Promise(r => setTimeout(r, 100));
return href;
const { promise, resolve } = Promise.withResolvers();
resolvers.push(() => resolve(value));
return promise;
}
const loaded = $derived(await load(href));
const loaded = $derived(await push(href));
</script>
{#if $state.eager(href) === '/a'}
<button onclick={() => resolvers.shift()()}>resolve</button>
{#if $state.eager(href) === '/a' && $state.eager(href) !== href}
<p>Loading...</p>
{:else}
<button class="a" onclick={() => {
@ -18,7 +23,7 @@
}}>/a</button>
{/if}
{#if $state.eager(href) === '/b'}
{#if $state.eager(href) === '/b' && $state.eager(href) !== href}
<p>Loading...</p>
{:else}
<button class="b" onclick={() => {

Loading…
Cancel
Save