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 000000000..2ed15283e --- /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 efe55715b..b59ee0c02 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 ,