wip: test for transformExpression
This commit is contained in:
@@ -1,8 +1,93 @@
|
||||
import { compile } from '../../src'
|
||||
import {
|
||||
parse,
|
||||
transform,
|
||||
ExpressionNode,
|
||||
ElementNode,
|
||||
DirectiveNode
|
||||
} from '../../src'
|
||||
import { transformFor } from '../..//src/transforms/vFor'
|
||||
import { transformExpression } from '../../src/transforms/transformExpression'
|
||||
|
||||
test(`should work`, () => {
|
||||
const { code } = compile(`<div>{{ foo }} bar</div>`, {
|
||||
prefixIdentifiers: true
|
||||
function parseWithExpressionTransform(template: string) {
|
||||
const ast = parse(template)
|
||||
transform(ast, {
|
||||
prefixIdentifiers: true,
|
||||
nodeTransforms: [transformFor, transformExpression]
|
||||
})
|
||||
expect(code).toContain(`foo`)
|
||||
return ast.children[0]
|
||||
}
|
||||
|
||||
describe('compiler: expression transform', () => {
|
||||
test('interpolation (root)', () => {
|
||||
const node = parseWithExpressionTransform(`{{ foo }}`) as ExpressionNode
|
||||
expect(node.content).toBe(`_ctx.foo`)
|
||||
})
|
||||
|
||||
test('interpolation (children)', () => {
|
||||
const node = parseWithExpressionTransform(
|
||||
`<div>{{ foo }}</div>`
|
||||
) as ElementNode
|
||||
expect((node.children[0] as ExpressionNode).content).toBe(`_ctx.foo`)
|
||||
})
|
||||
|
||||
test('directive value', () => {
|
||||
const node = parseWithExpressionTransform(
|
||||
`<div v-foo:arg="baz"/>`
|
||||
) as ElementNode
|
||||
expect((node.props[0] as DirectiveNode).arg!.content).toBe(`arg`)
|
||||
expect((node.props[0] as DirectiveNode).exp!.content).toBe(`_ctx.baz`)
|
||||
})
|
||||
|
||||
test('dynamic directive arg', () => {
|
||||
const node = parseWithExpressionTransform(
|
||||
`<div v-foo:[arg]="baz"/>`
|
||||
) as ElementNode
|
||||
expect((node.props[0] as DirectiveNode).arg!.content).toBe(`_ctx.arg`)
|
||||
expect((node.props[0] as DirectiveNode).exp!.content).toBe(`_ctx.baz`)
|
||||
})
|
||||
|
||||
test('should prefix complex expressions', () => {
|
||||
const node = parseWithExpressionTransform(
|
||||
`{{ foo(baz + 1, { key: kuz }) }}`
|
||||
) as ExpressionNode
|
||||
// should parse into compound expression
|
||||
expect(node.children).toMatchObject([
|
||||
{ content: `_ctx.foo` },
|
||||
`(`,
|
||||
{ content: `_ctx.baz` },
|
||||
` + 1, { key: `,
|
||||
{ content: `_ctx.kuz` },
|
||||
` })`
|
||||
])
|
||||
})
|
||||
|
||||
// TODO FIXME
|
||||
test('should not prefix v-for aliases', () => {
|
||||
// const node = parseWithExpressionTransform(`{{ { foo } }}`) as ExpressionNode
|
||||
// expect(node.children).toMatchObject([
|
||||
// `{ foo: `,
|
||||
// { content: `_ctx.foo` },
|
||||
// ` }`
|
||||
// ])
|
||||
})
|
||||
|
||||
test('should prefix id outside of v-for', () => {})
|
||||
|
||||
test('nested v-for', () => {})
|
||||
|
||||
test('should not prefix whitelisted globals', () => {})
|
||||
|
||||
test('should not prefix id of a function declaration', () => {})
|
||||
|
||||
test('should not prefix params of a function expression', () => {
|
||||
// also test object + array destructure
|
||||
})
|
||||
|
||||
test('should not prefix an object property key', () => {})
|
||||
|
||||
test('should prefix a computed object property key', () => {})
|
||||
|
||||
test('should prefix object property shorthand value', () => {})
|
||||
|
||||
test('should not prefix id in a member expression', () => {})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user