]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
wip: move compat test cases + filter tests
authorEvan You <yyx990803@gmail.com>
Thu, 29 Apr 2021 20:58:14 +0000 (16:58 -0400)
committerEvan You <yyx990803@gmail.com>
Thu, 29 Apr 2021 20:58:14 +0000 (16:58 -0400)
12 files changed:
packages/compiler-core/src/compat/transformFilter.ts
packages/vue-compat/__tests__/componentAsync.spec.ts [moved from packages/runtime-core/src/compat/__tests__/componentAsync.spec.ts with 96% similarity]
packages/vue-compat/__tests__/componentFunctional.spec.ts [moved from packages/runtime-core/src/compat/__tests__/componentFunctional.spec.ts with 96% similarity]
packages/vue-compat/__tests__/componentVModel.spec.ts [moved from packages/runtime-core/src/compat/__tests__/componentVModel.spec.ts with 91% similarity]
packages/vue-compat/__tests__/filters.spec.ts [new file with mode: 0644]
packages/vue-compat/__tests__/global.spec.ts [moved from packages/runtime-core/src/compat/__tests__/global.spec.ts with 99% similarity]
packages/vue-compat/__tests__/globalConfig.spec.ts [moved from packages/runtime-core/src/compat/__tests__/globalConfig.spec.ts with 94% similarity]
packages/vue-compat/__tests__/instance.spec.ts [moved from packages/runtime-core/src/compat/__tests__/instance.spec.ts with 96% similarity]
packages/vue-compat/__tests__/misc.spec.ts [moved from packages/runtime-core/src/compat/__tests__/misc.spec.ts with 97% similarity]
packages/vue-compat/__tests__/options.spec.ts [moved from packages/runtime-core/src/compat/__tests__/options.spec.ts with 94% similarity]
packages/vue-compat/__tests__/renderFn.spec.ts [moved from packages/runtime-core/src/compat/__tests__/renderFn.spec.ts with 73% similarity]
packages/vue-compat/__tests__/utils.ts [moved from packages/runtime-core/src/compat/__tests__/utils.ts with 100% similarity]

index bd6fd384402a5fa39ecc1c41a241785256c2879f..8eaa81eb3f17dc35fbc4867ff0968644679d4315 100644 (file)
@@ -158,14 +158,13 @@ function parseFilter(node: SimpleExpressionNode, context: TransformContext) {
     lastFilterIndex = i + 1
   }
 
