From: Cr <631807682@qq.com> Date: Tue, 15 Oct 2019 16:23:38 +0000 (+0800) Subject: feat(vModel): warn if v-model is used on file input (#295) X-Git-Tag: v3.0.0-alpha.0~423 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=8eba1aba087dccf85c10f29bdf7e78b015012a8b;p=thirdparty%2Fvuejs%2Fcore.git feat(vModel): warn if v-model is used on file input (#295) --- diff --git a/packages/compiler-dom/__tests__/transforms/vModel.spec.ts b/packages/compiler-dom/__tests__/transforms/vModel.spec.ts new file mode 100644 index 0000000000..2ed15283ee --- /dev/null +++ b/packages/compiler-dom/__tests__/transforms/vModel.spec.ts @@ -0,0 +1,28 @@ +import { parse, transform, CompilerOptions } from '@vue/compiler-core' +import { transformModel } from '../../src/transforms/vModel' +import { transformElement } from '../../../compiler-core/src/transforms/transformElement' +import { DOMErrorCodes } from '../../src/errors' + +function transformWithModel(template: string, options: CompilerOptions = {}) { + const ast = parse(template) + transform(ast, { + nodeTransforms: [transformElement], + directiveTransforms: { + model: transformModel + }, + ...options + }) + return ast +} + +describe('compiler: v-model transform', () => { + it('should raise error if used file input element', () => { + const onError = jest.fn() + transformWithModel(``, { + onError + }) + expect(onError.mock.calls).toMatchObject([ + [{ code: DOMErrorCodes.X_V_MODEL_ON_FILE_INPUT_ELEMENT }] + ]) + }) +}) diff --git a/packages/compiler-dom/src/errors.ts b/packages/compiler-dom/src/errors.ts index efe55715b6..b59ee0c02e 100644 --- a/packages/compiler-dom/src/errors.ts +++ b/packages/compiler-dom/src/errors.ts @@ -26,7 +26,8 @@ export const enum DOMErrorCodes { X_V_TEXT_NO_EXPRESSION, X_V_TEXT_WITH_CHILDREN, X_V_MODEL_ON_INVALID_ELEMENT, - X_V_MODEL_ARG_ON_ELEMENT + X_V_MODEL_ARG_ON_ELEMENT, + X_V_MODEL_ON_FILE_INPUT_ELEMENT } export const DOMErrorMessages: { [code: number]: string } = { @@ -35,5 +36,6 @@ export const DOMErrorMessages: { [code: number]: string } = { [DOMErrorCodes.X_V_TEXT_NO_EXPRESSION]: `v-text is missing expression.`, [DOMErrorCodes.X_V_TEXT_WITH_CHILDREN]: `v-text will override element children.`, [DOMErrorCodes.X_V_MODEL_ON_INVALID_ELEMENT]: `v-model can only be used on ,