mirror of https://github.com/sveltejs/svelte
parent
1644f207b1
commit
5d0f430fd4
@ -0,0 +1,112 @@
|
|||||||
|
export default {
|
||||||
|
html: `
|
||||||
|
<div>
|
||||||
|
<input type="checkbox">
|
||||||
|
<input type="text">
|
||||||
|
<p>one</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="checkbox">
|
||||||
|
<input type="text">
|
||||||
|
<p>two</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="checkbox">
|
||||||
|
<input type="text">
|
||||||
|
<p>three</p>
|
||||||
|
</div>
|
||||||
|
<p>completed 1, remaining 2, total 3</p>
|
||||||
|
`,
|
||||||
|
|
||||||
|
ssrHtml: `
|
||||||
|
<div>
|
||||||
|
<input type="checkbox">
|
||||||
|
<input type="text" value="one">
|
||||||
|
<p>one</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input checked="" type="checkbox">
|
||||||
|
<input type="text" value="two">
|
||||||
|
<p>two</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="checkbox">
|
||||||
|
<input type="text" value="three">
|
||||||
|
<p>three</p>
|
||||||
|
</div>
|
||||||
|
<p>completed 1, remaining 2, total 3</p>
|
||||||
|
`,
|
||||||
|
|
||||||
|
async test({ assert, component, target, window }) {
|
||||||
|
function set_text(i, text) {
|
||||||
|
const input = target.querySelectorAll('input[type="text"]')[i];
|
||||||
|
input.value = text;
|
||||||
|
input.dispatchEvent(new window.Event('input'));
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_done(i, done) {
|
||||||
|
const input = target.querySelectorAll('input[type="checkbox"]')[i];
|
||||||
|
input.checked = done;
|
||||||
|
input.dispatchEvent(new window.Event('change'));
|
||||||
|
}
|
||||||
|
|
||||||
|
component.filter = 'remaining';
|
||||||
|
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div>
|
||||||
|
<input type="checkbox">
|
||||||
|
<input type="text">
|
||||||
|
<p>one</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="checkbox">
|
||||||
|
<input type="text">
|
||||||
|
<p>three</p>
|
||||||
|
</div>
|
||||||
|
<p>completed 1, remaining 2, total 3</p>
|
||||||
|
`);
|
||||||
|
|
||||||
|
await set_text(1, 'four');
|
||||||
|
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div>
|
||||||
|
<input type="checkbox">
|
||||||
|
<input type="text">
|
||||||
|
<p>one</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="checkbox">
|
||||||
|
<input type="text">
|
||||||
|
<p>four</p>
|
||||||
|
</div>
|
||||||
|
<p>completed 1, remaining 2, total 3</p>
|
||||||
|
`);
|
||||||
|
|
||||||
|
await set_done(0, true);
|
||||||
|
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div>
|
||||||
|
<input type="checkbox">
|
||||||
|
<input type="text">
|
||||||
|
<p>four</p>
|
||||||
|
</div>
|
||||||
|
<p>completed 2, remaining 1, total 3</p>
|
||||||
|
`);
|
||||||
|
|
||||||
|
component.filter = 'done';
|
||||||
|
|
||||||
|
assert.htmlEqual(target.innerHTML, `
|
||||||
|
<div>
|
||||||
|
<input type="checkbox">
|
||||||
|
<input type="text">
|
||||||
|
<p>one</p>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<input type="checkbox">
|
||||||
|
<input type="text">
|
||||||
|
<p>two</p>
|
||||||
|
</div>
|
||||||
|
<p>completed 2, remaining 1, total 3</p>
|
||||||
|
`);
|
||||||
|
},
|
||||||
|
};
|
@ -0,0 +1,28 @@
|
|||||||
|
<script>
|
||||||
|
let items = [
|
||||||
|
{ done: false, text: 'one' },
|
||||||
|
{ done: true, text: 'two' },
|
||||||
|
{ done: false, text: 'three' }
|
||||||
|
];
|
||||||
|
export let filter = 'all';
|
||||||
|
|
||||||
|
$: done = items.filter(item => item.done);
|
||||||
|
$: remaining = items.filter(item => !item.done);
|
||||||
|
|
||||||
|
$: filtered = (
|
||||||
|
filter === 'all' ? items :
|
||||||
|
filter === 'done' ? items.filter(item => item.done) :
|
||||||
|
items.filter(item => !item.done)
|
||||||
|
);
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#each filtered as item}
|
||||||
|
<div>
|
||||||
|
<input type="checkbox" bind:checked={item.done}>
|
||||||
|
<input type="text" bind:value={item.text}>
|
||||||
|
<p>{item.text}</p>
|
||||||
|
</div>
|
||||||
|
{/each}
|
||||||
|
|
||||||
|
<p>completed {done.length}, remaining {remaining.length}, total {items.length}</p>
|
Loading…
Reference in new issue