compiler-mp-baidu.spec.js 4.9 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
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-baidu'
    }, options)
  })

  expect(res.template).toBe(templateCode)
  expect(res.render).toBe(renderCode)
}

describe('mp:compiler-mp-baidu', () => {
  it('generate v-for directive', () => {
    assertCodegen(
      '<view><view v-for="(item,index) in items" :key="index"></view></view>',
      `<view><block s-for="{{items}}" s-for-item="item" s-for-index="index" s-key="index"><view></view></block></view>`
    )
  })
  it('generate scoped slot', () => {
    assertCodegen(
      '<foo><template slot-scope="bar">{{ bar.foo }}</template></foo>',
fxy060608's avatar
fxy060608 已提交
27
      `<foo vue-id="551070e6-1" vue-slots="{{['default']}}"><view slot="default">{{foo}}</view></foo>`
fxy060608's avatar
fxy060608 已提交
28 29 30
    )
    assertCodegen(
      '<foo><view slot-scope="bar">{{ bar.foo }}</view></foo>',
fxy060608's avatar
fxy060608 已提交
31
      `<foo vue-id="551070e6-1" vue-slots="{{['default']}}"><view slot="default"><view>{{foo}}</view></view></foo>`
fxy060608's avatar
fxy060608 已提交
32 33 34 35 36 37
    )
  })

  it('generate named scoped slot', () => {
    assertCodegen(
      '<foo><template slot="foo" slot-scope="bar">{{ bar.foo }}</template></foo>',
fxy060608's avatar
fxy060608 已提交
38
      `<foo vue-id="551070e6-1" vue-slots="{{['foo']}}"><view slot="foo">{{foo}}</view></foo>`
fxy060608's avatar
fxy060608 已提交
39 40 41
    )
    assertCodegen(
      '<foo><view slot="foo" slot-scope="bar">{{ bar.foo }}</view></foo>',
fxy060608's avatar
fxy060608 已提交
42
      `<foo vue-id="551070e6-1" vue-slots="{{['foo']}}"><view slot="foo"><view>{{foo}}</view></view></foo>`
fxy060608's avatar
fxy060608 已提交
43 44 45 46 47 48
    )
  })

  it('generate scoped slot with multiline v-if', () => {
    assertCodegen(
      '<foo><template v-if="\nshow\n" slot-scope="bar">{{ bar.foo }}</template></foo>',
fxy060608's avatar
fxy060608 已提交
49
      `<foo vue-id="551070e6-1" vue-slots="{{['default']}}"><view slot="default"><block s-if="{{show}}">{{foo}}</block><block s-else><block></block></block></view></foo>`
fxy060608's avatar
fxy060608 已提交
50 51 52
    )
    assertCodegen(
      '<foo><view v-if="\nshow\n" slot="foo" slot-scope="bar">{{ bar.foo }}</view></foo>',
fxy060608's avatar
fxy060608 已提交
53
      `<foo vue-id="551070e6-1" vue-slots="{{['foo']}}"><view slot="foo"><block s-if="{{show}}"><view>{{foo}}</view></block></view></foo>`
fxy060608's avatar
fxy060608 已提交
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
    )
  })

  it('generate scoped slot', () => {
    assertCodegen(
      '<span><slot v-bind:user="user">{{ user.lastName }}</slot></span>',
      `<label class="_span"><block s-if="{{$slots.default}}"><slot name="default" var-user="user"></slot></block><block s-else>{{user.lastName}}</block></label>`
    )
    assertCodegen(
      '<span><slot name="header" v-bind:user="user">{{ user.lastName }}</slot></span>',
      `<label class="_span"><block s-if="{{$slots.header}}"><slot name="header" var-user="user"></slot></block><block s-else>{{user.lastName}}</block></label>`
    )
  })

  it('generate vue id', () => {
    assertCodegen(
      '<Test/>',
fxy060608's avatar
fxy060608 已提交
71
      `<test vue-id="551070e6-1"></test>`
fxy060608's avatar
fxy060608 已提交
72 73 74
    )
    assertCodegen(
      '<Test a="a">',
fxy060608's avatar
fxy060608 已提交
75
      `<test vue-id="551070e6-1" a="a"></test>`
fxy060608's avatar
fxy060608 已提交
76 77 78
    )
    assertCodegen(
      '<view><Test v-for="item in items" :key="item"/></view>',
fxy060608's avatar
fxy060608 已提交
79
      `<view><block s-for="{{items}}" s-for-item="item" s-for-index="__i0__" s-key="*this"><test vue-id="{{'551070e6-1-'+__i0__}}"></test></block></view>`
fxy060608's avatar
fxy060608 已提交
80 81 82
    )
    assertCodegen(
      '<view><Test v-for="item in items" :key="item"><Test v-for="item in item.items" :key="item"></Test></Test></view>',
fxy060608's avatar
fxy060608 已提交
83
      `<view><block s-for="{{items}}" s-for-item="item" s-for-index="__i0__" s-key="*this"><test vue-id="{{'551070e6-1-'+__i0__}}" vue-slots="{{['default']}}"><block s-for="{{item.items}}" s-for-item="item" s-for-index="__i1__" s-key="*this"><test vue-id="{{('551070e6-2-'+__i0__+'-'+__i1__)+','+('551070e6-1-'+__i0__)}}"></test></block></test></block></view>`
fxy060608's avatar
fxy060608 已提交
84 85 86
    )
    assertCodegen(
      '<view><Test v-for="(item,index) in items" :key="item"><Test v-for="(item,index1) in item.items" :key="item"></Test></Test></view>',
fxy060608's avatar
fxy060608 已提交
87
      `<view><block s-for="{{items}}" s-for-item="item" s-for-index="index" s-key="*this"><test vue-id="{{'551070e6-1-'+index}}" vue-slots="{{['default']}}"><block s-for="{{item.items}}" s-for-item="item" s-for-index="index1" s-key="*this"><test vue-id="{{('551070e6-2-'+index+'-'+index1)+','+('551070e6-1-'+index)}}"></test></block></test></block></view>`
fxy060608's avatar
fxy060608 已提交
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110
    )
  })

  it('generate text trim', () => {
    assertCodegen(
      '<text>\nN: {{title}}\n′</text>',
      `<text>{{'N: '+title+"\\\\n′"}}</text>`
    )
    assertCodegen(
      '<text>我是第一行1\n我的第二行</text>',
      `<text>我是第一行1\n我的第二行</text>`
    )
    assertCodegen(
      '<text>我是第一行2\n我的第二行1{{title}}</text>',
      `<text>{{"我是第一行2\\\\n我的第二行1"+title}}</text>`
    )
    assertCodegen(
      `<text>我是第一行3
    我的第二行2{{title}}</text>`,
      `<text>{{"我是第一行3\\\\n    我的第二行2"+title}}</text>`
    )
  })
})