]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
test(compiler-vapor): refactor compile
author三咲智子 Kevin Deng <sxzz@sxzz.moe>
Sat, 27 Jan 2024 14:13:34 +0000 (22:13 +0800)
committer三咲智子 Kevin Deng <sxzz@sxzz.moe>
Sat, 27 Jan 2024 14:13:37 +0000 (22:13 +0800)
packages/compiler-vapor/__tests__/transforms/_utils.ts [new file with mode: 0644]
packages/compiler-vapor/__tests__/transforms/vBind.spec.ts
packages/compiler-vapor/__tests__/transforms/vHtml.spec.ts
packages/compiler-vapor/__tests__/transforms/vOn.spec.ts
packages/compiler-vapor/__tests__/transforms/vOnce.spec.ts
packages/compiler-vapor/__tests__/transforms/vText.spec.ts

diff --git a/packages/compiler-vapor/__tests__/transforms/_utils.ts b/packages/compiler-vapor/__tests__/transforms/_utils.ts
new file mode 100644 (file)
index 0000000..0ace066
--- /dev/null
@@ -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 }
+  }
+}
index 6381f18305dd3ec85c168dd1d30bbd01fdeb30d7..9629a9274e5dfb9e1225c1bd177c37b5cf8801c2 100644 (file)
@@ -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', () => {
index bebc1a8007061c82f87457c6ca269ead6d7a37a7..30512bddbe9df6d7f4d434681b5f042137d0df32 100644 (file)
@@ -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', () => {
index 3b2d0c626f96093b6493a34bd9b596e330963f00..80ba34445df42ef2c6637f56904179408edf66c1 100644 (file)
@@ -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', () => {
index d905f3957a0c6463bd2fe87396d5b679c54e580b..12aa08af65ae766c56772a6991d676ea48f68515 100644 (file)
@@ -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(`<div :id="foo" 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([
       {
         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(
       `<div><div :id="foo" v-once /></div>`,
     )
-    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(
       `<div v-once><div v-once/></div>`,
     )
-    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')
index d103f3f1fe4c487e111ea6cb87e634e88f9d0fe0..5285d2a74e18d79a88e1c81e55034d941da2b57b 100644 (file)
@@ -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', () => {