Skip to content

Commit e9b2737

Browse files
committed
lint + test
1 parent 98b46cb commit e9b2737

File tree

4 files changed

+93
-1
lines changed

4 files changed

+93
-1
lines changed

packages/svelte/src/compiler/phases/3-transform/client/visitors/UseDirective.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,10 @@ import { parse_directive_name } from './shared/utils.js';
1111
export function UseDirective(node, context) {
1212
let action = /** @type {Expression} */ (context.visit(parse_directive_name(node.name)));
1313
if (action.type === 'MemberExpression') {
14-
action = b.maybe_call(b.member(action, 'bind', false, true), /** @type {Expression} */ (action.object));
14+
action = b.maybe_call(
15+
b.member(action, 'bind', false, true),
16+
/** @type {Expression} */ (action.object)
17+
);
1518
}
1619

1720
const get_action = b.arrow([], action);
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<script>
2+
let { action, value } = $props();
3+
</script>
4+
<div use:action={value}></div>
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import { flushSync } from 'svelte';
2+
import { test } from '../../test';
3+
4+
export default test({
5+
html: `<div></div><button>set_action1</button><button>set_action2</button><button>set_null</button><button>increment</button>`,
6+
7+
async test({ assert, target }) {
8+
const [div] = target.querySelectorAll('div');
9+
const [set_action1, set_action2, set_null, increment] = target.querySelectorAll('button');
10+
11+
assert.equal(div.innerText, undefined);
12+
13+
flushSync(() => set_action1.click());
14+
assert.equal(div.innerText, 'action1 value=0');
15+
16+
flushSync(() => increment.click());
17+
assert.equal(div.innerText, 'action1 updated=1');
18+
19+
flushSync(() => set_null.click());
20+
assert.equal(div.innerText, 'action1 destroyed');
21+
22+
flushSync(() => set_action2.click());
23+
assert.equal(div.innerText, '1');
24+
25+
flushSync(() => increment.click());
26+
assert.equal(div.innerText, '2');
27+
28+
flushSync(() => set_null.click());
29+
assert.equal(div.innerText, '');
30+
31+
flushSync(() => increment.click());
32+
assert.equal(div.innerText, '');
33+
34+
flushSync(() => set_action1.click());
35+
assert.equal(div.innerText, 'action1 value=3');
36+
37+
flushSync(() => increment.click());
38+
assert.equal(div.innerText, 'action1 updated=4');
39+
40+
flushSync(() => set_action1.click());
41+
assert.equal(div.innerText, 'action1 updated=4');
42+
43+
flushSync(() => increment.click());
44+
assert.equal(div.innerText, 'action1 updated=5');
45+
46+
flushSync(() => set_action2.click());
47+
assert.equal(div.innerText, '5');
48+
}
49+
});
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<script>
2+
import Child from "./Child.svelte";
3+
4+
let action = $state();
5+
let value = $state(0);
6+
7+
function action1(node, value) {
8+
node.innerText="action1 value=" + value;
9+
return {
10+
update(new_value) {
11+
node.innerText="action1 updated=" + new_value;
12+
},
13+
destroy() {
14+
node.innerText="action1 destroyed";
15+
}
16+
}
17+
}
18+
19+
function action2(node, value) {
20+
node.innerText=value;
21+
return {
22+
update(new_value) {
23+
node.innerText=new_value;
24+
},
25+
destroy() {
26+
node.innerText="";
27+
}
28+
}
29+
}
30+
</script>
31+
32+
<Child {action} {value}/>
33+
<button onclick={()=>action=action1}>set_action1</button>
34+
<button onclick={()=>action=action2}>set_action2</button>
35+
<button onclick={()=>action=null}>set_null</button>
36+
<button onclick={()=>value++}>increment</button>

0 commit comments

Comments
 (0)