mirror of https://github.com/sveltejs/svelte
fix: binding group with if block (#8373)
Fixes #8372 --------- Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com>pull/8382/head
parent
c7dcfac883
commit
c99dd2e045
@ -0,0 +1,40 @@
|
||||
export default {
|
||||
async test({ assert, target, component, window }) {
|
||||
const button = target.querySelector('button');
|
||||
const clickEvent = new window.Event('click');
|
||||
const changeEvent = new window.Event('change');
|
||||
|
||||
const [input1, input2] = target.querySelectorAll('input[type="checkbox"]');
|
||||
function validate_inputs(v1, v2) {
|
||||
assert.equal(input1.checked, v1);
|
||||
assert.equal(input2.checked, v2);
|
||||
}
|
||||
|
||||
assert.deepEqual(component.test, []);
|
||||
validate_inputs(false, false);
|
||||
|
||||
component.test = ['a', 'b'];
|
||||
validate_inputs(true, true);
|
||||
|
||||
input1.checked = false;
|
||||
await input1.dispatchEvent(changeEvent);
|
||||
assert.deepEqual(component.test, ['b']);
|
||||
|
||||
input2.checked = false;
|
||||
await input2.dispatchEvent(changeEvent);
|
||||
assert.deepEqual(component.test, []);
|
||||
|
||||
input1.checked = true;
|
||||
input2.checked = true;
|
||||
await input1.dispatchEvent(changeEvent);
|
||||
await input2.dispatchEvent(changeEvent);
|
||||
assert.deepEqual(component.test, ['b', 'a']);
|
||||
|
||||
await button.dispatchEvent(clickEvent);
|
||||
assert.deepEqual(component.test, ['b', 'a']); // should it be ['a'] only? valid arguments for both outcomes
|
||||
|
||||
input1.checked = false;
|
||||
await input1.dispatchEvent(changeEvent);
|
||||
assert.deepEqual(component.test, []);
|
||||
}
|
||||
};
|
@ -0,0 +1,14 @@
|
||||
<script>
|
||||
export let test = [];
|
||||
let hidden = false
|
||||
</script>
|
||||
|
||||
<button on:click={() => hidden = !hidden}>
|
||||
{hidden ? "show" : "hide"} b
|
||||
</button>
|
||||
|
||||
<label>a <input type="checkbox" bind:group={test} value="a" /></label>
|
||||
{#if !hidden}
|
||||
<label>b <input type="checkbox" bind:group={test} value="b" /></label>
|
||||
{/if}
|
||||
<label>c <input value="just here, so b is not the last input" /></label>
|
@ -0,0 +1,34 @@
|
||||
export default {
|
||||
async test({ assert, target, component, window }) {
|
||||
const button = target.querySelector('button');
|
||||
const clickEvent = new window.Event('click');
|
||||
const changeEvent = new window.Event('change');
|
||||
|
||||
const [input1, input2] = target.querySelectorAll('input[type="radio"]');
|
||||
function validate_inputs(v1, v2) {
|
||||
assert.equal(input1.checked, v1);
|
||||
assert.equal(input2.checked, v2);
|
||||
}
|
||||
|
||||
component.test = 'a';
|
||||
validate_inputs(true, false);
|
||||
|
||||
component.test = 'b';
|
||||
validate_inputs(false, true);
|
||||
|
||||
input1.checked = true;
|
||||
await input1.dispatchEvent(changeEvent);
|
||||
assert.deepEqual(component.test, 'a');
|
||||
|
||||
input2.checked = true;
|
||||
await input2.dispatchEvent(changeEvent);
|
||||
assert.deepEqual(component.test, 'b');
|
||||
|
||||
await button.dispatchEvent(clickEvent);
|
||||
assert.deepEqual(component.test, 'b'); // should it be undefined? valid arguments for both outcomes
|
||||
|
||||
input1.checked = true;
|
||||
await input1.dispatchEvent(changeEvent);
|
||||
assert.deepEqual(component.test, 'a');
|
||||
}
|
||||
};
|
@ -0,0 +1,14 @@
|
||||
<script>
|
||||
export let test;
|
||||
let hidden = false
|
||||
</script>
|
||||
|
||||
<button on:click={() => hidden = !hidden}>
|
||||
{hidden ? "show" : "hide"} b
|
||||
</button>
|
||||
|
||||
<label>a <input type="radio" bind:group={test} value="a" /></label>
|
||||
{#if !hidden}
|
||||
<label>b <input type="radio" bind:group={test} value="b" /></label>
|
||||
{/if}
|
||||
<label>c <input value="just here, so b is not the last input" /></label>
|
Loading…
Reference in new issue