Skip to content

Commit

Permalink
fix invalidate while update
Browse files Browse the repository at this point in the history
  • Loading branch information
tanhauhau authored and Conduitry committed Dec 18, 2019
1 parent 1ef7601 commit 0bb4019
Show file tree
Hide file tree
Showing 5 changed files with 130 additions and 1 deletion.
3 changes: 2 additions & 1 deletion src/runtime/internal/scheduler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,9 @@ function update($$) {
if ($$.fragment !== null) {
$$.update();
run_all($$.before_update);
$$.fragment && $$.fragment.p($$.ctx, $$.dirty);
const dirty = $$.dirty;
$$.dirty = [-1];
$$.fragment && $$.fragment.p($$.ctx, dirty);

$$.after_update.forEach(add_render_callback);
}
Expand Down
44 changes: 44 additions & 0 deletions test/runtime/samples/store-invalidation-while-update-1/_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
export default {
html: `
<input>
<div></div>
<div>simple</div>
<button>click me</button>
`,

async test({ assert, component, target, window }) {
const input = target.querySelector('input');
const button = target.querySelector('button');

const inputEvent = new window.InputEvent('input');
const clickEvent = new window.MouseEvent('click');

input.value = 'foo';
await input.dispatchEvent(inputEvent);

assert.htmlEqual(target.innerHTML, `
<input>
<div>foo</div>
<div>foo</div>
<button>click me</button>
`);

await button.dispatchEvent(clickEvent);
assert.htmlEqual(target.innerHTML, `
<input>
<div>foo</div>
<div>clicked</div>
<button>click me</button>
`);

input.value = 'bar';
await input.dispatchEvent(inputEvent);

assert.htmlEqual(target.innerHTML, `
<input>
<div>bar</div>
<div>bar</div>
<button>click me</button>
`);
}
};
20 changes: 20 additions & 0 deletions test/runtime/samples/store-invalidation-while-update-1/main.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<script>
import {writable} from 'svelte/store';
function action(node, binding) {
return {
update: (value) => s.set(value),
}
}
let s = writable("simple");
let v = "";
function click() {
s.set('clicked');
}
</script>

<input bind:value={v} use:action={v}>
<div>{v}</div>
<div>{$s}</div>
<button on:click={click}>click me</button>
44 changes: 44 additions & 0 deletions test/runtime/samples/store-invalidation-while-update-2/_config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
export default {
html: `
<div></div>
<div>simple</div>
<input>
<button>click me</button>
`,

async test({ assert, component, target, window }) {
const input = target.querySelector('input');
const button = target.querySelector('button');

const inputEvent = new window.InputEvent('input');
const clickEvent = new window.MouseEvent('click');

input.value = 'foo';
await input.dispatchEvent(inputEvent);

assert.htmlEqual(target.innerHTML, `
<div>foo</div>
<div>foo</div>
<input>
<button>click me</button>
`);

await button.dispatchEvent(clickEvent);
assert.htmlEqual(target.innerHTML, `
<div>foo</div>
<div>clicked</div>
<input>
<button>click me</button>
`);

input.value = 'bar';
await input.dispatchEvent(inputEvent);

assert.htmlEqual(target.innerHTML, `
<div>bar</div>
<div>bar</div>
<input>
<button>click me</button>
`);
}
};
20 changes: 20 additions & 0 deletions test/runtime/samples/store-invalidation-while-update-2/main.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<script>
import {writable} from 'svelte/store';
function action(node, binding) {
return {
update: (value) => s.set(value),
}
}
let s = writable("simple");
let v = "";
function click() {
s.set('clicked');
}
</script>

<div>{v}</div>
<div>{$s}</div>
<input bind:value={v} use:action={v}>
<button on:click={click}>click me</button>

0 comments on commit 0bb4019

Please sign in to comment.