mirror of https://github.com/vuejs/core.git
test: add unit tests for directives
This commit is contained in:
parent
74031bac34
commit
acec2409c7
|
@ -13,9 +13,101 @@ return root
|
||||||
}"
|
}"
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
exports[`comile > directives > v-bind > simple expression 1`] = `
|
||||||
|
"import { watchEffect } from 'vue'
|
||||||
|
import { template, setAttr } from 'vue/vapor'
|
||||||
|
const t0 = template(\`<div></div>\`)
|
||||||
|
export function render() {
|
||||||
|
const root = t0()
|
||||||
|
watchEffect(() => {
|
||||||
|
setAttr(n0, \\"id\\", undefined, id.value)
|
||||||
|
})
|
||||||
|
return root
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`comile > directives > v-html > no expression 1`] = `
|
||||||
|
"import { watchEffect } from 'vue'
|
||||||
|
import { template, setHtml } from 'vue/vapor'
|
||||||
|
const t0 = template(\`<div></div>\`)
|
||||||
|
export function render() {
|
||||||
|
const root = t0()
|
||||||
|
watchEffect(() => {
|
||||||
|
setHtml(n0, undefined, \\"\\")
|
||||||
|
})
|
||||||
|
return root
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`comile > directives > v-html > simple expression 1`] = `
|
||||||
|
"import { watchEffect } from 'vue'
|
||||||
|
import { template, setHtml } from 'vue/vapor'
|
||||||
|
const t0 = template(\`<div></div>\`)
|
||||||
|
export function render() {
|
||||||
|
const root = t0()
|
||||||
|
watchEffect(() => {
|
||||||
|
setHtml(n0, undefined, code.value)
|
||||||
|
})
|
||||||
|
return root
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`comile > directives > v-on > simple expression 1`] = `
|
||||||
|
"import { watchEffect } from 'vue'
|
||||||
|
import { template, on } from 'vue/vapor'
|
||||||
|
const t0 = template(\`<div></div>\`)
|
||||||
|
export function render() {
|
||||||
|
const root = t0()
|
||||||
|
watchEffect(() => {
|
||||||
|
on(n0, \\"click\\", handleClick)
|
||||||
|
})
|
||||||
|
return root
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`comile > directives > v-once 1`] = `
|
||||||
|
"import { template, children, insert, setText, setAttr } from 'vue/vapor'
|
||||||
|
const t0 = template(\`<div> <span></span></div>\`)
|
||||||
|
export function render() {
|
||||||
|
const root = t0()
|
||||||
|
const { 1: [n2],} = children(root)
|
||||||
|
const n1 = document.createTextNode(msg.value)
|
||||||
|
insert(n1, n0, 0 /* InsertPosition.FIRST */)
|
||||||
|
setText(n1, undefined, msg.value)
|
||||||
|
setAttr(n2, \\"class\\", undefined, clz.value)
|
||||||
|
return root
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`comile > directives > v-text > no expression 1`] = `
|
||||||
|
"import { watchEffect } from 'vue'
|
||||||
|
import { template, setText } from 'vue/vapor'
|
||||||
|
const t0 = template(\`<div></div>\`)
|
||||||
|
export function render() {
|
||||||
|
const root = t0()
|
||||||
|
watchEffect(() => {
|
||||||
|
setText(n0, undefined, \\"\\")
|
||||||
|
})
|
||||||
|
return root
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
|
exports[`comile > directives > v-text > simple expression 1`] = `
|
||||||
|
"import { watchEffect } from 'vue'
|
||||||
|
import { template, setText } from 'vue/vapor'
|
||||||
|
const t0 = template(\`<div></div>\`)
|
||||||
|
export function render() {
|
||||||
|
const root = t0()
|
||||||
|
watchEffect(() => {
|
||||||
|
setText(n0, undefined, str.value)
|
||||||
|
})
|
||||||
|
return root
|
||||||
|
}"
|
||||||
|
`;
|
||||||
|
|
||||||
exports[`comile > static template 1`] = `
|
exports[`comile > static template 1`] = `
|
||||||
"import { template } from 'vue/vapor'
|
"import { template } from 'vue/vapor'
|
||||||
const t0 = template(\`<div><p>hello</p><input></div>\`)
|
const t0 = template(\`<div><p>hello</p><input><span></span></div>\`)
|
||||||
export function render() {
|
export function render() {
|
||||||
const root = t0()
|
const root = t0()
|
||||||
return root
|
return root
|
||||||
|
|
|
@ -2,18 +2,18 @@ import { BindingTypes } from '@vue/compiler-dom'
|
||||||
import { compile } from '../src'
|
import { compile } from '../src'
|
||||||
|
|
||||||
describe('comile', () => {
|
describe('comile', () => {
|
||||||
it('static template', () => {
|
test('static template', () => {
|
||||||
const { code } = compile(
|
const { code } = compile(
|
||||||
`<div>
|
`<div>
|
||||||
<p>hello</p>
|
<p>hello</p>
|
||||||
<input />
|
<input />
|
||||||
|
<span />
|
||||||
</div>`,
|
</div>`,
|
||||||
{},
|
|
||||||
)
|
)
|
||||||
expect(code).matchSnapshot()
|
expect(code).matchSnapshot()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('bindings', () => {
|
test('bindings', () => {
|
||||||
const { code } = compile(`<div>{{ count }}</div>`, {
|
const { code } = compile(`<div>{{ count }}</div>`, {
|
||||||
bindingMetadata: {
|
bindingMetadata: {
|
||||||
count: BindingTypes.SETUP_REF,
|
count: BindingTypes.SETUP_REF,
|
||||||
|
@ -21,4 +21,76 @@ describe('comile', () => {
|
||||||
})
|
})
|
||||||
expect(code).matchSnapshot()
|
expect(code).matchSnapshot()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('directives', () => {
|
||||||
|
describe('v-bind', () => {
|
||||||
|
test('simple expression', () => {
|
||||||
|
const { code } = compile(`<div :id="id"></div>`, {
|
||||||
|
bindingMetadata: {
|
||||||
|
id: BindingTypes.SETUP_REF,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
expect(code).matchSnapshot()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('v-on', () => {
|
||||||
|
test('simple expression', () => {
|
||||||
|
const { code } = compile(`<div @click="handleClick"></div>`, {
|
||||||
|
bindingMetadata: {
|
||||||
|
handleClick: BindingTypes.SETUP_CONST,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
expect(code).matchSnapshot()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('v-html', () => {
|
||||||
|
test('simple expression', () => {
|
||||||
|
const { code } = compile(`<div v-html="code"></div>`, {
|
||||||
|
bindingMetadata: {
|
||||||
|
code: BindingTypes.SETUP_REF,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
expect(code).matchSnapshot()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('no expression', () => {
|
||||||
|
const { code } = compile(`<div v-html></div>`)
|
||||||
|
expect(code).matchSnapshot()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('v-text', () => {
|
||||||
|
test('simple expression', () => {
|
||||||
|
const { code } = compile(`<div v-text="str"></div>`, {
|
||||||
|
bindingMetadata: {
|
||||||
|
str: BindingTypes.SETUP_REF,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
expect(code).matchSnapshot()
|
||||||
|
})
|
||||||
|
|
||||||
|
test('no expression', () => {
|
||||||
|
const { code } = compile(`<div v-text></div>`)
|
||||||
|
expect(code).matchSnapshot()
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
test('v-once', () => {
|
||||||
|
const { code } = compile(
|
||||||
|
`<div v-once>
|
||||||
|
{{ msg }}
|
||||||
|
<span :class="clz" />
|
||||||
|
</div>`,
|
||||||
|
{
|
||||||
|
bindingMetadata: {
|
||||||
|
msg: BindingTypes.SETUP_REF,
|
||||||
|
clz: BindingTypes.SETUP_REF,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
)
|
||||||
|
expect(code).matchSnapshot()
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
|
@ -11,7 +11,7 @@ import { generate } from './generate'
|
||||||
// code/AST -> IR -> JS codegen
|
// code/AST -> IR -> JS codegen
|
||||||
export function compile(
|
export function compile(
|
||||||
template: string | RootNode,
|
template: string | RootNode,
|
||||||
options: CompilerOptions,
|
options: CompilerOptions = {},
|
||||||
): CodegenResult {
|
): CodegenResult {
|
||||||
const ast = isString(template) ? baseParse(template, options) : template
|
const ast = isString(template) ? baseParse(template, options) : template
|
||||||
const ir = transform(ast, options)
|
const ir = transform(ast, options)
|
||||||
|
|
Loading…
Reference in New Issue