Skip to content

Commit

Permalink
wip: add more test
Browse files Browse the repository at this point in the history
  • Loading branch information
edison1105 committed Jan 26, 2025
1 parent 7031b59 commit 46825ca
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -389,3 +389,19 @@ return function render(_ctx, _cache) {
}
}"
`;

exports[`compiler: v-skip > transform > with v-memo 1`] = `
"const _Vue = Vue
return function render(_ctx, _cache) {
with (_ctx) {
const { createElementVNode: _createElementVNode, openBlock: _openBlock, createElementBlock: _createElementBlock, withMemo: _withMemo } = _Vue
return (_ctx.ok)
? (_openBlock(), _createElementBlock("span", { key: 0 }))
: _withMemo([1], () => (_openBlock(), _createElementBlock("div", { key: 1 }, [
(_openBlock(), _createElementBlock("span", { key: 0 }))
])), _cache, 0)
}
}"
`;
22 changes: 22 additions & 0 deletions packages/compiler-core/__tests__/transforms/vSkip.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
type SimpleExpressionNode,
type SkipNode,
type VNodeCall,
WITH_MEMO,
generate,
baseParse as parse,
transform,
Expand All @@ -23,6 +24,7 @@ import { transformIf } from '../../src/transforms/vIf'
import { transformFor } from '../../src/transforms/vFor'
import { transformSlotOutlet } from '../../src/transforms/transformSlotOutlet'
import { transformSkip } from '../../src/transforms/vSkip'
import { transformMemo } from '../../src/transforms/vMemo'

export function parseWithSkipTransform(
template: string,
Expand All @@ -36,6 +38,7 @@ export function parseWithSkipTransform(
nodeTransforms: [
transformIf,
transformSkip,
transformMemo,
transformFor,
transformExpression,
transformSlotOutlet,
Expand Down Expand Up @@ -255,6 +258,25 @@ describe('compiler: v-skip', () => {
expect(generate(root).code).toMatchSnapshot()
})

test('with v-memo', () => {
const { root, node } = parseWithSkipTransform(
`<div v-skip="ok" v-memo="[1]"><span/></div>`,
) as {
root: RootNode
node: SkipNode
}
expect(node.type).toBe(NodeTypes.SKIP)
expect((node.test as SimpleExpressionNode).content).toBe(`_ctx.ok`)
expect(node.alternate.children.length).toBe(1)
expect(node.alternate.children[0].type).toBe(NodeTypes.ELEMENT)
expect((node.alternate.children[0] as ElementNode).tag).toBe(`div`)
const codegenNode = (node.alternate.children[0] as ElementNode)
.codegenNode!
expect(codegenNode.type).toBe(NodeTypes.JS_CALL_EXPRESSION)
expect((codegenNode as any).callee).toBe(WITH_MEMO)
expect(generate(root).code).toMatchSnapshot()
})

test('on component without slot', () => {
// equivalent to <Comp v-if="ok"/>
const { root, node } = parseWithSkipTransform(`<Comp v-skip="ok"/>`) as {
Expand Down
2 changes: 1 addition & 1 deletion packages/compiler-ssr/src/transforms/ssrVSkip.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ export const ssrTransformSkip: NodeTransform =
// for non-skipNode, rewrite the ssrCodegenNode
// `ssrRenderComponent` -> `ssrRenderSkipComponent`
// `ssrRenderVNode` -> `ssrRenderSkipVNode`
if (!skipNode && node && (node as ComponentNode).ssrCodegenNode) {
if (!skipNode && (node as ComponentNode).ssrCodegenNode) {
const {
callee,
arguments: args,
Expand Down

0 comments on commit 46825ca

Please sign in to comment.