From: daiwei Date: Thu, 23 Jan 2025 06:36:52 +0000 (+0800) Subject: test: add tests X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1ca1bba354f3f95bafc7e4afb0fcd015b1284997;p=thirdparty%2Fvuejs%2Fcore.git test: add tests --- diff --git a/packages/compiler-core/__tests__/transforms/vSkip.spec.ts b/packages/compiler-core/__tests__/transforms/vSkip.spec.ts index f7274d724e..595c62f1a2 100644 --- a/packages/compiler-core/__tests__/transforms/vSkip.spec.ts +++ b/packages/compiler-core/__tests__/transforms/vSkip.spec.ts @@ -1,6 +1,7 @@ import { type CompilerOptions, type ElementNode, + type IfNode, NodeTypes, type RootNode, type SimpleExpressionNode, @@ -53,6 +54,181 @@ describe('compiler: v-skip', () => { expect(node.alternate.children[0].type).toBe(NodeTypes.ELEMENT) expect((node.alternate.children[0] as ElementNode).tag).toBe(`div`) }) + + test('with text children', () => { + const { node } = parseWithSkipTransform(`
foo
`) + expect(node.type).toBe(NodeTypes.SKIP) + expect((node.test as SimpleExpressionNode).content).toBe(`ok`) + expect(node.consequent.children.length).toBe(1) + expect(node.consequent.children[0].type).toBe(NodeTypes.TEXT) + expect((node.consequent.children[0] as any).content).toBe(`foo`) + 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`) + }) + + test('with element children', () => { + const { node } = parseWithSkipTransform(`
`) + expect(node.type).toBe(NodeTypes.SKIP) + expect((node.test as SimpleExpressionNode).content).toBe(`ok`) + expect(node.consequent.children.length).toBe(1) + expect(node.consequent.children[0].type).toBe(NodeTypes.ELEMENT) + expect((node.consequent.children[0] as ElementNode).tag).toBe(`span`) + 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`) + }) + + test('with component children', () => { + const { node } = parseWithSkipTransform(`
`) + expect(node.type).toBe(NodeTypes.SKIP) + expect((node.test as SimpleExpressionNode).content).toBe(`ok`) + expect(node.consequent.children.length).toBe(1) + expect(node.consequent.children[0].type).toBe(NodeTypes.ELEMENT) + expect((node.consequent.children[0] as ElementNode).tag).toBe(`Comp`) + 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`) + }) + + test('with multiple children', () => { + const { node } = parseWithSkipTransform( + `
`, + ) + expect(node.type).toBe(NodeTypes.SKIP) + expect((node.test as SimpleExpressionNode).content).toBe(`ok`) + expect(node.consequent.children.length).toBe(2) + expect(node.consequent.children[0].type).toBe(NodeTypes.ELEMENT) + expect((node.consequent.children[0] as ElementNode).tag).toBe(`span`) + expect(node.consequent.children[1].type).toBe(NodeTypes.ELEMENT) + expect((node.consequent.children[1] as ElementNode).tag).toBe(`Comp`) + 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`) + }) + + test('nested v-skip', () => { + const { node } = parseWithSkipTransform( + `
`, + ) + expect(node.type).toBe(NodeTypes.SKIP) + expect((node.test as SimpleExpressionNode).content).toBe(`ok`) + expect(node.consequent.children.length).toBe(1) + expect(node.consequent.children[0].type).toBe(NodeTypes.SKIP) + expect( + ((node.consequent.children[0] as SkipNode).test as SimpleExpressionNode) + .content, + ).toBe(`nested`) + 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`) + }) + + test('v-if + v-skip', () => { + const { node } = parseWithSkipTransform( + `
`, + ) + expect(node.type).toBe(NodeTypes.IF) + const ifNode = node as unknown as IfNode + const branch = ifNode.branches[0] + expect((branch.condition as SimpleExpressionNode).content).toBe(`ok`) + expect(branch.children.length).toBe(1) + // skipNode + expect(branch.children[0].type).toBe(NodeTypes.SKIP) + expect( + ((branch.children[0] as SkipNode).test as SimpleExpressionNode).content, + ).toBe(`nested`) + }) + + test('v-else + v-skip', () => { + const { node } = parseWithSkipTransform( + `
`, + ) + expect(node.type).toBe(NodeTypes.IF) + const elseNode = node as unknown as IfNode + const branch = elseNode.branches[1] + expect(branch.children.length).toBe(1) + // skipNode + expect(branch.children[0].type).toBe(NodeTypes.SKIP) + expect( + ((branch.children[0] as SkipNode).test as SimpleExpressionNode).content, + ).toBe(`nested`) + }) + + test('v-else-if + v-skip', () => { + const { node } = parseWithSkipTransform( + `
`, + ) + expect(node.type).toBe(NodeTypes.IF) + const elseIfNode = node as unknown as IfNode + const branch = elseIfNode.branches[1] + expect((branch.condition as SimpleExpressionNode).content).toBe(`yes`) + expect(branch.children.length).toBe(1) + // skipNode + expect(branch.children[0].type).toBe(NodeTypes.SKIP) + expect( + ((branch.children[0] as SkipNode).test as SimpleExpressionNode).content, + ).toBe(`nested`) + }) + + test('on component', () => { + const { node } = parseWithSkipTransform(``) + expect(node.type).toBe(NodeTypes.SKIP) + expect((node.test as SimpleExpressionNode).content).toBe(`ok`) + expect(node.consequent.children.length).toBe(0) + 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(`Comp`) + }) + + test('on component with default slot', () => { + const { node } = parseWithSkipTransform(`foo`) + expect(node.type).toBe(NodeTypes.SKIP) + expect((node.test as SimpleExpressionNode).content).toBe(`ok`) + expect(node.consequent.children.length).toBe(1) + expect(node.consequent.children[0].type).toBe(NodeTypes.TEXT) + expect((node.consequent.children[0] as any).content).toBe(`foo`) + 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(`Comp`) + }) + + test('on component with multiple named slot', () => { + const { node } = parseWithSkipTransform( + ` + + + `, + ) + expect(node.type).toBe(NodeTypes.SKIP) + expect((node.test as SimpleExpressionNode).content).toBe(`ok`) + expect(node.consequent.children.length).toBe(1) + expect(node.consequent.children[0].type).toBe(NodeTypes.TEXT) + expect((node.consequent.children[0] as any).content).toBe(`default`) + 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(`Comp`) + }) + + test('on component with multiple implicit slot', () => { + const { node } = parseWithSkipTransform( + ` + + +
+ `, + ) + expect(node.type).toBe(NodeTypes.SKIP) + expect((node.test as SimpleExpressionNode).content).toBe(`ok`) + expect(node.consequent.children.length).toBe(2) + expect(node.consequent.children[0].type).toBe(NodeTypes.ELEMENT) + expect((node.consequent.children[0] as ElementNode).tag).toBe(`span`) + expect(node.consequent.children[1].type).toBe(NodeTypes.ELEMENT) + expect((node.consequent.children[1] as ElementNode).tag).toBe(`div`) + 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(`Comp`) + }) }) describe.todo('codegen', () => {})