diff --git a/packages/runtime-dom/src/modules/attrs.ts b/packages/runtime-dom/src/modules/attrs.ts index 8218e182fb6..3cc3468a775 100644 --- a/packages/runtime-dom/src/modules/attrs.ts +++ b/packages/runtime-dom/src/modules/attrs.ts @@ -76,12 +76,13 @@ export function compatCoerceAttr( } else if ( value === false && !isSpecialBooleanAttr(key) && - compatUtils.softAssertCompatEnabled( + compatUtils.isCompatEnabled(DeprecationTypes.ATTR_FALSE_VALUE, instance) + ) { + compatUtils.warnDeprecation( 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 d9598be3738..1a873633b85 100644 --- a/packages/vue-compat/__tests__/misc.spec.ts +++ b/packages/vue-compat/__tests__/misc.spec.ts @@ -208,6 +208,31 @@ test('ATTR_FALSE_VALUE', () => { ).toHaveBeenWarned() }) +test("ATTR_FALSE_VALUE with false value shouldn't throw warning", () => { + const vm = new Vue({ + template: `
`, + compatConfig: { + ATTR_FALSE_VALUE: false, + }, + }).$mount() + + expect(vm.$el).toBeInstanceOf(HTMLDivElement) + expect(vm.$el.hasAttribute('id')).toBe(true) + 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() +}) + test('ATTR_ENUMERATED_COERCION', () => { const vm = new Vue({ template: `
`,