mirror of https://github.com/vuejs/core.git
fix(compiler-core): v-for expression missing source with spaces should emit error (#5821)
close #5819
This commit is contained in:
parent
a3e8aafbcc
commit
b9ca202f47
|
@ -202,6 +202,18 @@ describe('compiler: v-for', () => {
|
||||||
expect(forNode.valueAlias).toBeUndefined()
|
expect(forNode.valueAlias).toBeUndefined()
|
||||||
expect((forNode.source as SimpleExpressionNode).content).toBe('items')
|
expect((forNode.source as SimpleExpressionNode).content).toBe('items')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('source containing string expression with spaces', () => {
|
||||||
|
const { node: forNode } = parseWithForTransform(
|
||||||
|
`<span v-for="item in state ['my items']" />`,
|
||||||
|
)
|
||||||
|
expect(forNode.keyAlias).toBeUndefined()
|
||||||
|
expect(forNode.objectIndexAlias).toBeUndefined()
|
||||||
|
expect((forNode.valueAlias as SimpleExpressionNode).content).toBe('item')
|
||||||
|
expect((forNode.source as SimpleExpressionNode).content).toBe(
|
||||||
|
"state ['my items']",
|
||||||
|
)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('errors', () => {
|
describe('errors', () => {
|
||||||
|
@ -253,6 +265,18 @@ describe('compiler: v-for', () => {
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('missing source and have multiple spaces with', () => {
|
||||||
|
const onError = vi.fn()
|
||||||
|
parseWithForTransform('<span v-for="item in " />', { onError })
|
||||||
|
|
||||||
|
expect(onError).toHaveBeenCalledTimes(1)
|
||||||
|
expect(onError).toHaveBeenCalledWith(
|
||||||
|
expect.objectContaining({
|
||||||
|
code: ErrorCodes.X_V_FOR_MALFORMED_EXPRESSION,
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
test('missing value', () => {
|
test('missing value', () => {
|
||||||
const onError = vi.fn()
|
const onError = vi.fn()
|
||||||
parseWithForTransform('<span v-for="in items" />', { onError })
|
parseWithForTransform('<span v-for="in items" />', { onError })
|
||||||
|
|
|
@ -499,4 +499,4 @@ export function getMemoedVNodeCall(node: BlockCodegenNode | MemoExpression) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/
|
export const forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+(\S[\s\S]*)/
|
||||||
|
|
Loading…
Reference in New Issue