diff --git a/packages/runtime-dom/src/modules/attrs.ts b/packages/runtime-dom/src/modules/attrs.ts index 95e0a1485..55e971c29 100644 --- a/packages/runtime-dom/src/modules/attrs.ts +++ b/packages/runtime-dom/src/modules/attrs.ts @@ -80,13 +80,12 @@ export function compatCoerceAttr( } else if ( value === false && !isSpecialBooleanAttr(key) && - compatUtils.isCompatEnabled(DeprecationTypes.ATTR_FALSE_VALUE, instance) - ) { - compatUtils.warnDeprecation( + compatUtils.softAssertCompatEnabled( DeprecationTypes.ATTR_FALSE_VALUE, instance, key, ) + ) { el.removeAttribute(key) return true } diff --git a/packages/vue-compat/__tests__/misc.spec.ts b/packages/vue-compat/__tests__/misc.spec.ts index 1a873633b..cd2a970bb 100644 --- a/packages/vue-compat/__tests__/misc.spec.ts +++ b/packages/vue-compat/__tests__/misc.spec.ts @@ -158,35 +158,17 @@ test('CUSTOM_DIR', async () => { expect(getCalls()).toMatchObject([1, 1, 0, 0, 0]) - expect( - (deprecationData[DeprecationTypes.CUSTOM_DIR].message as Function)( - 'bind', - 'beforeMount', - ), - ).toHaveBeenWarned() - expect( - (deprecationData[DeprecationTypes.CUSTOM_DIR].message as Function)( - 'inserted', - 'mounted', - ), - ).toHaveBeenWarned() + const message = deprecationData[DeprecationTypes.CUSTOM_DIR] + .message as Function + expect(message('bind', 'beforeMount')).toHaveBeenWarned() + expect(message('inserted', 'mounted')).toHaveBeenWarned() vm.foo++ await nextTick() expect(getCalls()).toMatchObject([1, 1, 1, 1, 0]) - expect( - (deprecationData[DeprecationTypes.CUSTOM_DIR].message as Function)( - 'update', - 'updated', - ), - ).toHaveBeenWarned() - expect( - (deprecationData[DeprecationTypes.CUSTOM_DIR].message as Function)( - 'componentUpdated', - 'updated', - ), - ).toHaveBeenWarned() + expect(message('update', 'updated')).toHaveBeenWarned() + expect(message('componentUpdated', 'updated')).toHaveBeenWarned() }) test('ATTR_FALSE_VALUE', () => { @@ -196,16 +178,28 @@ test('ATTR_FALSE_VALUE', () => { expect(vm.$el).toBeInstanceOf(HTMLDivElement) expect(vm.$el.hasAttribute('id')).toBe(false) expect(vm.$el.hasAttribute('foo')).toBe(false) - expect( - (deprecationData[DeprecationTypes.ATTR_FALSE_VALUE].message as Function)( - 'id', - ), - ).toHaveBeenWarned() - expect( - (deprecationData[DeprecationTypes.ATTR_FALSE_VALUE].message as Function)( - 'foo', - ), - ).toHaveBeenWarned() + + const message = deprecationData[DeprecationTypes.ATTR_FALSE_VALUE] + .message as Function + expect(message('id')).toHaveBeenWarned() + expect(message('foo')).toHaveBeenWarned() +}) + +test(`ATTR_FALSE_VALUE with 'suppress-warning' value shouldn't throw warning`, () => { + const vm = new Vue({ + template: `
`, + compatConfig: { + ATTR_FALSE_VALUE: 'suppress-warning', + }, + }).$mount() + expect(vm.$el).toBeInstanceOf(HTMLDivElement) + expect(vm.$el.hasAttribute('id')).toBe(false) + expect(vm.$el.hasAttribute('foo')).toBe(false) + + const message = deprecationData[DeprecationTypes.ATTR_FALSE_VALUE] + .message as Function + expect(message('id')).not.toHaveBeenWarned() + expect(message('foo')).not.toHaveBeenWarned() }) test("ATTR_FALSE_VALUE with false value shouldn't throw warning", () => { @@ -221,16 +215,11 @@ test("ATTR_FALSE_VALUE with false value shouldn't throw warning", () => { expect(vm.$el.getAttribute('id')).toBe('false') expect(vm.$el.hasAttribute('foo')).toBe(true) expect(vm.$el.getAttribute('foo')).toBe('false') - expect( - (deprecationData[DeprecationTypes.ATTR_FALSE_VALUE].message as Function)( - 'id', - ), - ).not.toHaveBeenWarned() - expect( - (deprecationData[DeprecationTypes.ATTR_FALSE_VALUE].message as Function)( - 'foo', - ), - ).not.toHaveBeenWarned() + + const message = deprecationData[DeprecationTypes.ATTR_FALSE_VALUE] + .message as Function + expect(message('id')).not.toHaveBeenWarned() + expect(message('foo')).not.toHaveBeenWarned() }) test('ATTR_ENUMERATED_COERCION', () => { @@ -242,22 +231,10 @@ test('ATTR_ENUMERATED_COERCION', () => { expect(vm.$el.getAttribute('draggable')).toBe('false') expect(vm.$el.getAttribute('spellcheck')).toBe('true') expect(vm.$el.getAttribute('contenteditable')).toBe('true') - expect( - ( - deprecationData[DeprecationTypes.ATTR_ENUMERATED_COERCION] - .message as Function - )('draggable', null, 'false'), - ).toHaveBeenWarned() - expect( - ( - deprecationData[DeprecationTypes.ATTR_ENUMERATED_COERCION] - .message as Function - )('spellcheck', 0, 'true'), - ).toHaveBeenWarned() - expect( - ( - deprecationData[DeprecationTypes.ATTR_ENUMERATED_COERCION] - .message as Function - )('contenteditable', 'foo', 'true'), - ).toHaveBeenWarned() + + const message = deprecationData[DeprecationTypes.ATTR_ENUMERATED_COERCION] + .message as Function + expect(message('draggable', null, 'false')).toHaveBeenWarned() + expect(message('spellcheck', 0, 'true')).toHaveBeenWarned() + expect(message('contenteditable', 'foo', 'true')).toHaveBeenWarned() }) diff --git a/packages/vue-compat/__tests__/warnDeprecation.spec.ts b/packages/vue-compat/__tests__/warnDeprecation.spec.ts deleted file mode 100644 index 1f3fb88a2..000000000 --- a/packages/vue-compat/__tests__/warnDeprecation.spec.ts +++ /dev/null @@ -1,87 +0,0 @@ -import Vue from '@vue/compat' -import { - DeprecationTypes, - deprecationData, - toggleDeprecationWarning, -} from '../../runtime-core/src/compat/compatConfig' - -beforeEach(() => { - toggleDeprecationWarning(true) - Vue.configureCompat({ - MODE: 2, - GLOBAL_MOUNT: 'suppress-warning', - }) -}) - -afterEach(() => { - toggleDeprecationWarning(false) - Vue.configureCompat({ MODE: 3 }) -}) - -describe('should warn deprecation while using compat', () => { - test('have no compat config', () => { - const vm = new Vue({ - template: `