fix some binding tests

pull/1864/head
Rich Harris 7 years ago
parent 2bd3ccc12c
commit 8e6084d135

@ -153,7 +153,8 @@ export default class BindingWrapper {
return {
name: this.node.name,
object: name,
handler: handler,
handler,
snippet,
usesContext: handler.usesContext,
updateDom: updateDom,
initialUpdate: initialUpdate,
@ -281,7 +282,8 @@ function getValueFromDom(
if (name === 'group') {
const bindingGroup = getBindingGroup(renderer, binding.node.expression.node);
if (type === 'checkbox') {
return `@getBindingGroupValue(#component.$$bindingGroups[${bindingGroup}])`;
renderer.component.init_uses_self = true;
return `@getBindingGroupValue($$self.$$bindingGroups[${bindingGroup}])`;
}
return `this.__value`;

@ -540,15 +540,15 @@ export default class ElementWrapper extends Wrapper {
}
});
const allInitialStateIsDefined = group.bindings
.map(binding => `'${binding.object}' in ctx`)
.join(' && ');
const someInitialStateIsUndefined = group.bindings
.map(binding => `${binding.snippet} === void 0`)
.join(' || ');
if (this.node.name === 'select' || group.bindings.find(binding => binding.name === 'indeterminate' || binding.isReadOnlyMediaAttribute)) {
renderer.hasComplexBindings = true;
block.builders.hydrate.addLine(
`if (!(${allInitialStateIsDefined})) #component.$$root._beforecreate.push(${handler});`
`if (${someInitialStateIsUndefined}) @after_render(() => ${callee}.call(${this.var}));`
);
}
@ -556,7 +556,7 @@ export default class ElementWrapper extends Wrapper {
renderer.hasComplexBindings = true;
block.builders.hydrate.addLine(
`#component.$$root._beforecreate.push(${handler});`
`@after_render(() => ${callee}.call(${this.var}));`
);
}
});

@ -14,7 +14,7 @@
</script>
<select bind:value={selected.letter}>
{#each uppercase as letter}
{#each uppercase() as letter}
<option value="{letter}">{letter}</option>
{/each}
</select>

@ -5,6 +5,8 @@ const values = [
];
export default {
solo: 1,
props: {
values,
selected: values[1]
@ -25,18 +27,18 @@ export default {
<p>Beta</p>`,
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 );
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);
const event = new window.Event( 'change' );
const event = new window.Event('change');
inputs[0].checked = true;
inputs[0].dispatchEvent( event );
await inputs[0].dispatchEvent(event);
assert.htmlEqual( target.innerHTML, `
assert.htmlEqual(target.innerHTML, `
<label>
<input type="radio" value="[object Object]"> Alpha
</label>
@ -50,18 +52,18 @@ export default {
</label>
<p>Alpha</p>
` );
`);
assert.equal( inputs[0].checked, true );
assert.equal( inputs[1].checked, false );
assert.equal( inputs[2].checked, false );
assert.equal(inputs[0].checked, true);
assert.equal(inputs[1].checked, false);
assert.equal(inputs[2].checked, false);
component.selected = values[2];
assert.equal( inputs[0].checked, false );
assert.equal( inputs[1].checked, false );
assert.equal( inputs[2].checked, true );
assert.equal(inputs[0].checked, false);
assert.equal(inputs[1].checked, false);
assert.equal(inputs[2].checked, true);
assert.htmlEqual( target.innerHTML, `
assert.htmlEqual(target.innerHTML, `
<label>
<input type="radio" value="[object Object]"> Alpha
</label>
@ -75,6 +77,6 @@ export default {
</label>
<p>Gamma</p>
` );
`);
}
};

Loading…
Cancel
Save