Skip to content

Commit df9c0d0

Browse files
committed
test: add more tests
1 parent ed5fac5 commit df9c0d0

File tree

2 files changed

+89
-1
lines changed

2 files changed

+89
-1
lines changed

packages/compiler-vapor/__tests__/transforms/__snapshots__/transformElement.spec.ts.snap

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
11
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
22

3+
exports[`compiler: element transform > component > cache v-on expression with unique handler name 1`] = `
4+
"import { resolveComponent as _resolveComponent, createComponentWithFallback as _createComponentWithFallback } from 'vue';
5+
6+
export function render(_ctx) {
7+
const _component_Foo = _resolveComponent("Foo")
8+
const _component_Bar = _resolveComponent("Bar")
9+
const _on_bar = $event => (_ctx.handleBar($event))
10+
const n0 = _createComponentWithFallback(_component_Foo, { onBar: () => _on_bar })
11+
const _on_bar1 = () => _ctx.handler
12+
const n1 = _createComponentWithFallback(_component_Bar, { onBar: () => _on_bar1 })
13+
return [n0, n1]
14+
}"
15+
`;
16+
317
exports[`compiler: element transform > component > do not resolve component from non-script-setup bindings 1`] = `
418
"import { resolveComponent as _resolveComponent, createComponentWithFallback as _createComponentWithFallback } from 'vue';
519
@@ -178,6 +192,28 @@ export function render(_ctx) {
178192
}"
179193
`;
180194

195+
exports[`compiler: element transform > component > v-on expression is a function call 1`] = `
196+
"import { resolveComponent as _resolveComponent, createComponentWithFallback as _createComponentWithFallback } from 'vue';
197+
198+
export function render(_ctx) {
199+
const _component_Foo = _resolveComponent("Foo")
200+
const _on_bar = $event => (_ctx.handleBar($event))
201+
const n0 = _createComponentWithFallback(_component_Foo, { onBar: () => _on_bar }, null, true)
202+
return n0
203+
}"
204+
`;
205+
206+
exports[`compiler: element transform > component > v-on expression is inline statement 1`] = `
207+
"import { resolveComponent as _resolveComponent, createComponentWithFallback as _createComponentWithFallback } from 'vue';
208+
209+
export function render(_ctx) {
210+
const _component_Foo = _resolveComponent("Foo")
211+
const _on_bar = () => _ctx.handler
212+
const n0 = _createComponentWithFallback(_component_Foo, { onBar: () => _on_bar }, null, true)
213+
return n0
214+
}"
215+
`;
216+
181217
exports[`compiler: element transform > component > v-on="obj" 1`] = `
182218
"import { resolveComponent as _resolveComponent, toHandlers as _toHandlers, createComponentWithFallback as _createComponentWithFallback } from 'vue';
183219

packages/compiler-vapor/__tests__/transforms/transformElement.spec.ts

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,59 @@ describe('compiler: element transform', () => {
383383
])
384384
})
385385

386-
test('should wrap as function if v-on expression is inline statement', () => {
386+
test('v-on expression is inline statement', () => {
387+
const { code, ir } = compileWithElementTransform(
388+
`<Foo v-on:bar="() => handler" />`,
389+
)
390+
expect(code).toMatchSnapshot()
391+
expect(code).contains(`onBar: () => _on_bar`)
392+
expect(code).contains(
393+
`const _on_bar = () => _ctx.handler`,
394+
)
395+
expect(ir.block.operation).toMatchObject([
396+
{
397+
type: IRNodeTypes.CREATE_COMPONENT_NODE,
398+
tag: 'Foo',
399+
props: [
400+
[
401+
{
402+
key: { content: 'bar' },
403+
handler: true,
404+
values: [{ content: '_on_bar' }],
405+
},
406+
],
407+
],
408+
},
409+
])
410+
})
411+
412+
test('v-on expression is a function call', () => {
413+
const { code, ir } = compileWithElementTransform(
414+
`<Foo v-on:bar="handleBar($event)" />`,
415+
)
416+
expect(code).toMatchSnapshot()
417+
expect(code).contains(`onBar: () => _on_bar`)
418+
expect(code).contains(
419+
`const _on_bar = $event => (_ctx.handleBar($event))`,
420+
)
421+
expect(ir.block.operation).toMatchObject([
422+
{
423+
type: IRNodeTypes.CREATE_COMPONENT_NODE,
424+
tag: 'Foo',
425+
props: [
426+
[
427+
{
428+
key: { content: 'bar' },
429+
handler: true,
430+
values: [{ content: '_on_bar' }],
431+
},
432+
],
433+
],
434+
},
435+
])
436+
})
437+
438+
test('cache v-on expression with unique handler name', () => {
387439
const { code, ir } = compileWithElementTransform(
388440
`<Foo v-on:bar="handleBar($event)" /><Bar v-on:bar="() => handler" />`,
389441
)

0 commit comments

Comments
 (0)