From: 三咲智子 Kevin Deng Date: Sat, 27 Jan 2024 14:13:34 +0000 (+0800) Subject: test(compiler-vapor): refactor compile X-Git-Tag: v3.6.0-alpha.1~16^2~653 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2b5e8e4df6b00d08dcbf37bcac6be3e8ace752c4;p=thirdparty%2Fvuejs%2Fcore.git test(compiler-vapor): refactor compile --- diff --git a/packages/compiler-vapor/__tests__/transforms/_utils.ts b/packages/compiler-vapor/__tests__/transforms/_utils.ts new file mode 100644 index 0000000000..0ace066db7 --- /dev/null +++ b/packages/compiler-vapor/__tests__/transforms/_utils.ts @@ -0,0 +1,22 @@ +import { type CompilerOptions, generate, parse, transform } from '../../src' + +export function makeCompile(options: CompilerOptions = {}) { + return (template: string, overrideOptions: CompilerOptions = {}) => { + const ast = parse(template, { + prefixIdentifiers: true, + ...options, + ...overrideOptions, + }) + const ir = transform(ast, { + prefixIdentifiers: true, + ...options, + ...overrideOptions, + }) + const { code, helpers, vaporHelpers } = generate(ir, { + prefixIdentifiers: true, + ...options, + ...overrideOptions, + }) + return { ast, ir, code, helpers, vaporHelpers } + } +} diff --git a/packages/compiler-vapor/__tests__/transforms/vBind.spec.ts b/packages/compiler-vapor/__tests__/transforms/vBind.spec.ts index 6381f18305..9629a9274e 100644 --- a/packages/compiler-vapor/__tests__/transforms/vBind.spec.ts +++ b/packages/compiler-vapor/__tests__/transforms/vBind.spec.ts @@ -1,35 +1,13 @@ import { ErrorCodes, NodeTypes } from '@vue/compiler-dom' -import { - type CompilerOptions, - IRNodeTypes, - type RootIRNode, - compile as _compile, - generate, - parse, - transform, - transformElement, - transformVBind, -} from '../../src' - -function compileWithVBind( - template: string, - options: CompilerOptions = {}, -): { - ir: RootIRNode - code: string -} { - const ast = parse(template, { prefixIdentifiers: true, ...options }) - const ir = transform(ast, { - nodeTransforms: [transformElement], - directiveTransforms: { - bind: transformVBind, - }, - prefixIdentifiers: true, - ...options, - }) - const { code } = generate(ir, { prefixIdentifiers: true, ...options }) - return { ir, code } -} +import { IRNodeTypes, transformElement, transformVBind } from '../../src' +import { makeCompile } from './_utils' + +const compileWithVBind = makeCompile({ + nodeTransforms: [transformElement], + directiveTransforms: { + bind: transformVBind, + }, +}) describe('compiler v-bind', () => { test('basic', () => { diff --git a/packages/compiler-vapor/__tests__/transforms/vHtml.spec.ts b/packages/compiler-vapor/__tests__/transforms/vHtml.spec.ts index bebc1a8007..30512bddbe 100644 --- a/packages/compiler-vapor/__tests__/transforms/vHtml.spec.ts +++ b/packages/compiler-vapor/__tests__/transforms/vHtml.spec.ts @@ -1,33 +1,13 @@ -import { - BindingTypes, - DOMErrorCodes, - NodeTypes, - parse, -} from '@vue/compiler-dom' -import { - type CompilerOptions, - IRNodeTypes, - compile as _compile, - generate, - transform, -} from '../../src' -import { getBaseTransformPreset } from '../../src/compile' +import { BindingTypes, DOMErrorCodes, NodeTypes } from '@vue/compiler-dom' +import { IRNodeTypes, transformElement, transformVHtml } from '../../src' +import { makeCompile } from './_utils' -function compileWithVHtml(template: string, options: CompilerOptions = {}) { - const ast = parse(template, { prefixIdentifiers: true, ...options }) - const [nodeTransforms, directiveTransforms] = getBaseTransformPreset(true) - const ir = transform(ast, { - nodeTransforms, - directiveTransforms, - prefixIdentifiers: true, - ...options, - }) - const { code, helpers, vaporHelpers } = generate(ir, { - prefixIdentifiers: true, - ...options, - }) - return { ir, code, helpers, vaporHelpers } -} +const compileWithVHtml = makeCompile({ + nodeTransforms: [transformElement], + directiveTransforms: { + html: transformVHtml, + }, +}) describe('v-html', () => { test('should convert v-html to innerHTML', () => { diff --git a/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts b/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts index 3b2d0c626f..80ba34445d 100644 --- a/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts +++ b/packages/compiler-vapor/__tests__/transforms/vOn.spec.ts @@ -1,31 +1,13 @@ -import { BindingTypes, ErrorCodes, NodeTypes, parse } from '@vue/compiler-dom' -import { - type CompilerOptions, - IRNodeTypes, - compile as _compile, - generate, - transform, -} from '../../src' - -import { transformVOn } from '../../src/transforms/vOn' -import { transformElement } from '../../src/transforms/transformElement' - -function compileWithVOn(template: string, options: CompilerOptions = {}) { - const ast = parse(template, { prefixIdentifiers: true, ...options }) - const ir = transform(ast, { - nodeTransforms: [transformElement], - directiveTransforms: { - on: transformVOn, - }, - prefixIdentifiers: true, - ...options, - }) - const { code, helpers, vaporHelpers } = generate(ir, { - prefixIdentifiers: true, - ...options, - }) - return { ir, code, helpers, vaporHelpers } -} +import { BindingTypes, ErrorCodes, NodeTypes } from '@vue/compiler-dom' +import { IRNodeTypes, transformElement, transformVOn } from '../../src' +import { makeCompile } from './_utils' + +const compileWithVOn = makeCompile({ + nodeTransforms: [transformElement], + directiveTransforms: { + on: transformVOn, + }, +}) describe('v-on', () => { test('simple expression', () => { diff --git a/packages/compiler-vapor/__tests__/transforms/vOnce.spec.ts b/packages/compiler-vapor/__tests__/transforms/vOnce.spec.ts index d905f3957a..12aa08af65 100644 --- a/packages/compiler-vapor/__tests__/transforms/vOnce.spec.ts +++ b/packages/compiler-vapor/__tests__/transforms/vOnce.spec.ts @@ -1,28 +1,13 @@ -import { BindingTypes, NodeTypes, parse } from '@vue/compiler-dom' -import { - type CompilerOptions, - IRNodeTypes, - compile as _compile, - generate as generate, - transform, -} from '../../src' +import { BindingTypes, NodeTypes } from '@vue/compiler-dom' +import { IRNodeTypes } from '../../src' import { getBaseTransformPreset } from '../../src/compile' +import { makeCompile } from './_utils' -function compileWithOnce(template: string, options: CompilerOptions = {}) { - const ast = parse(template, { prefixIdentifiers: true, ...options }) - const [nodeTransforms, directiveTransforms] = getBaseTransformPreset(true) - const ir = transform(ast, { - nodeTransforms, - directiveTransforms, - prefixIdentifiers: true, - ...options, - }) - const { code, helpers, vaporHelpers } = generate(ir, { - prefixIdentifiers: true, - ...options, - }) - return { ir, code, helpers, vaporHelpers } -} +const [nodeTransforms, directiveTransforms] = getBaseTransformPreset(true) +const compileWithOnce = makeCompile({ + nodeTransforms, + directiveTransforms, +}) describe('compiler: v-once', () => { test('basic', () => { @@ -38,9 +23,10 @@ describe('compiler: v-once', () => { }, }, ) - expect(helpers.size).toBe(0) - expect(ir.effect).toEqual([]) + expect(code).toMatchSnapshot() + expect(helpers).lengthOf(0) + expect(ir.effect).lengthOf(0) expect(ir.operation).toMatchObject([ { id: 1, @@ -80,16 +66,14 @@ describe('compiler: v-once', () => { parent: 3, }, ]) - - expect(code).toMatchSnapshot() }) test('as root node', () => { const { ir, code, helpers } = compileWithOnce(`
`) - expect(helpers.size).toBe(0) - expect(ir.effect).toEqual([]) - + expect(code).toMatchSnapshot() + expect(helpers).lengthOf(0) + expect(ir.effect).lengthOf(0) expect(ir.operation).toMatchObject([ { type: IRNodeTypes.SET_PROP, @@ -106,8 +90,6 @@ describe('compiler: v-once', () => { }, }, ]) - - expect(code).toMatchSnapshot() expect(code).not.contains('effect') }) @@ -115,9 +97,10 @@ describe('compiler: v-once', () => { const { ir, code, helpers } = compileWithOnce( `
`, ) - expect(helpers.size).toBe(0) - expect(ir.effect).toEqual([]) + expect(code).toMatchSnapshot() + expect(helpers).lengthOf(0) + expect(ir.effect).lengthOf(0) expect(ir.operation).toMatchObject([ { type: IRNodeTypes.SET_PROP, @@ -135,8 +118,6 @@ describe('compiler: v-once', () => { }, }, ]) - - expect(code).toMatchSnapshot() }) test.todo('on component') @@ -146,11 +127,11 @@ describe('compiler: v-once', () => { const { ir, code, helpers } = compileWithOnce( `
`, ) - expect(helpers.size).toBe(0) - expect(ir.effect).toMatchObject([]) - expect(ir.operation).toMatchObject([]) expect(code).toMatchSnapshot() + expect(helpers).lengthOf(0) + expect(ir.effect).lengthOf(0) + expect(ir.operation).lengthOf(0) }) test.todo('with hoistStatic: true') diff --git a/packages/compiler-vapor/__tests__/transforms/vText.spec.ts b/packages/compiler-vapor/__tests__/transforms/vText.spec.ts index d103f3f1fe..5285d2a74e 100644 --- a/packages/compiler-vapor/__tests__/transforms/vText.spec.ts +++ b/packages/compiler-vapor/__tests__/transforms/vText.spec.ts @@ -1,33 +1,13 @@ -import { - BindingTypes, - DOMErrorCodes, - NodeTypes, - parse, -} from '@vue/compiler-dom' -import { - type CompilerOptions, - IRNodeTypes, - compile as _compile, - generate, - transform, -} from '../../src' -import { getBaseTransformPreset } from '../../src/compile' +import { BindingTypes, DOMErrorCodes, NodeTypes } from '@vue/compiler-dom' +import { IRNodeTypes, transformElement, transformVText } from '../../src' +import { makeCompile } from './_utils' -function compileWithVText(template: string, options: CompilerOptions = {}) { - const ast = parse(template, { prefixIdentifiers: true, ...options }) - const [nodeTransforms, directiveTransforms] = getBaseTransformPreset(true) - const ir = transform(ast, { - nodeTransforms, - directiveTransforms, - prefixIdentifiers: true, - ...options, - }) - const { code, helpers, vaporHelpers } = generate(ir, { - prefixIdentifiers: true, - ...options, - }) - return { ir, code, helpers, vaporHelpers } -} +const compileWithVText = makeCompile({ + nodeTransforms: [transformElement], + directiveTransforms: { + text: transformVText, + }, +}) describe('v-text', () => { test('should convert v-text to textContent', () => {