From 00b97b91b2e1059d81e1a8bf877fdef9f1d9e5d8 Mon Sep 17 00:00:00 2001 From: Th0rN13 Date: Mon, 4 May 2020 10:53:13 +0500 Subject: [PATCH] Add test for repeated bind:group case --- src/runtime/internal/dom.ts | 1 + .../_config.js | 113 ++++++++++++++++++ .../main.svelte | 22 ++++ 3 files changed, 136 insertions(+) create mode 100644 test/runtime/samples/binding-input-checkbox-group-repeated/_config.js create mode 100644 test/runtime/samples/binding-input-checkbox-group-repeated/main.svelte diff --git a/src/runtime/internal/dom.ts b/src/runtime/internal/dom.ts index 7e2b6de9e0..0f4fd8add5 100644 --- a/src/runtime/internal/dom.ts +++ b/src/runtime/internal/dom.ts @@ -124,6 +124,7 @@ export function xlink_attr(node, attribute, value) { node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value); } +// To force uncheck repeated group, need to store old value let oldValue: Set = new Set(); export function get_binding_group_value(group) { diff --git a/test/runtime/samples/binding-input-checkbox-group-repeated/_config.js b/test/runtime/samples/binding-input-checkbox-group-repeated/_config.js new file mode 100644 index 0000000000..2ce5bd4349 --- /dev/null +++ b/test/runtime/samples/binding-input-checkbox-group-repeated/_config.js @@ -0,0 +1,113 @@ +const values = [ + { name: 'Alpha' }, + { name: 'Beta' }, + { name: 'Gamma' } +]; + +export default { + props: { + values, + selected: [values[1]] + }, + + html: ` + + + + + + + + +

Beta

`, + + async test({ assert, component, target, window }) { + const inputs = target.querySelectorAll('input'); + assert.equal(inputs[0].checked, false); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[2].checked, false); + assert.equal(inputs[3].checked, true); + + const event = new window.Event('change'); + + inputs[0].checked = true; + await inputs[0].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + + + + + + + + +

Alpha, Beta

+ `); + + inputs[1].checked = false; + await inputs[1].dispatchEvent(event); + + assert.htmlEqual(target.innerHTML, ` + + + + + + + + +

Alpha

+ `); + + component.selected = [values[0], values[1]]; + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, true); + assert.equal(inputs[0].checked, true); + assert.equal(inputs[1].checked, true); + + assert.htmlEqual(target.innerHTML, ` + + + + + + + + +

Alpha, Beta

+ `); + } +}; diff --git a/test/runtime/samples/binding-input-checkbox-group-repeated/main.svelte b/test/runtime/samples/binding-input-checkbox-group-repeated/main.svelte new file mode 100644 index 0000000000..3921a40f92 --- /dev/null +++ b/test/runtime/samples/binding-input-checkbox-group-repeated/main.svelte @@ -0,0 +1,22 @@ + + + + + + + + + + +

{selected.map( function ( value ) { return value.name; }).join( ', ' ) }

\ No newline at end of file