const compiler = require('../lib')
function assertCodegen (template, templateCode, renderCode = 'with(this){}', options = {}) {
const res = compiler.compile(template, {
resourcePath: 'test.wxml',
mp: Object.assign({
minified: true,
isTest: true,
platform: 'mp-weixin'
}, options)
})
expect(res.template).toBe(templateCode)
if (typeof renderCode === 'function') {
renderCode(res)
} else {
expect(res.render).toBe(renderCode)
}
}
describe('mp:compiler-mp-weixin', () => {
it('generate scoped slot', () => {
assertCodegen(
'{{ bar.foo }}',
'',
function (res) {
expect(res.generic[0]).toBe('test-foo-default')
}
)
assertCodegen(
'{{ bar.foo }}',
'',
function (res) {
expect(res.generic[0]).toBe('test-foo-default')
}
)
assertCodegen(
'日期',
'',
function (res) {
expect(res.generic[0]).toBe('test-uni-clientdb-default')
const wxmlKey = Object.keys(res.files)[0]
expect(res.files[wxmlKey]).toBe(
'日期'
)
}
)
})
it('generate named scoped slot', () => {
assertCodegen(
'{{ bar.foo }}',
'',
function (res) {
expect(res.generic[0]).toBe('test-foo-foo')
}
)
assertCodegen(
'{{ bar.foo }}',
'',
function (res) {
expect(res.generic[0]).toBe('test-foo-foo')
}
)
})
it('generate scoped slot with multiline v-if', () => {
assertCodegen(
'{{ bar.foo }}',
'',
function (res) {
expect(res.generic[0]).toBe('test-foo-default')
}
)
assertCodegen(
'{{ bar.foo }}',
'',
function (res) {
expect(res.generic[0]).toBe('test-foo-foo')
}
)
})
it('generate scoped slot with filter', () => {
assertCodegen(
'{{getValue(item)}}',
'{{$root.m1}}',
'with(this){var m0=$hasScopedSlotsParams("551070e6-1");var m1=m0?getValue($getScopedSlotsParams("551070e6-1","default","item")):null;$mp.data=Object.assign({},{$root:{m0:m0,m1:m1}})}',
{
betterScopedSlots: true
}
)
assertCodegen(
'{{getValue(item.text)}}',
'{{$root.m1}}',
'with(this){var m0=$hasScopedSlotsParams("551070e6-1");var m1=m0?getValue($getScopedSlotsParams("551070e6-1","default").text):null;$mp.data=Object.assign({},{$root:{m0:m0,m1:m1}})}',
{
betterScopedSlots: true
}
)
assertCodegen(
'',
'',
'with(this){$setScopedSlotsParams("default",{"item":item})}',
{
betterScopedSlots: true
}
)
assertCodegen(
'',
'',
'with(this){$setScopedSlotsParams("default",object)}',
{
betterScopedSlots: true
}
)
})
it('generate scoped slot', () => {
assertCodegen(
'',
'',
function (res) {
expect(res.componentGenerics['scoped-slots-default']).toBe(true)
}
)
assertCodegen( // TODO vue-id
'{{ user.lastName }}',
'',
function (res) {
expect(res.componentGenerics['scoped-slots-default']).toBe(true)
}
)
assertCodegen(
'{{ user.lastName }}',
'',
function (res) {
expect(res.componentGenerics['scoped-slots-header']).toBe(true)
}
)
})
it('generate page-meta', () => {
assertCodegen( // TODO vue-id
'',
''
)
})
it('generate v-slot', () => {
assertCodegen(
`
{{label}}
{{label}}
{{label}}
{{label}}
`,
''
)
})
it('generate ObjectExpression', () => {
assertCodegen(
'{{item}}',
'{{item}}'
)
assertCodegen(
'',
''
)
assertCodegen('',
'')
assertCodegen('',
'',
'with(this){var a0={"x":0};$mp.data=Object.assign({},{$root:{a0:a0}})}')
assertCodegen(
'', '',
'with(this){var a0={x:{x:0}};$mp.data=Object.assign({},{$root:{a0:a0}})}'
)
})
it('generate v-show directive', () => {
assertCodegen(
'hello world',
'hello world'
)
})
})