test: tests for v-on transform

This commit is contained in:
Evan You
2019-09-24 22:39:20 -04:00
parent 597ada36ed
commit 84909648e7
8 changed files with 182 additions and 26 deletions

View File

@@ -56,6 +56,9 @@ export function processExpression(
node: ExpressionNode,
context: TransformContext
) {
if (!context.prefixIdentifiers) {
return
}
// lazy require dependencies so that they don't end up in rollup's dep graph
// and thus can be tree-shaken in browser builds.
const parseScript =
@@ -155,6 +158,9 @@ export function processExpression(
})
if (children.length) {
// mark it empty so that it's more noticeable in case another transform or
// codegen forget to handle `.children` first.
node.content = __DEV__ ? `[[REMOVED]]` : ``
node.children = children
}
}

View File

@@ -1,14 +1,33 @@
import { DirectiveTransform } from '../transform'
import { createObjectProperty, createExpression } from '../ast'
import { createObjectProperty, createExpression, ExpressionNode } from '../ast'
import { capitalize } from '@vue/shared'
import { createCompilerError, ErrorCodes } from '../errors'
import { isSimpleIdentifier } from '../utils'
// v-on without arg is handled directly in ./element.ts due to it affecting
// codegen for the entire props object. This transform here is only for v-on
// *with* args.
export const transformOn: DirectiveTransform = ({ arg, exp, loc }) => {
const eventName = arg!.isStatic
? createExpression(`on${capitalize(arg!.content)}`, true, arg!.loc)
: createExpression(`'on' + (${arg!.content})`, false, arg!.loc)
export const transformOn: DirectiveTransform = ({ arg, exp, loc }, context) => {
if (!exp) {
context.onError(createCompilerError(ErrorCodes.X_V_ON_NO_EXPRESSION, loc))
}
const { content, children, isStatic, loc: argLoc } = arg!
let eventName: ExpressionNode
if (isStatic) {
// static arg
eventName = createExpression(`on${capitalize(content)}`, true, argLoc)
} else if (!children) {
// dynamic arg with no rewrite
eventName = createExpression(
`"on" + ${isSimpleIdentifier(content) ? content : `(${content})`}`,
false,
argLoc
)
} else {
// dynamic arg with ctx prefixing
eventName = arg!
children.unshift(`"on" + `)
}
// TODO .once modifier handling since it is platform agnostic
// other modifiers are handled in compiler-dom
return {