mirror of https://github.com/sveltejs/svelte
parent
a360023551
commit
75d1e0aef4
@ -0,0 +1,41 @@
|
||||
import { tick } from 'svelte';
|
||||
import { test } from '../../test';
|
||||
|
||||
export default test({
|
||||
async test({ assert, target, logs, warnings }) {
|
||||
await tick();
|
||||
const [increment, independent, resolve_sealed, resolve_latest] =
|
||||
target.querySelectorAll('button');
|
||||
|
||||
for (let i = 0; i < 13; i++) {
|
||||
increment.click();
|
||||
await tick();
|
||||
}
|
||||
|
||||
assert.isTrue(warnings.length === 1 && warnings[0].includes('Your app is stuck in a loop'));
|
||||
|
||||
independent.click();
|
||||
await tick();
|
||||
assert.htmlEqual(
|
||||
target.innerHTML,
|
||||
'<p>0:0:0:0</p><button>increment</button><button>independent</button><button>resolve sealed</button><button>resolve latest</button>'
|
||||
);
|
||||
assert.deepEqual(logs, []);
|
||||
|
||||
resolve_sealed.click();
|
||||
await tick();
|
||||
assert.htmlEqual(
|
||||
target.innerHTML,
|
||||
'<p>11:1:22:22</p><button>increment</button><button>independent</button><button>resolve sealed</button><button>resolve latest</button>'
|
||||
);
|
||||
assert.equal(logs.length, 11);
|
||||
|
||||
resolve_latest.click();
|
||||
await tick();
|
||||
assert.htmlEqual(
|
||||
target.innerHTML,
|
||||
'<p>13:1:26:26</p><button>increment</button><button>independent</button><button>resolve sealed</button><button>resolve latest</button>'
|
||||
);
|
||||
assert.equal(logs.length, 13);
|
||||
}
|
||||
});
|
||||
@ -0,0 +1,28 @@
|
||||
<script>
|
||||
import { settled } from 'svelte';
|
||||
|
||||
let count = $state(0);
|
||||
let independent = $state(0);
|
||||
let doubled = $derived(count * 2);
|
||||
const deferred = new Map();
|
||||
|
||||
function delay(value) {
|
||||
if (value === 0) return value;
|
||||
|
||||
return new Promise((resolve) => {
|
||||
deferred.set(value, () => resolve(value));
|
||||
});
|
||||
}
|
||||
|
||||
async function increment() {
|
||||
count += 1;
|
||||
await settled();
|
||||
console.log('settled');
|
||||
}
|
||||
</script>
|
||||
|
||||
<p>{count}:{independent}:{doubled}:{await delay(doubled)}</p>
|
||||
<button onclick={increment}>increment</button>
|
||||
<button onclick={() => independent++}>independent</button>
|
||||
<button onclick={() => deferred.get(22)?.()}>resolve sealed</button>
|
||||
<button onclick={() => deferred.get(count * 2)?.()}>resolve latest</button>
|
||||
@ -0,0 +1,34 @@
|
||||
import { tick } from 'svelte';
|
||||
import { test } from '../../test';
|
||||
|
||||
export default test({
|
||||
async test({ assert, target, warnings }) {
|
||||
await tick();
|
||||
const [increment, resolve_sealed, resolve_latest] = target.querySelectorAll('button');
|
||||
|
||||
for (let i = 0; i < 13; i++) {
|
||||
increment.click();
|
||||
await tick();
|
||||
}
|
||||
|
||||
assert.isTrue(warnings.length === 1 && warnings[0].includes('Your app is stuck in a loop'));
|
||||
assert.htmlEqual(
|
||||
target.innerHTML,
|
||||
'<p>0:0</p><button>increment</button><button>resolve sealed</button><button>resolve latest</button>'
|
||||
);
|
||||
|
||||
resolve_sealed.click();
|
||||
await tick();
|
||||
assert.htmlEqual(
|
||||
target.innerHTML,
|
||||
'<p>11:11</p><button>increment</button><button>resolve sealed</button><button>resolve latest</button>'
|
||||
);
|
||||
|
||||
resolve_latest.click();
|
||||
await tick();
|
||||
assert.htmlEqual(
|
||||
target.innerHTML,
|
||||
'<p>13:13</p><button>increment</button><button>resolve sealed</button><button>resolve latest</button>'
|
||||
);
|
||||
}
|
||||
});
|
||||
@ -0,0 +1,17 @@
|
||||
<script>
|
||||
let count = $state(0);
|
||||
const deferred = new Map();
|
||||
|
||||
function delay(value) {
|
||||
if (value === 0) return value;
|
||||
|
||||
return new Promise((resolve) => {
|
||||
deferred.set(value, () => resolve(value));
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<p>{count}:{await delay(count)}</p>
|
||||
<button onclick={() => count++}>increment</button>
|
||||
<button onclick={() => deferred.get(11)?.()}>resolve sealed</button>
|
||||
<button onclick={() => deferred.get(count)?.()}>resolve latest</button>
|
||||
Loading…
Reference in new issue