-  if (
-    filters.length &&
-    warnDeprecation(
-      CompilerDeprecationTypes.COMPILER_FILTERS,
-      context,
-      node.loc
-    )
-  ) {
+  if (filters.length) {
+    __DEV__ &&
+      warnDeprecation(
+        CompilerDeprecationTypes.COMPILER_FILTERS,
+        context,
+        node.loc
+      )
     for (i = 0; i < filters.length; i++) {
       expression = wrapFilter(expression, filters[i], context)
     }
similarity index 96%
rename from packages/runtime-core/src/compat/__tests__/componentAsync.spec.ts
rename to packages/vue-compat/__tests__/componentAsync.spec.ts
index 1f6303332da245821ce31fb4ed852e9288e188dc..c7d2a789962f1108daf403815baa449fc5ccc579 100644 (file)
@@ -3,7 +3,7 @@ import {
   DeprecationTypes,
   deprecationData,
   toggleDeprecationWarning
-} from '../compatConfig'
+} from '../../runtime-core/src/compat/compatConfig'
 
 beforeEach(() => {
   toggleDeprecationWarning(true)
similarity index 96%
rename from packages/runtime-core/src/compat/__tests__/componentFunctional.spec.ts
rename to packages/vue-compat/__tests__/componentFunctional.spec.ts
index 5eceaa1d1f35159518f9661e1db3938edb457a97..3d272c586b5dfe87073d79ce3d300bfc50d25a52 100644 (file)
@@ -3,7 +3,7 @@ import {
   DeprecationTypes,
   deprecationData,
   toggleDeprecationWarning
-} from '../compatConfig'
+} from '../../runtime-core/src/compat/compatConfig'
 
 beforeEach(() => {
   toggleDeprecationWarning(true)
similarity index 91%
rename from packages/runtime-core/src/compat/__tests__/componentVModel.spec.ts
rename to packages/vue-compat/__tests__/componentVModel.spec.ts
index ed8dc418b66eed40c7effb9b4c22c3aa74f5d5ed..05043b018d206975e44020c4b1b78770ce4d3a4e 100644 (file)
@@ -1,11 +1,11 @@
 import Vue from '@vue/compat'
-import { ComponentOptions } from '../../component'
-import { nextTick } from '../../scheduler'
+import { ComponentOptions } from '../../runtime-core/src/component'
+import { nextTick } from '../../runtime-core/src/scheduler'
 import {
   DeprecationTypes,
   deprecationData,
   toggleDeprecationWarning
-} from '../compatConfig'
+} from '../../runtime-core/src/compat/compatConfig'
 import { triggerEvent } from './utils'
 
 beforeEach(() => {
diff --git a/packages/vue-compat/__tests__/filters.spec.ts b/packages/vue-compat/__tests__/filters.spec.ts
new file mode 100644 (file)
index 0000000..6730db1
--- /dev/null
@@ -0,0 +1,237 @@
+import Vue from '@vue/compat'
+import { CompilerDeprecationTypes } from '../../compiler-core/src'
+import { toggleDeprecationWarning } from '../../runtime-core/src/compat/compatConfig'
+
+beforeEach(() => {
+  toggleDeprecationWarning(false)
+  Vue.configureCompat({ MODE: 2 })
+})
+
+afterEach(() => {
+  Vue.configureCompat({ MODE: 3 })
+  toggleDeprecationWarning(false)
+})
+
+describe('FILTERS', () => {
+  function upper(v: string) {
+    return v.toUpperCase()
+  }
+
+  function lower(v: string) {
+    return v.toLowerCase()
+  }
+
+  function reverse(v: string) {
+    return v
+      .split('')
+      .reverse()
+      .join('')
+  }
+
+  function double(v: number) {
+    return v * 2
+  }
+
+  it('basic usage', () => {
+    const vm = new Vue({
+      template: '<div>{{ msg | upper }}</div>',
+      data: () => ({
+        msg: 'hi'
+      }),
+      filters: {
+        upper
+      }
+    }).$mount()
+    expect(vm.$el.textContent).toBe('HI')
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('chained usage', () => {
+    const vm = new Vue({
+      template: '<div>{{ msg | upper | reverse }}</div>',
+      data: () => ({
+        msg: 'hi'
+      }),
+      filters: {
+        upper,
+        reverse
+      }
+    }).$mount()
+    expect(vm.$el.textContent).toBe('IH')
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('in v-bind', () => {
+    const vm = new Vue({
+      template: `
+        <div
+          v-bind:id="id | upper | reverse"
+          :class="cls | reverse"
+          :ref="ref | lower">
+        </div>
+      `,
+      filters: {
+        upper,
+        reverse,
+        lower
+      },
+      data: () => ({
+        id: 'abc',
+        cls: 'foo',
+        ref: 'BAR'
+      })
+    }).$mount()
+    expect(vm.$el.id).toBe('CBA')
+    expect(vm.$el.className).toBe('oof')
+    expect(vm.$refs.bar).toBe(vm.$el)
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('handle regex with pipe', () => {
+    const vm = new Vue({
+      template: `<test ref="test" :pattern="/a|b\\// | identity"></test>`,
+      filters: { identity: (v: any) => v },
+      components: {
+        test: {
+          props: ['pattern'],
+          template: '<div></div>'
+        }
+      }
+    }).$mount() as any
+    expect(vm.$refs.test.pattern instanceof RegExp).toBe(true)
+    expect(vm.$refs.test.pattern.toString()).toBe('/a|b\\//')
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('handle division', () => {
+    const vm = new Vue({
+      data: () => ({ a: 2 }),
+      template: `<div>{{ 1/a / 4 | double }}</div>`,
+      filters: { double }
+    }).$mount()
+    expect(vm.$el.textContent).toBe(String(1 / 4))
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('handle division with parenthesis', () => {
+    const vm = new Vue({
+      data: () => ({ a: 20 }),
+      template: `<div>{{ (a*2) / 5 | double }}</div>`,
+      filters: { double }
+    }).$mount()
+    expect(vm.$el.textContent).toBe(String(16))
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('handle division with dot', () => {
+    const vm = new Vue({
+      template: `<div>{{ 20. / 5 | double }}</div>`,
+      filters: { double }
+    }).$mount()
+    expect(vm.$el.textContent).toBe(String(8))
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('handle division with array values', () => {
+    const vm = new Vue({
+      data: () => ({ a: [20] }),
+      template: `<div>{{ a[0] / 5 | double }}</div>`,
+      filters: { double }
+    }).$mount()
+    expect(vm.$el.textContent).toBe(String(8))
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('handle division with hash values', () => {
+    const vm = new Vue({
+      data: () => ({ a: { n: 20 } }),
+      template: `<div>{{ a['n'] / 5 | double }}</div>`,
+      filters: { double }
+    }).$mount()
+    expect(vm.$el.textContent).toBe(String(8))
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('handle division with variable_', () => {
+    const vm = new Vue({
+      data: () => ({ a_: 8 }),
+      template: `<div>{{ a_ / 2 | double }}</div>`,
+      filters: { double }
+    }).$mount()
+    expect(vm.$el.textContent).toBe(String(8))
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('arguments', () => {
+    const vm = new Vue({
+      template: `<div>{{ msg | add(a, 3) }}</div>`,
+      data: () => ({
+        msg: 1,
+        a: 2
+      }),
+      filters: {
+        add: (v: number, arg1: number, arg2: number) => v + arg1 + arg2
+      }
+    }).$mount()
+    expect(vm.$el.textContent).toBe('6')
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('quotes', () => {
+    const vm = new Vue({
+      template: `<div>{{ msg + "b | c" + 'd' | upper }}</div>`,
+      data: () => ({
+        msg: 'a'
+      }),
+      filters: {
+        upper
+      }
+    }).$mount()
+    expect(vm.$el.textContent).toBe('AB | CD')
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('double pipe', () => {
+    const vm = new Vue({
+      template: `<div>{{ b || msg | upper }}</div>`,
+      data: () => ({
+        b: false,
+        msg: 'a'
+      }),
+      filters: {
+        upper
+      }
+    }).$mount()
+    expect(vm.$el.textContent).toBe('A')
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('object literal', () => {
+    const vm = new Vue({
+      template: `<div>{{ { a: 123 } | pick('a') }}</div>`,
+      filters: {
+        pick: (v: any, key: string) => v[key]
+      }
+    }).$mount()
+    expect(vm.$el.textContent).toBe('123')
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('array literal', () => {
+    const vm = new Vue({
+      template: `<div>{{ [1, 2, 3] | reverse }}</div>`,
+      filters: {
+        reverse: (arr: any[]) => arr.reverse().join(',')
+      }
+    }).$mount()
+    expect(vm.$el.textContent).toBe('3,2,1')
+    expect(CompilerDeprecationTypes.COMPILER_FILTERS).toHaveBeenWarned()
+  })
+
+  it('bigint support', () => {
+    const vm = new Vue({
+      template: `<div>{{ BigInt(BigInt(10000000)) + BigInt(2000000000n) * 3000000n }}</div>`
+    }).$mount()
+    expect(vm.$el.textContent).toBe('6000000010000000')
+  })
+})
similarity index 99%
rename from packages/runtime-core/src/compat/__tests__/global.spec.ts
rename to packages/vue-compat/__tests__/global.spec.ts
index cf1bb5143f6aa6d6ba6b589efb8137425e59a715..8b8b066e1ba18ff03ba92aef864c6037a9a9a974 100644 (file)
@@ -4,7 +4,7 @@ import {
   DeprecationTypes,
   deprecationData,
   toggleDeprecationWarning
-} from '../compatConfig'
+} from '../../runtime-core/src/compat/compatConfig'
 
 beforeEach(() => {
   toggleDeprecationWarning(false)
similarity index 94%
rename from packages/runtime-core/src/compat/__tests__/globalConfig.spec.ts
rename to packages/vue-compat/__tests__/globalConfig.spec.ts
index c5084d505501215cbc207f71967a43b79da38f95..b51b30da206a053e24df540197fc63cb95daf429 100644 (file)
@@ -1,5 +1,5 @@
 import Vue from '@vue/compat'
-import { toggleDeprecationWarning } from '../compatConfig'
+import { toggleDeprecationWarning } from '../../runtime-core/src/compat/compatConfig'
 import { triggerEvent } from './utils'
 
 beforeEach(() => {
similarity index 96%
rename from packages/runtime-core/src/compat/__tests__/instance.spec.ts
rename to packages/vue-compat/__tests__/instance.spec.ts
index bddc77e25d4a37efd9ab701c6bc3e2ecb6aa4cb0..74e77225c302816a07a0f46f2b6faf4de3cfa674 100644 (file)
@@ -1,12 +1,12 @@
 import Vue from '@vue/compat'
-import { Slots } from '../../componentSlots'
-import { Text } from '../../vnode'
+import { Slots } from '../../runtime-core/src/componentSlots'
+import { Text } from '../../runtime-core/src/vnode'
 import {
   DeprecationTypes,
   deprecationData,
   toggleDeprecationWarning
-} from '../compatConfig'
-import { LegacyPublicInstance } from '../instance'
+} from '../../runtime-core/src/compat/compatConfig'
+import { LegacyPublicInstance } from '../../runtime-core/src/compat/instance'
 
 beforeEach(() => {
   toggleDeprecationWarning(true)
similarity index 97%
rename from packages/runtime-core/src/compat/__tests__/misc.spec.ts
rename to packages/vue-compat/__tests__/misc.spec.ts
index 8b10c121f4b05dca39936586c58d5ede839aa727..8dc5762c0254d1f3675039287b007562bffca418 100644 (file)
@@ -1,10 +1,10 @@
 import Vue from '@vue/compat'
-import { nextTick } from '../../scheduler'
+import { nextTick } from '../../runtime-core/src/scheduler'
 import {
   DeprecationTypes,
   deprecationData,
   toggleDeprecationWarning
-} from '../compatConfig'
+} from '../../runtime-core/src/compat/compatConfig'
 import { triggerEvent } from './utils'
 
 beforeEach(() => {
similarity index 94%
rename from packages/runtime-core/src/compat/__tests__/options.spec.ts
rename to packages/vue-compat/__tests__/options.spec.ts
index a10d35770628d15852c0336ee29c95b09db7cb92..ca8ea80738100815f6669297d8d06e63b4f349c5 100644 (file)
@@ -1,10 +1,10 @@
 import Vue from '@vue/compat'
-import { nextTick } from '../../scheduler'
+import { nextTick } from '../../runtime-core/src/scheduler'
 import {
   DeprecationTypes,
   deprecationData,
   toggleDeprecationWarning
-} from '../compatConfig'
+} from '../../runtime-core/src/compat/compatConfig'
 
 beforeEach(() => {
   toggleDeprecationWarning(true)
similarity index 73%
rename from packages/runtime-core/src/compat/__tests__/renderFn.spec.ts
rename to packages/vue-compat/__tests__/renderFn.spec.ts
index 7c2059d7fe06f6228aaaf443469b253fee32fd0a..00ad4c239acf780a41ca723cce033878414136a6 100644 (file)
@@ -1,9 +1,28 @@
-import { ShapeFlags } from '@vue/shared/src'
-import { createComponentInstance } from '../../component'
-import { setCurrentRenderingInstance } from '../../componentRenderContext'
-import { DirectiveBinding } from '../../directives'
-import { createVNode } from '../../vnode'
-import { compatH as h } from '../renderFn'
+import { ShapeFlags } from '@vue/shared'
+import Vue from '@vue/compat'
+import { createComponentInstance } from '../../runtime-core/src/component'
+import { setCurrentRenderingInstance } from '../../runtime-core/src/componentRenderContext'
+import { DirectiveBinding } from '../../runtime-core/src/directives'
+import { createVNode } from '../../runtime-core/src/vnode'
+import {
+  deprecationData,
+  DeprecationTypes,
+  toggleDeprecationWarning
+} from '../../runtime-core/src/compat/compatConfig'
+import { compatH as h } from '../../runtime-core/src/compat/renderFn'
+
+beforeEach(() => {
+  toggleDeprecationWarning(false)
+  Vue.configureCompat({
+    MODE: 2,
+    GLOBAL_MOUNT: 'suppress-warning'
+  })
+})
+
+afterEach(() => {
+  toggleDeprecationWarning(false)
+  Vue.configureCompat({ MODE: 3 })
+})
 
 describe('compat: render function', () => {
   const mockDir = {}
@@ -175,4 +194,26 @@ describe('compat: render function', () => {
     ])
     expect(slots.bar()).toMatchObject([{ children: 'two' }])
   })
+
+  test('in component usage', () => {
+    toggleDeprecationWarning(true)
+
+    const vm = new Vue({
+      render(h: any) {
+        return h(
+          'div',
+          {
+            class: 'foo',
+            attrs: { id: 'bar' }
+          },
+          'hello'
+        )
+      }
+    }).$mount()
+
+    expect(vm.$el.outerHTML).toBe(`<div class="foo" id="bar">hello</div>`)
+    expect(
+      deprecationData[DeprecationTypes.RENDER_FUNCTION].message
+    ).toHaveBeenWarned()
+  })
 })