update test

pull/16197/head
Rich Harris 9 months ago
parent 7e0fdb5261
commit ba68a937af

@ -26,6 +26,20 @@ type Assert = typeof import('vitest').assert & {
): void;
};
// TODO remove this shim when we can
// @ts-expect-error
Promise.withResolvers = () => {
let resolve;
let reject;
const promise = new Promise((f, r) => {
resolve = f;
reject = r;
});
return { promise, resolve, reject };
};
export interface RuntimeTest<Props extends Record<string, any> = Record<string, any>>
extends BaseTest {
/** Use e.g. `mode: ['client']` to indicate that this test should never run in server/hydrate modes */

@ -6,7 +6,7 @@ import { test } from '../../test';
let d;
export default test({
html: `<p>pending</p>`,
html: `<button>reset</button><button>true</button><button>false</button><p>pending</p>`,
get props() {
d = deferred();
@ -16,21 +16,31 @@ export default test({
};
},
async test({ assert, target, component }) {
d.resolve(true);
async test({ assert, target }) {
const [reset, t, f] = target.querySelectorAll('button');
flushSync(() => t.click());
await Promise.resolve();
await Promise.resolve();
await tick();
flushSync();
assert.htmlEqual(target.innerHTML, '<h1>yes</h1>');
assert.htmlEqual(
target.innerHTML,
'<button>reset</button><button>true</button><button>false</button><h1>yes</h1>'
);
d = deferred();
component.promise = d.promise;
flushSync(() => reset.click());
await tick();
assert.htmlEqual(target.innerHTML, '<h1>yes</h1>');
assert.htmlEqual(
target.innerHTML,
'<button>reset</button><button>true</button><button>false</button><h1>yes</h1>'
);
d.resolve(false);
flushSync(() => f.click());
await tick();
assert.htmlEqual(target.innerHTML, '<h1>no</h1>');
assert.htmlEqual(
target.innerHTML,
'<button>reset</button><button>true</button><button>false</button><h1>no</h1>'
);
}
});

@ -1,9 +1,13 @@
<script>
let { promise } = $props();
let deferred = $state(Promise.withResolvers());
</script>
<button onclick={() => deferred = Promise.withResolvers()}>reset</button>
<button onclick={() => deferred.resolve(true)}>true</button>
<button onclick={() => deferred.resolve(false)}>false</button>
<svelte:boundary>
{#if await promise}
{#if await deferred.promise}
<h1>yes</h1>
{:else}
<h1>no</h1>

Loading…
Cancel
Save