From: daiwei Date: Sun, 26 Jan 2025 03:30:00 +0000 (+0800) Subject: wip: add more test X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=46825ca661d4a737e95dc51fffb28c227ba40185;p=thirdparty%2Fvuejs%2Fcore.git wip: add more test --- diff --git a/packages/compiler-core/__tests__/transforms/__snapshots__/vSkip.spec.ts.snap b/packages/compiler-core/__tests__/transforms/__snapshots__/vSkip.spec.ts.snap index b848eb37d4..15887f6d80 100644 --- a/packages/compiler-core/__tests__/transforms/__snapshots__/vSkip.spec.ts.snap +++ b/packages/compiler-core/__tests__/transforms/__snapshots__/vSkip.spec.ts.snap @@ -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) + } +}" +`; diff --git a/packages/compiler-core/__tests__/transforms/vSkip.spec.ts b/packages/compiler-core/__tests__/transforms/vSkip.spec.ts index 27a681630e..33114486d7 100644 --- a/packages/compiler-core/__tests__/transforms/vSkip.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vSkip.spec.ts @@ -13,6 +13,7 @@ import { type SimpleExpressionNode, type SkipNode, type VNodeCall, + WITH_MEMO, generate, baseParse as parse, transform, @@ -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, @@ -36,6 +38,7 @@ export function parseWithSkipTransform( nodeTransforms: [ transformIf, transformSkip, + transformMemo, transformFor, transformExpression, transformSlotOutlet, @@ -255,6 +258,25 @@ describe('compiler: v-skip', () => { expect(generate(root).code).toMatchSnapshot() }) + test('with v-memo', () => { + const { root, node } = parseWithSkipTransform( + `
`, + ) 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 const { root, node } = parseWithSkipTransform(``) as { diff --git a/packages/compiler-ssr/src/transforms/ssrVSkip.ts b/packages/compiler-ssr/src/transforms/ssrVSkip.ts index 14fce93e10..7f6d101ee8 100644 --- a/packages/compiler-ssr/src/transforms/ssrVSkip.ts +++ b/packages/compiler-ssr/src/transforms/ssrVSkip.ts @@ -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,