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; ): 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>> export interface RuntimeTest<Props extends Record<string, any> = Record<string, any>>
extends BaseTest { extends BaseTest {
/** Use e.g. `mode: ['client']` to indicate that this test should never run in server/hydrate modes */ /** 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; let d;
export default test({ export default test({
html: `<p>pending</p>`, html: `<button>reset</button><button>true</button><button>false</button><p>pending</p>`,
get props() { get props() {
d = deferred(); d = deferred();
@ -16,21 +16,31 @@ export default test({
}; };
}, },
async test({ assert, target, component }) { async test({ assert, target }) {
d.resolve(true); const [reset, t, f] = target.querySelectorAll('button');
flushSync(() => t.click());
await Promise.resolve(); await Promise.resolve();
await Promise.resolve(); await Promise.resolve();
await tick(); await tick();
flushSync(); 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(); flushSync(() => reset.click());
component.promise = d.promise;
await tick(); 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(); 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> <script>
let { promise } = $props(); let deferred = $state(Promise.withResolvers());
</script> </script>
<button onclick={() => deferred = Promise.withResolvers()}>reset</button>
<button onclick={() => deferred.resolve(true)}>true</button>
<button onclick={() => deferred.resolve(false)}>false</button>
<svelte:boundary> <svelte:boundary>
{#if await promise} {#if await deferred.promise}
<h1>yes</h1> <h1>yes</h1>
{:else} {:else}
<h1>no</h1> <h1>no</h1>

Loading…
Cancel
Save