compiler-extra.spec.js 53.5 KB
Newer Older
fxy060608's avatar
fxy060608 已提交
1 2
const compiler = require('../lib')

fxy060608's avatar
fxy060608 已提交
3
function assertCodegen (template, templateCode, renderCode = 'with(this){}', options = {}, mpOptions = {}) {
4
  const res = compiler.compile(template, Object.assign({
fxy060608's avatar
fxy060608 已提交
5 6 7 8 9 10 11 12 13 14 15 16
    resourcePath: 'test.wxml',
    mp: Object.assign({
      minified: true,
      isTest: true,
      platform: 'mp-weixin'
    }, mpOptions)
  }, options))

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

17
describe('mp:compiler-extra', () => {
18 19 20
  it('generate mp filter ', () => {
    assertCodegen(
      /* eslint-disable no-template-curly-in-string */
fxy060608's avatar
fxy060608 已提交
21 22
      '<view @touchmove="a.touchmove">{{t.a}}{{t[\'a\']}}{{t.a(b)}}{{t[\'a\'](b)}}{{u.t.a(b)}}{{u.t.a}}</view>',
      '<view bindtouchmove="{{a.touchmove}}">{{t.a+t[\'a\']+t.a(b)+t[\'a\'](b)+$root.g0+u.t.a}}</view>',
23
      'with(this){var g0=u.t.a(b);$mp.data=Object.assign({},{$root:{g0:g0}})}', {
24 25 26 27
        filterModules: {
          t: {},
          a: {}
        }
28 29
      }
    )
30 31 32 33 34 35 36 37 38 39 40
    assertCodegen(
      /* eslint-disable no-template-curly-in-string */
      '<view v-for="(item, index) in a.test()" :key="index">{{item}}</view>',
      '<block wx:for="{{a.test()}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view>{{item}}</view></block>',
      'with(this){}', {
        filterModules: {
          t: {},
          a: {}
        }
      }
    )
41 42
  })

fxy060608's avatar
fxy060608 已提交
43 44 45
  it('generate scopeId', () => {
    assertCodegen(
      '<view></view>',
fxy060608's avatar
fxy060608 已提交
46
      '<view class="data-v-1"></view>',
fxy060608's avatar
fxy060608 已提交
47 48 49 50 51 52
      undefined, {
        scopeId: 'data-v-1'
      }
    )
    assertCodegen(
      '<view class="view"></view>',
fxy060608's avatar
fxy060608 已提交
53
      '<view class="view data-v-2"></view>',
fxy060608's avatar
fxy060608 已提交
54 55 56 57 58 59
      undefined, {
        scopeId: 'data-v-2'
      }
    )
    assertCodegen(
      '<view :class="[{ active: isActive }, errorClass]"></view>',
fxy060608's avatar
fxy060608 已提交
60
      '<view class="{{[\'data-v-3\',[(isActive)?\'active\':\'\'],errorClass]}}"></view>',
fxy060608's avatar
fxy060608 已提交
61 62 63 64 65 66
      undefined, {
        scopeId: 'data-v-3'
      }
    )
    assertCodegen(
      '<view class="static" :class="[{ active: isActive }, errorClass]"></view>',
67
      '<view class="{{[\'static\',\'data-v-4\',[(isActive)?\'active\':\'\'],errorClass]}}"></view>',
fxy060608's avatar
fxy060608 已提交
68 69 70 71 72 73
      undefined, {
        scopeId: 'data-v-4'
      }
    )
    assertCodegen(
      '<view ref="ref" :class="[{ active: isActive }, errorClass]"></view>',
74
      '<view data-ref="ref" class="{{[\'data-v-5\',\'vue-ref\',[(isActive)?\'active\':\'\'],errorClass]}}"></view>',
fxy060608's avatar
fxy060608 已提交
75 76 77 78 79 80
      undefined, {
        scopeId: 'data-v-5'
      }
    )
    assertCodegen(
      '<view :class="view"></view>',
fxy060608's avatar
fxy060608 已提交
81
      '<view class="{{[\'data-v-6\',view]}}"></view>',
fxy060608's avatar
fxy060608 已提交
82 83 84 85 86 87 88 89 90 91 92 93 94
      undefined, {
        scopeId: 'data-v-6'
      }
    )
    //     assertCodegen(
    //       '<view :class="view"></view>',
    //       `<view class="{{$root.c0}}"></view>`,
    //       `with(this){var c0=__get_class(view,"data-v-6");$mp.data=Object.assign({},{$root:{c0:c0}})}`, {
    //         scopeId: 'data-v-6'
    //       }
    //     )
    assertCodegen(
      '<view :class="view" class="view"></view>',
95
      '<view class="{{[\'view\',\'data-v-7\',view]}}"></view>',
fxy060608's avatar
fxy060608 已提交
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
      undefined, {
        scopeId: 'data-v-7'
      }
    )
    //         assertCodegen(
    //             '<view :class="view" class="view"></view>',
    //             `<view class="{{$root.c0}}"></view>`,
    //             `with(this){var c0=__get_class(view,"view data-v-7");$mp.data=Object.assign({},{$root:{c0:c0}})}`, {
    //                 scopeId: 'data-v-7'
    //             }
    //         )
  })

  it('generate staticStyle upx and px', () => {
    assertCodegen(
      '<view style="height:100upx;width:100upx;">text</view>',
fxy060608's avatar
fxy060608 已提交
112
      '<view style="height:100rpx;width:100rpx;">text</view>'
fxy060608's avatar
fxy060608 已提交
113 114 115
    )
    assertCodegen(
      '<view style="height:100upx;width:100rpx;">text</view>',
fxy060608's avatar
fxy060608 已提交
116
      '<view style="height:100rpx;width:100rpx;">text</view>'
fxy060608's avatar
fxy060608 已提交
117 118 119
    )
    assertCodegen(
      '<view style="height:100px;width:100px;">text</view>',
fxy060608's avatar
fxy060608 已提交
120
      '<view style="height:100px;width:100px;">text</view>'
fxy060608's avatar
fxy060608 已提交
121 122 123
    )
    assertCodegen(
      '<view style="height:100px;width:100px;">text</view>',
fxy060608's avatar
fxy060608 已提交
124
      '<view style="height:100rpx;width:100rpx;">text</view>',
fxy060608's avatar
fxy060608 已提交
125 126 127 128 129 130 131 132 133 134
      undefined,
      undefined, {
        transformPx: true
      }
    )
  })

  it('generate text trim', () => {
    assertCodegen(
      '<view>text</view>',
fxy060608's avatar
fxy060608 已提交
135
      '<view>text</view>'
fxy060608's avatar
fxy060608 已提交
136 137 138 139
    )

    assertCodegen(
      '<view> text </view>',
fxy060608's avatar
fxy060608 已提交
140
      '<view>text</view>'
fxy060608's avatar
fxy060608 已提交
141 142 143
    )

    assertCodegen(
fxy060608's avatar
fxy060608 已提交
144 145
      '<text>{{line_one_cn+\' \'}}</text>',
      '<text>{{line_one_cn+\' \'}}</text>'
fxy060608's avatar
fxy060608 已提交
146 147 148
    )

    assertCodegen(
fxy060608's avatar
fxy060608 已提交
149 150
      '<text>{{" "+line_one_cn}}</text>',
      '<text>{{" "+line_one_cn}}</text>'
fxy060608's avatar
fxy060608 已提交
151 152 153 154
    )

    assertCodegen(
      '<text>\nN: {{title}}\n′</text>',
fxy060608's avatar
fxy060608 已提交
155
      '<text>{{\'N: \'+title+"\\n′"}}</text>'
fxy060608's avatar
fxy060608 已提交
156 157 158
    )
    assertCodegen(
      '<text>我是第一行\n我的第二行</text>',
fxy060608's avatar
fxy060608 已提交
159
      '<text>我是第一行\n我的第二行</text>'
fxy060608's avatar
fxy060608 已提交
160 161 162
    )
    assertCodegen(
      '<text>我是第一行\n我的第二行1{{title}}</text>',
fxy060608's avatar
fxy060608 已提交
163
      '<text>{{"我是第一行\\n我的第二行1"+title}}</text>'
fxy060608's avatar
fxy060608 已提交
164 165 166 167
    )
    assertCodegen(
      `<text>我是第一行
我的第二行2{{title}}</text>`,
fxy060608's avatar
fxy060608 已提交
168
      '<text>{{"我是第一行\\n我的第二行2"+title}}</text>'
fxy060608's avatar
fxy060608 已提交
169 170 171 172
    )

    assertCodegen(
      '<view> text text </view>',
fxy060608's avatar
fxy060608 已提交
173
      '<view>text text</view>'
fxy060608's avatar
fxy060608 已提交
174 175 176
    )
    assertCodegen(
      '<view>text {{text}} text</view>',
fxy060608's avatar
fxy060608 已提交
177
      '<view>{{"text "+text+" text"}}</view>'
fxy060608's avatar
fxy060608 已提交
178 179 180 181 182 183 184
    )
    //         assertCodegen(
    //             '<view>text {{text}} \ntext</view>',
    //             `<view>{{"text " + text + " \ntext"}}</view>`
    //         )
    assertCodegen(
      '<view> text {{text}} 文本 </view>',
fxy060608's avatar
fxy060608 已提交
185
      '<view>{{\'text \'+text+\' 文本\'}}</view>'
fxy060608's avatar
fxy060608 已提交
186 187 188
    )
    assertCodegen(
      '<view>{{text}} text  text </view>',
fxy060608's avatar
fxy060608 已提交
189
      '<view>{{text+\' text  text\'}}</view>'
fxy060608's avatar
fxy060608 已提交
190 191 192
    )
    assertCodegen(
      '<view>  {{text}} text  text </view>',
fxy060608's avatar
fxy060608 已提交
193
      '<view>{{\'\'+text+\' text  text\'}}</view>'
fxy060608's avatar
fxy060608 已提交
194 195 196
    )
    assertCodegen(
      '<view>{{text}} text  text {{text}}</view>',
fxy060608's avatar
fxy060608 已提交
197
      '<view>{{text+" text  text "+text}}</view>'
fxy060608's avatar
fxy060608 已提交
198 199 200
    )
    assertCodegen(
      '<view>  {{text}} text  text {{text}}  </view>',
fxy060608's avatar
fxy060608 已提交
201
      '<view>{{\'\'+text+" text  text "+text+\'\'}}</view>'
fxy060608's avatar
fxy060608 已提交
202 203 204 205 206 207
    )
  })

  it('generate default slot', () => {
    assertCodegen(
      '<component1>text</component1>',
fxy060608's avatar
fxy060608 已提交
208
      '<component1 vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'default\']}}">text</component1>'
fxy060608's avatar
fxy060608 已提交
209 210 211
    )
    assertCodegen(
      '<component1>text<text>123213</text></component1>',
fxy060608's avatar
fxy060608 已提交
212
      '<component1 vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'default\']}}">text<text>123213</text></component1>'
fxy060608's avatar
fxy060608 已提交
213 214 215
    )
    assertCodegen(
      '<component1>text<block slot="right"></block></component1>',
fxy060608's avatar
fxy060608 已提交
216
      '<component1 vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'default\',\'right\']}}">text<view slot="right"></view></component1>'
fxy060608's avatar
fxy060608 已提交
217 218 219 220 221 222
    )
  })

  it('generate input value', () => {
    assertCodegen(
      '<input type="text" value="" />',
fxy060608's avatar
fxy060608 已提交
223
      '<input type="text" value=""/>'
fxy060608's avatar
fxy060608 已提交
224 225 226
    )
  })

227 228 229
  it('generate v-slot', () => {
    assertCodegen(
      '<view><template></template></view>',
fxy060608's avatar
fxy060608 已提交
230
      '<view></view>'
231
    )
fxy060608's avatar
fxy060608 已提交
232 233 234

    assertCodegen(
      '<component1><template slot="f">f</template><template slot="c">c</template>默认</component1>',
fxy060608's avatar
fxy060608 已提交
235
      '<component1 vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'default\',\'f\',\'c\']}}"><view slot="f">f</view><view slot="c">c</view>默认</component1>'
fxy060608's avatar
fxy060608 已提交
236 237 238 239
    )

    assertCodegen(
      '<component1 v-slot>text</component1>',
240
      '<component1 vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'default\']}}"><block>text</block></component1>'
fxy060608's avatar
fxy060608 已提交
241 242 243 244
    )

    assertCodegen(
      '<component1 v-slot:default>text<text>123213</text></component1>',
245
      '<component1 vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'default\']}}"><block>text<text>123213</text></block></component1>'
fxy060608's avatar
fxy060608 已提交
246 247 248
    )
    assertCodegen(
      '<component1><template v-slot:left><text></text></template><template v-slot:right><text></text></template></component1>',
249 250 251 252 253 254 255 256 257 258 259 260 261
      '<component1 vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'left\',\'right\']}}"><text slot="left"></text><text slot="right"></text></component1>'
    )
    assertCodegen(
      '<component1><view>view1</view><view>view2</view></component1>',
      '<component1 vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'default\']}}"><view>view1</view><view>view2</view></component1>'
    )
    assertCodegen(
      '<component1><template v-slot><view>view1</view><view>view2</view><template></component1>',
      '<component1 vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'default\']}}"><block><view>view1</view><view>view2</view></block></component1>'
    )
    assertCodegen(
      '<component1><template v-slot:test><view>view1</view><view>view2</view><template></component1>',
      '<component1 vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'test\']}}"><view slot="test"><view>view1</view><view>view2</view></view></component1>'
fxy060608's avatar
fxy060608 已提交
262 263 264 265 266 267 268 269 270 271 272
    )
    assertCodegen(
      `<my-component>
       <template v-slot:header>
        <h1>Here might be a page title</h1>
      </template>
      <p>A paragraph for the main content.</p>
      <template v-slot:footer>
        <p>Here's some contact info</p>
      </template>
    </my-component>`,
273
      '<my-component vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'default\',\'header\',\'footer\']}}"><view class="_h1" slot="header">Here might be a page title</view><view class="_p" slot="footer">Here\'s some contact info</view><view class="_p">A paragraph for the main content.</view></my-component>'
fxy060608's avatar
fxy060608 已提交
274 275 276
    )
  })

277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299
  it('generate v-slot with v-if', () => {
    assertCodegen(
      '<custom-view><template v-if="show">hello</template></custom-view>',
      '<custom-view vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'default\']}}"><block wx:if="{{show}}">hello</block></custom-view>'
    )
    assertCodegen(
      '<custom-view><template v-if="show" #name>hello</template></custom-view>',
      '<custom-view vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'name\']}}"><view slot="name" wx:if="{{show}}">hello</view></custom-view>'
    )
    assertCodegen(
      '<custom-view><template v-if="show" #name><text>hello</text></template></custom-view>',
      '<custom-view vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'name\']}}"><text slot="name" wx:if="{{show}}">hello</text></custom-view>'
    )
    assertCodegen(
      '<custom-view><template v-if="show" #name><view>hello</view></template></custom-view>',
      '<custom-view vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'name\']}}"><view slot="name" wx:if="{{show}}">hello</view></custom-view>'
    )
    assertCodegen(
      '<custom-view><template v-if="show" #name><view v-if="test1||test2">hello</view></template></custom-view>',
      '<custom-view vue-id="551070e6-1" bind:__l="__l" vue-slots="{{[\'name\']}}"><view slot="name" wx:if="{{(show)&&(test1||test2)}}">hello</view></custom-view>'
    )
  })

fxy060608's avatar
fxy060608 已提交
300 301 302 303
  it('generate events inside v-for', () => {
    assertCodegen(
      '<view v-for="item in dataList" :key="item.id" @click="click1(item, 1);click2(item, 2);"/>',
      '<block wx:for="{{dataList}}" wx:for-item="item" wx:for-index="__i0__" wx:key="id"><view data-event-opts="{{[[\'tap\',[[\'click1\',[\'$0\',1],[[[\'dataList\',\'id\',item.id]]]],[\'click2\',[\'$0\',2],[[[\'dataList\',\'id\',item.id]]]]]]]}}" bindtap="__e"></view></block>'
304
    )
305 306 307 308
    assertCodegen(
      '<custom-view v-for="(item,index) in dataList" @test="test($event, item)"><template v-slot><view>text</view></template></custom-view>',
      '<block wx:for="{{dataList}}" wx:for-item="item" wx:for-index="index"><custom-view bind:test="__e" vue-id="{{\'551070e6-1-\'+index}}" data-event-opts="{{[[\'^test\',[[\'test\',[\'$event\',\'$0\'],[[[\'dataList\',\'\',index]]]]]]]}}" bind:__l="__l" vue-slots="{{[\'default\']}}"><view>text</view></custom-view></block>'
    )
fxy060608's avatar
fxy060608 已提交
309 310
    // TODO vue的数字 item 是从1,小程序是从0,后续考虑抹平差异
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
311 312 313
      '<view>1<view  v-for="item in items" :key="item"><input v-for="item1 in item" :key="item1" @input="handle" @click="e=>count++"></view></view>',
      '<view>1<block wx:for="{{items}}" wx:for-item="item" wx:for-index="__i0__" wx:key="*this"><view><block wx:for="{{item}}" wx:for-item="item1" wx:for-index="__i1__" wx:key="*this"><input data-event-opts="{{[[\'input\',[[\'handle\',[\'$event\']]]],[\'tap\',[[\'e0\',[\'$event\']]]]]}}" bindinput="__e" bindtap="__e"/></block></view></block></view>',
      'with(this){if(!_isMounted){e0=e=>count++}}'
fxy060608's avatar
fxy060608 已提交
314 315
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
316 317 318
      '<view>2<view  v-for="(item,index) in items" :key="item"><input v-for="(item1,index1) in item" :key="item1" @input="handle" @click="e=>count++"></view></view>',
      '<view>2<block wx:for="{{items}}" wx:for-item="item" wx:for-index="index" wx:key="*this"><view><block wx:for="{{item}}" wx:for-item="item1" wx:for-index="index1" wx:key="*this"><input data-event-opts="{{[[\'input\',[[\'handle\',[\'$event\']]]],[\'tap\',[[\'e0\',[\'$event\']]]]]}}" bindinput="__e" bindtap="__e"/></block></view></block></view>',
      'with(this){if(!_isMounted){e0=e=>count++}}'
fxy060608's avatar
fxy060608 已提交
319 320
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
321 322
      '<view v-for="item in data.items" @tap="change(item,item.b,true)">3</view>',
      '<block wx:for="{{data.items}}" wx:for-item="item" wx:for-index="__i0__"><view data-event-opts="{{[[\'tap\',[[\'change\',[\'$0\',\'$1\',true],[[[\'data.items\',\'\',__i0__]],[[\'data.items\',\'\',__i0__,\'b\']]]]]]]}}" bindtap="__e">3</view></block>'
fxy060608's avatar
fxy060608 已提交
323 324
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
325 326
      '<view v-for="(item,index) in data.items" @tap="change(item,item.b,true,index)">33</view>',
      '<block wx:for="{{data.items}}" wx:for-item="item" wx:for-index="index"><view data-event-opts="{{[[\'tap\',[[\'change\',[\'$0\',\'$1\',true,index],[[[\'data.items\',\'\',index]],[[\'data.items\',\'\',index,\'b\']]]]]]]}}" bindtap="__e">33</view></block>'
fxy060608's avatar
fxy060608 已提交
327 328
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
329 330
      '<view v-for="(item,index) in data.items" @tap="change(item,true,index,item.b)">4</view>',
      '<block wx:for="{{data.items}}" wx:for-item="item" wx:for-index="index"><view data-event-opts="{{[[\'tap\',[[\'change\',[\'$0\',true,index,\'$1\'],[[[\'data.items\',\'\',index]],[[\'data.items\',\'\',index,\'b\']]]]]]]}}" bindtap="__e">4</view></block>'
fxy060608's avatar
fxy060608 已提交
331 332
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
333 334
      '<view v-for="item in data.items" :key="item.id" @tap="change(item,item.b,true)">5</view>',
      '<block wx:for="{{data.items}}" wx:for-item="item" wx:for-index="__i0__" wx:key="id"><view data-event-opts="{{[[\'tap\',[[\'change\',[\'$0\',\'$1\',true],[[[\'data.items\',\'id\',item.id]],[[\'data.items\',\'id\',item.id,\'b\']]]]]]]}}" bindtap="__e">5</view></block>'
fxy060608's avatar
fxy060608 已提交
335 336
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
337 338
      '<view v-for="item in data.items" :key="item.id" @tap="change(item,item.b,true)">6</view>',
      '<block wx:for="{{data.items}}" wx:for-item="item" wx:for-index="__i0__" wx:key="id"><view data-event-opts="{{[[\'tap\',[[\'change\',[\'$0\',\'$1\',true],[[[\'data.items\',\'id\',item.id]],[[\'data.items\',\'id\',item.id,\'b\']]]]]]]}}" bindtap="__e">6</view></block>'
fxy060608's avatar
fxy060608 已提交
339 340
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
341 342
      '<view v-for="(item,index) in data.items" :key="item.id" @tap="change(item,item.b,test,true)">7<view v-for="(meta,index) in item.metas" :key="meta.id" @tap="change(meta,meta.b,true)"></view></view>',
      '<block wx:for="{{data.items}}" wx:for-item="item" wx:for-index="index" wx:key="id"><view data-event-opts="{{[[\'tap\',[[\'change\',[\'$0\',\'$1\',\'$2\',true],[[[\'data.items\',\'id\',item.id]],[[\'data.items\',\'id\',item.id,\'b\']],\'test\']]]]]}}" bindtap="__e">7<block wx:for="{{item.metas}}" wx:for-item="meta" wx:for-index="index" wx:key="id"><view data-event-opts="{{[[\'tap\',[[\'change\',[\'$0\',\'$1\',true],[[[\'data.items\',\'id\',item.id],[\'metas\',\'id\',meta.id]],[[\'data.items\',\'id\',item.id],[\'metas\',\'id\',meta.id,\'b\']]]]]]]}}" bindtap="__e"></view></block></view></block>'
fxy060608's avatar
fxy060608 已提交
343 344 345 346 347 348 349
    )
    assertCodegen(
      `<block v-for="(weeks, week) in canlender.weeks" :key="week">
        <block v-for="(day, index) in weeks" :key="index">,
             <view @tap="selectDays(week,index,canlender.month === day.month,day.disable,canlender.lunar)"></view>
        </block>
    </block>`,
fxy060608's avatar
fxy060608 已提交
350
      '<block wx:for="{{canlender.weeks}}" wx:for-item="weeks" wx:for-index="week" wx:key="week"><block><block wx:for="{{weeks}}" wx:for-item="day" wx:for-index="index" wx:key="index"><block>,<view data-event-opts="{{[[\'tap\',[[\'selectDays\',[week,index,canlender.month===day.month,\'$0\',\'$1\'],[[[\'canlender.weeks\',\'\',week],[\'\',\'\',index,\'disable\']],\'canlender.lunar\']]]]]}}" bindtap="__e"></view></block></block></block></block>'
351 352
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
353 354
      '<view v-for="item in list">9<input type="text" v-for="meta in item.meta" :key="meta.id" v-model="meta.value"></view>',
      '<block wx:for="{{list}}" wx:for-item="item" wx:for-index="__i0__"><view>9<block wx:for="{{item.meta}}" wx:for-item="meta" wx:for-index="__i1__" wx:key="id"><input type="text" data-event-opts="{{[[\'input\',[[\'__set_model\',[\'$0\',\'value\',\'$event\',[]],[[[\'list\',\'\',__i0__],[\'meta\',\'id\',meta.id]]]]]]]}}" value="{{meta.value}}" bindinput="__e"/></block></view></block>'
355 356
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
357 358
      '<view @click="onSetYear(+1,-1)"></view>',
      '<view data-event-opts="{{[[\'tap\',[[\'onSetYear\',[1,-1]]]]]}}" bindtap="__e"></view>'
359 360
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
361 362
      '<view class="input-list" v-for="(item,index) in dataList" :key="item.id"><input v-model.trim="dataList2[index].val" /></view>',
      '<block wx:for="{{dataList}}" wx:for-item="item" wx:for-index="index" wx:key="id"><view class="input-list"><input data-event-opts="{{[[\'input\',[[\'__set_model\',[\'$0\',\'val\',\'$event\',[\'trim\']],[\'dataList2.\'+index+\'\']]]],[\'blur\',[[\'$forceUpdate\']]]]}}" value="{{dataList2[index].val}}" bindinput="__e" bindblur="__e"/></view></block>'
fxy060608's avatar
fxy060608 已提交
363 364 365 366 367 368 369 370 371 372 373 374 375
    )
    assertCodegen(
      ` <view>
        <view v-for="item in list[idx]" :key="item.id" class="mid-item-title" @click="m1(item)">
          <view class="mid-item-icon" @click.stop="m2(item)"></view>
        </view>
        </view>`,
      '<view><block wx:for="{{list[idx]}}" wx:for-item="item" wx:for-index="__i0__" wx:key="id"><view data-event-opts="{{[[\'tap\',[[\'m1\',[\'$0\'],[[[\'list.\'+idx+\'\',\'id\',item.id]]]]]]]}}" class="mid-item-title" bindtap="__e"><view data-event-opts="{{[[\'tap\',[[\'m2\',[\'$0\'],[[[\'list.\'+idx+\'\',\'id\',item.id]]]]]]]}}" class="mid-item-icon" catchtap="__e"></view></view></block></view>'
    )
    assertCodegen(
      '<view><view class="item" v-for="i in \'abc\'" :key="i" @click="func(i)"></view></view>',
      '<view><block wx:for="abc" wx:for-item="i" wx:for-index="__i0__" wx:key="*this"><view data-event-opts="{{[[\'tap\',[[\'func\',[\'$0\'],[[[\'#s#abc\',\'\',__i0__]]]]]]]}}" class="item" bindtap="__e"></view></block></view>'
    )
376 377 378 379 380 381 382 383 384 385 386 387 388 389
    assertCodegen(
      '<view v-for="(item,index) in list" :key="index" @click.stop="func">{{item}}</view>',
      '<block wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view data-event-opts="{{[[\'tap\',[[\'func\',[\'$event\']]]]]}}" catchtap="__e">{{item}}</view></block>'
    )
    assertCodegen(
      '<view v-for="(item,index) in [1,2,3]" :key="index" @click.stop="func">{{item}}</view>',
      '<block wx:for="{{[1,2,3]}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view data-event-opts="{{[[\'tap\',[[\'e0\',[\'$event\']]]]]}}" catchtap="__e">{{item}}</view></block>',
      'with(this){if(!_isMounted){e0=function($event){$event.stopPropagation();return func($event)}}}'
    )
    assertCodegen(
      '<view v-for="(item,index) in array()" :key="index" @click.stop="func">{{item}}</view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view data-event-opts="{{[[\'tap\',[[\'e0\',[\'$event\']]]]]}}" catchtap="__e">{{item}}</view></block>',
      'with(this){var l0=array();if(!_isMounted){e0=function($event){$event.stopPropagation();return func($event)}}$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
fxy060608's avatar
fxy060608 已提交
390 391 392 393
    assertCodegen(
      '<view><view class="item" v-for="i in 5" :key="i" @click="func(i)"></view></view>',
      '<view><block wx:for="{{5}}" wx:for-item="i" wx:for-index="__i0__" wx:key="*this"><view data-event-opts="{{[[\'tap\',[[\'func\',[\'$0\'],[[[5,\'\',__i0__]]]]]]]}}" class="item" bindtap="__e"></view></block></view>'
    )
394 395 396 397 398
    assertCodegen(
      '<view v-for="(item,index) in list" :key="index"><view @click="$test.test(item,item.length)"></view></view>',
      '<block wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view><view data-event-opts="{{[[\'tap\',[[\'e0\',[\'$event\']]]]]}}" data-event-params="{{({item})}}" bindtap="__e"></view></view></block>',
      'with(this){if(!_isMounted){e0=function($event,item){var _temp=arguments[arguments.length-1].currentTarget.dataset,_temp2=_temp.eventParams||_temp["event-params"],item=_temp2.item;var _temp,_temp2;return $test.test(item,item.length)}}}'
    )
399 400 401 402 403
    assertCodegen(
      '<view v-for="(item,index) in list" :key="index"><view @click="$test.test(item,item.length,undefined)"></view></view>',
      '<block wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view><view data-event-opts="{{[[\'tap\',[[\'e0\',[\'$event\']]]]]}}" data-event-params="{{({item})}}" bindtap="__e"></view></view></block>',
      'with(this){if(!_isMounted){e0=function($event,item){var _temp=arguments[arguments.length-1].currentTarget.dataset,_temp2=_temp.eventParams||_temp["event-params"],item=_temp2.item;var _temp,_temp2;return $test.test(item,item.length,undefined)}}}'
    )
404 405 406 407 408
    assertCodegen(
      '<view v-for="(item,index) in list" :key="index"><view @click="event=>showEventInfo(event,item)"></view></view>',
      '<block wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view><view data-event-opts="{{[[\'tap\',[[\'e0\',[\'$event\']]]]]}}" data-event-params="{{({item})}}" bindtap="__e"></view></view></block>',
      'with(this){if(!_isMounted){e0=(event,item,...args)=>{var _temp=args[args.length-1].currentTarget.dataset,_temp2=_temp.eventParams||_temp["event-params"],item=_temp2.item;var _temp,_temp2;return showEventInfo(event,item)}}}'
    )
fxy060608's avatar
fxy060608 已提交
409 410 411 412
  })

  it('generate class binding', () => {
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
413 414
      '<p :class=\'"icon-"+item.icon\'>1</p>',
      '<view class="{{[\'_p\',\'icon-\'+item.icon]}}">1</view>'
fxy060608's avatar
fxy060608 已提交
415 416 417
    )
    assertCodegen(
      '<div :class="{ active: isActive }">1</div>',
fxy060608's avatar
fxy060608 已提交
418
      '<view class="{{[\'_div\',(isActive)?\'active\':\'\']}}">1</view>'
fxy060608's avatar
fxy060608 已提交
419 420
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
421
      '<p class="static" :class="{ active: isActive, \'text-danger\': hasError }">2</p>',
422
      '<view class="{{[\'static\',\'_p\',(isActive)?\'active\':\'\',(hasError)?\'text-danger\':\'\']}}">2</view>'
fxy060608's avatar
fxy060608 已提交
423 424 425
    )
    assertCodegen(
      '<p class="static" :class="[activeClass, errorClass]">3</p>',
426
      '<view class="{{[\'static\',\'_p\',activeClass,errorClass]}}">3</view>'
fxy060608's avatar
fxy060608 已提交
427 428
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
429
      '<p class="static" :class="[isActive ? activeClass : \'\', errorClass]">4</p>',
430
      '<view class="{{[\'static\',\'_p\',isActive?activeClass:\'\',errorClass]}}">4</view>'
fxy060608's avatar
fxy060608 已提交
431 432
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
433
      '<p class="static" :class="[{ active: isActive }, errorClass]">5</p>',
434
      '<view class="{{[\'static\',\'_p\',[(isActive)?\'active\':\'\'],errorClass]}}">5</view>'
fxy060608's avatar
fxy060608 已提交
435 436
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
437
      '<div class="container" :class="computedClassObject">6</div>',
438
      '<view class="{{[\'container\',\'_div\',computedClassObject]}}">6</view>'
fxy060608's avatar
fxy060608 已提交
439 440 441 442 443 444 445
    )
    //         assertCodegen(
    //             `<div class="container" :class="computedClassObject">6</div>`,
    //             `<view class="{{$root.c0}}">6</view>`,
    //             `with(this){var c0=__get_class(computedClassObject,"container");$mp.data=Object.assign({},{$root:{c0:c0}})}`
    //         )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
446 447
      '<p :class="index === currentIndex ? activeClass : itemClass">7</p>',
      '<view class="{{[\'_p\',index===currentIndex?activeClass:itemClass]}}">7</view>'
fxy060608's avatar
fxy060608 已提交
448 449
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
450 451
      '<p :class="\'m-content-head-\'+message.user">8</p>',
      '<view class="{{[\'_p\',\'m-content-head-\'+message.user]}}">8</view>'
fxy060608's avatar
fxy060608 已提交
452 453
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
454
      '<p :class="classStr1 || classStr2" class="bg">9</p>',
455
      '<view class="{{[\'bg\',\'_p\',classStr1||classStr2]}}">9</view>'
fxy060608's avatar
fxy060608 已提交
456 457 458 459 460
    )
  })

  it('generate style binding', () => {
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
461 462
      '<p :style="\'color:red\'">1</p>',
      '<view style="{{(\'color:red\')}}" class="_p">1</view>'
fxy060608's avatar
fxy060608 已提交
463 464
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
465 466
      '<p style="background-color:black" :style="\'color:red\'">1</p>',
      '<view style="{{\'background-color:black;\'+(\'color:red\')}}" class="_p">1</view>'
fxy060608's avatar
fxy060608 已提交
467 468
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
469 470
      '<p :style="{ color: activeColor }">1</p>',
      '<view style="{{\'color:\'+(activeColor)+\';\'}}" class="_p">1</view>'
fxy060608's avatar
fxy060608 已提交
471 472
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
473 474
      '<p :style="{ color: activeColor, fontSize: fontSize + \'px\' }">2</p>',
      '<view style="{{\'color:\'+(activeColor)+\';\'+(\'font-size:\'+(fontSize+\'px\')+\';\')}}" class="_p">2</view>'
fxy060608's avatar
fxy060608 已提交
475 476
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
477 478
      '<p :style="{ color: activeColor }" style="background-color:red;height:100upx">3</p>',
      '<view style="{{\'background-color:red;height:100rpx;\'+(\'color:\'+(activeColor)+\';\')}}" class="_p">3</view>'
fxy060608's avatar
fxy060608 已提交
479 480
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
481 482
      '<p :style="[{ color: activeColor, fontSize: fontSize + \'px\' }]">4</p>',
      '<view style="{{\'color:\'+(activeColor)+\';\'+(\'font-size:\'+(fontSize+\'px\')+\';\')}}" class="_p">4</view>'
fxy060608's avatar
fxy060608 已提交
483 484
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
485 486
      '<p :style="[{ color: activeColor, fontSize: fontSize + \'px\' },{ \'background-color\': activeColor}]">5</p>',
      '<view style="{{\'color:\'+(activeColor)+\';\'+(\'font-size:\'+(fontSize+\'px\')+\';\')+(\'background-color:\'+(activeColor)+\';\')}}" class="_p">5</view>'
fxy060608's avatar
fxy060608 已提交
487 488
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
489 490 491
      '<div :style="[baseStyles, overridingStyles]">6</div>',
      '<view style="{{$root.s0}}" class="_div">6</view>',
      'with(this){var s0=__get_style([baseStyles,overridingStyles]);$mp.data=Object.assign({},{$root:{s0:s0}})}'
fxy060608's avatar
fxy060608 已提交
492 493
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
494 495
      '<div :style="styleObject">7</div>',
      '<view style="{{(styleObject)}}" class="_div">7</view>'
fxy060608's avatar
fxy060608 已提交
496 497 498 499 500 501 502
    )
    //         assertCodegen(
    //             `<div :style="styleObject">7</div>`,
    //             `<view style="{{$root.s0}}">7</view>`,
    //             `with(this){var s0=__get_style(styleObject);$mp.data=Object.assign({},{$root:{s0:s0}})}`
    //         )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
503 504
      '<p :style="index === currentIndex ? activeStyle : itemStyle">8</p>',
      '<view style="{{(index===currentIndex?activeStyle:itemStyle)}}" class="_p">8</view>'
fxy060608's avatar
fxy060608 已提交
505 506
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
507 508
      '<p :style="\'background:\'+background">9</p>',
      '<view style="{{(\'background:\'+background)}}" class="_p">9</view>'
fxy060608's avatar
fxy060608 已提交
509 510
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
511 512
      '<p :style="styleStr1 || styleStr2" style="background:red">10</p>',
      '<view style="{{\'background:red;\'+(styleStr1||styleStr2)}}" class="_p">10</view>'
fxy060608's avatar
fxy060608 已提交
513 514 515 516 517 518
    )
  })

  it('generate events with v-on directive on custom component', () => {
    assertCodegen(
      '<my-component @click="handleClick"/>',
fxy060608's avatar
fxy060608 已提交
519
      '<my-component bind:click="__e" vue-id="551070e6-1" data-event-opts="{{[[\'^click\',[[\'handleClick\']]]]}}" bind:__l="__l"></my-component>'
fxy060608's avatar
fxy060608 已提交
520 521 522
    )
    assertCodegen(
      '<my-component @click-left="handleClick"/>',
fxy060608's avatar
fxy060608 已提交
523
      '<my-component bind:clickLeft="__e" vue-id="551070e6-1" data-event-opts="{{[[\'^clickLeft\',[[\'handleClick\']]]]}}" bind:__l="__l"></my-component>'
fxy060608's avatar
fxy060608 已提交
524 525 526 527 528 529
    )
  })

  it('generate v-model directive on custom component', () => {
    assertCodegen(
      '<my-component v-model="test" @input="handle">1</my-component>',
fxy060608's avatar
fxy060608 已提交
530
      '<my-component bind:input="__e" vue-id="551070e6-1" value="{{test}}" data-event-opts="{{[[\'^input\',[[\'__set_model\',[\'\',\'test\',\'$event\',[]]],[\'handle\']]]]}}" bind:__l="__l" vue-slots="{{[\'default\']}}">1</my-component>'
fxy060608's avatar
fxy060608 已提交
531 532 533
    )
    assertCodegen(
      '<my-component v-model="test" @click="handle">2</my-component>',
fxy060608's avatar
fxy060608 已提交
534
      '<my-component bind:click="__e" bind:input="__e" vue-id="551070e6-1" value="{{test}}" data-event-opts="{{[[\'^click\',[[\'handle\']]],[\'^input\',[[\'__set_model\',[\'\',\'test\',\'$event\',[]]]]]]}}" bind:__l="__l" vue-slots="{{[\'default\']}}">2</my-component>'
535 536 537
    )
    assertCodegen(
      '<my-component v-model="test.a">3</my-component>',
fxy060608's avatar
fxy060608 已提交
538
      '<my-component bind:input="__e" vue-id="551070e6-1" value="{{test.a}}" data-event-opts="{{[[\'^input\',[[\'__set_model\',[\'$0\',\'a\',\'$event\',[]],[\'test\']]]]]}}" bind:__l="__l" vue-slots="{{[\'default\']}}">3</my-component>'
539 540 541
    )
    assertCodegen(
      '<my-component v-model="test.a.b">4</my-component>',
fxy060608's avatar
fxy060608 已提交
542
      '<my-component bind:input="__e" vue-id="551070e6-1" value="{{test.a.b}}" data-event-opts="{{[[\'^input\',[[\'__set_model\',[\'$0\',\'b\',\'$event\',[]],[\'test.a\']]]]]}}" bind:__l="__l" vue-slots="{{[\'default\']}}">4</my-component>'
543 544 545
    )
    assertCodegen(
      '<my-component v-model="test[a.b][a.b]">4</my-component>',
fxy060608's avatar
fxy060608 已提交
546
      '<my-component bind:input="__e" vue-id="551070e6-1" value="{{test[a.b][a.b]}}" data-event-opts="{{[[\'^input\',[[\'__set_model\',[\'$0\',\'$1\',\'$event\',[]],[\'test.\'+a.b+\'\',\'a.b\']]]]]}}" bind:__l="__l" vue-slots="{{[\'default\']}}">4</my-component>'
fxy060608's avatar
fxy060608 已提交
547 548 549 550 551 552
    )
  })

  it('generate object property on custom component', () => {
    assertCodegen(
      '<my-component v-model="test" @input="handle" />',
fxy060608's avatar
fxy060608 已提交
553
      '<my-component bind:input="__e" vue-id="551070e6-1" value="{{test}}" data-event-opts="{{[[\'^input\',[[\'__set_model\',[\'\',\'test\',\'$event\',[]]],[\'handle\']]]]}}" bind:__l="__l"></my-component>'
fxy060608's avatar
fxy060608 已提交
554 555 556 557 558
    )
  })
  it('generate v-text directive', () => {
    assertCodegen(
      '<view v-text="aaa1"></view>',
fxy060608's avatar
fxy060608 已提交
559
      '<view>{{aaa1}}</view>'
fxy060608's avatar
fxy060608 已提交
560 561 562
    )
    assertCodegen(
      '<view v-text="aaa1+1"></view>',
fxy060608's avatar
fxy060608 已提交
563
      '<view>{{aaa1+1}}</view>'
fxy060608's avatar
fxy060608 已提交
564 565
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
566 567
      '<view v-text="\'aaa2\'"></view>',
      '<view>aaa2</view>'
fxy060608's avatar
fxy060608 已提交
568 569 570 571 572
    )
  })
  it('generate v-html directive', () => {
    assertCodegen(
      '<view v-html="aaa"></view>',
fxy060608's avatar
fxy060608 已提交
573
      '<view><rich-text nodes="{{aaa}}"></rich-text></view>'
fxy060608's avatar
fxy060608 已提交
574 575 576 577 578 579
    )
  })

  it('generate v-bind directive with sync modifier', () => {
    assertCodegen(
      '<text-document :title.sync="aaa"></text-document>',
fxy060608's avatar
fxy060608 已提交
580
      '<text-document vue-id="551070e6-1" title="{{aaa}}" data-event-opts="{{[[\'^updateTitle\',[[\'__set_sync\',[\'$0\',\'aaa\',\'$event\'],[\'\']]]]]}}" bind:updateTitle="__e" bind:__l="__l"></text-document>'
fxy060608's avatar
fxy060608 已提交
581 582 583
    )
    assertCodegen(
      '<text-document :title.sync="doc.title"></text-document>',
fxy060608's avatar
fxy060608 已提交
584
      '<text-document vue-id="551070e6-1" title="{{doc.title}}" data-event-opts="{{[[\'^updateTitle\',[[\'__set_sync\',[\'$0\',\'title\',\'$event\'],[\'doc\']]]]]}}" bind:updateTitle="__e" bind:__l="__l"></text-document>'
fxy060608's avatar
fxy060608 已提交
585 586 587
    )
    assertCodegen(
      '<text-document :title.sync="doc.a.title"></text-document>',
fxy060608's avatar
fxy060608 已提交
588
      '<text-document vue-id="551070e6-1" title="{{doc.a.title}}" data-event-opts="{{[[\'^updateTitle\',[[\'__set_sync\',[\'$0\',\'title\',\'$event\'],[\'doc.a\']]]]]}}" bind:updateTitle="__e" bind:__l="__l"></text-document>'
fxy060608's avatar
fxy060608 已提交
589 590 591
    )
    assertCodegen(
      '<text-document v-for="item in items" :title.sync="item.title"></text-document>',
fxy060608's avatar
fxy060608 已提交
592
      '<block wx:for="{{items}}" wx:for-item="item" wx:for-index="__i0__"><text-document vue-id="{{\'551070e6-1-\'+__i0__}}" title="{{item.title}}" data-event-opts="{{[[\'^updateTitle\',[[\'__set_sync\',[\'$0\',\'title\',\'$event\'],[[[\'items\',\'\',__i0__,\'\']]]]]]]}}" bind:updateTitle="__e" bind:__l="__l"></text-document></block>'
fxy060608's avatar
fxy060608 已提交
593 594 595
    )
    assertCodegen(
      '<text-document v-for="item in items" :title.sync="item.meta.title"></text-document>',
fxy060608's avatar
fxy060608 已提交
596
      '<block wx:for="{{items}}" wx:for-item="item" wx:for-index="__i0__"><text-document vue-id="{{\'551070e6-1-\'+__i0__}}" title="{{item.meta.title}}" data-event-opts="{{[[\'^updateTitle\',[[\'__set_sync\',[\'$0\',\'title\',\'$event\'],[[[\'items\',\'\',__i0__,\'meta\']]]]]]]}}" bind:updateTitle="__e" bind:__l="__l"></text-document></block>'
fxy060608's avatar
fxy060608 已提交
597 598 599 600 601 602
    )
  })

  it('generate v-model directive with generic modifiers', () => {
    assertCodegen(
      '<input v-model.lazy="test">',
fxy060608's avatar
fxy060608 已提交
603
      '<input data-event-opts="{{[[\'input\',[[\'__set_model\',[\'\',\'test\',\'$event\',[]]]]]]}}" value="{{test}}" bindinput="__e"/>'
fxy060608's avatar
fxy060608 已提交
604 605 606
    )
    assertCodegen(
      '<input v-model.number="test">',
fxy060608's avatar
fxy060608 已提交
607
      '<input data-event-opts="{{[[\'input\',[[\'__set_model\',[\'\',\'test\',\'$event\',[\'number\']]]]],[\'blur\',[[\'$forceUpdate\']]]]}}" value="{{test}}" bindinput="__e" bindblur="__e"/>'
fxy060608's avatar
fxy060608 已提交
608 609 610
    )
    assertCodegen(
      '<input v-model.number.trim="test">',
fxy060608's avatar
fxy060608 已提交
611
      '<input data-event-opts="{{[[\'input\',[[\'__set_model\',[\'\',\'test\',\'$event\',[\'number\',\'trim\']]]]],[\'blur\',[[\'$forceUpdate\']]]]}}" value="{{test}}" bindinput="__e" bindblur="__e"/>'
fxy060608's avatar
fxy060608 已提交
612 613 614
    )
    assertCodegen(
      '<input class="uni-input" @input="replaceInput" v-model="changeValue" placeholder="连续的两个1会变成2" />',
fxy060608's avatar
fxy060608 已提交
615
      '<input class="uni-input" placeholder="连续的两个1会变成2" data-event-opts="{{[[\'input\',[[\'__set_model\',[\'\',\'changeValue\',\'$event\',[]]],[\'replaceInput\',[\'$event\']]]]]}}" value="{{changeValue}}" bindinput="__e"/>'
616 617 618
    )
    assertCodegen(
      '<input v-model="model2.m" />',
fxy060608's avatar
fxy060608 已提交
619
      '<input data-event-opts="{{[[\'input\',[[\'__set_model\',[\'$0\',\'m\',\'$event\',[]],[\'model2\']]]]]}}" value="{{model2.m}}" bindinput="__e"/>'
620 621 622
    )
    assertCodegen(
      '<input v-model="model3.m.m" />',
fxy060608's avatar
fxy060608 已提交
623
      '<input data-event-opts="{{[[\'input\',[[\'__set_model\',[\'$0\',\'m\',\'$event\',[]],[\'model3.m\']]]]]}}" value="{{model3.m.m}}" bindinput="__e"/>'
624 625 626
    )
    assertCodegen(
      '<input v-model="model3[a.b][a.b]" />',
fxy060608's avatar
fxy060608 已提交
627
      '<input data-event-opts="{{[[\'input\',[[\'__set_model\',[\'$0\',\'$1\',\'$event\',[]],[\'model3.\'+a.b+\'\',\'a.b\']]]]]}}" value="{{model3[a.b][a.b]}}" bindinput="__e"/>'
fxy060608's avatar
fxy060608 已提交
628 629 630 631 632
    )
  })

  it('generate v-for', () => {
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
633 634
      '<view><view v-for="(item, index) in list"><view>{{handle(item)}}</view></view></view>',
      '<view><block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index"><view><view>{{item.m0}}</view></view></block></view>',
635
      'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var m0=handle(item);return{$orig:$orig,m0:m0}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
fxy060608's avatar
fxy060608 已提交
636 637
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
638 639
      '<view><view v-for="(item, index) in list"><view>{{handle(item)}}{{item.title}}</view></view></view>',
      '<view><block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index"><view><view>{{item.m0+item.$orig.title}}</view></view></block></view>',
640
      'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var m0=handle(item);return{$orig:$orig,m0:m0}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
fxy060608's avatar
fxy060608 已提交
641 642
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
643 644
      '<view><view v-for="(item, index) in list"><view v-for="(item1,index1) in list1">{{handle(item1)}}{{item1.title}}</view></view></view>',
      '<view><block wx:for="{{$root.l1}}" wx:for-item="item" wx:for-index="index"><view><block wx:for="{{item.l0}}" wx:for-item="item1" wx:for-index="index1"><view>{{item1.m0+item1.$orig.title}}</view></block></view></block></view>',
645
      'with(this){var l1=__map(list,function(item,index){var $orig=__get_orig(item);var l0=__map(list1,function(item1,index1){var $orig=__get_orig(item1);var m0=handle(item1);return{$orig:$orig,m0:m0}});return{$orig:$orig,l0:l0}});$mp.data=Object.assign({},{$root:{l1:l1}})}'
646 647
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
648 649
      '<view v-for="(section, index) in sections" :key="index">title: {{ section.title|prefix }}<view v-for="(sub_titles, _index) in section.sub_titles" :key="_index">{{ sub_titles|prefix }}</view></view>',
      '<block wx:for="{{$root.l1}}" wx:for-item="section" wx:for-index="index" wx:key="index"><view>{{"title: "+section.f0}}<block wx:for="{{section.l0}}" wx:for-item="sub_titles" wx:for-index="_index" wx:key="_index"><view>{{sub_titles.f1}}</view></block></view></block>',
650
      'with(this){var l1=__map(sections,function(section,index){var $orig=__get_orig(section);var f0=_f("prefix")(section.title);var l0=__map(section.sub_titles,function(sub_titles,_index){var $orig=__get_orig(sub_titles);var f1=_f("prefix")(sub_titles);return{$orig:$orig,f1:f1}});return{$orig:$orig,f0:f0,l0:l0}});$mp.data=Object.assign({},{$root:{l1:l1}})}'
651 652 653
    )

    assertCodegen(
fxy060608's avatar
fxy060608 已提交
654 655 656
      '<view v-for="(item, index) in list" :key="item">{{aaa.item.id | test | test1}}</view>',
      '<block wx:for="{{list}}" wx:for-item="item" wx:for-index="index" wx:key="*this"><view>{{$root.f0}}</view></block>',
      'with(this){var f0=_f("test1")(_f("test")(aaa.item.id));$mp.data=Object.assign({},{$root:{f0:f0}})}'
657 658
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
659 660
      '<view v-for="(item, index) in list" :key="item">{{item.item.id | test | test1}}</view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="$orig"><view>{{item.f0}}</view></block>',
661
      'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var f0=_f("test1")(_f("test")(item.item.id));return{$orig:$orig,f0:f0}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
662 663
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
664 665
      '<text v-for="(item, i) in list" v-bind:key="i" >{{ item.split(\'\').join(\' \') }}</text>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="i" wx:key="i"><text>{{item.g0}}</text></block>',
666
      'with(this){var l0=__map(list,function(item,i){var $orig=__get_orig(item);var g0=item.split("").join(" ");return{$orig:$orig,g0:g0}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
667
    )
fxy060608's avatar
fxy060608 已提交
668 669 670 671 672 673 674 675 676
    assertCodegen(
      `<view class="content">
        <view v-for="(item, index) in tabList" :key="index">
            <view v-for="(item2,index2) in list[item.key]" :key="index2" @click="show(item2.id, item2.id)">
                {{formatIt(item2.id)}}
            </view>
        </view>
    </view>`,
      '<view class="content"><block wx:for="{{$root.l1}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view><block wx:for="{{item.l0}}" wx:for-item="item2" wx:for-index="index2" wx:key="index2"><view data-event-opts="{{[[\'tap\',[[\'show\',[\'$0\',\'$1\'],[[[\'list.\'+item.$orig.key+\'\',\'\',index2,\'id\']],[[\'list.\'+item.$orig.key+\'\',\'\',index2,\'id\']]]]]]]}}" bindtap="__e">{{\'\'+item2.m0+\'\'}}</view></block></view></block></view>',
677
      'with(this){var l1=__map(tabList,function(item,index){var $orig=__get_orig(item);var l0=__map(list[item.key],function(item2,index2){var $orig=__get_orig(item2);var m0=formatIt(item2.id);return{$orig:$orig,m0:m0}});return{$orig:$orig,l0:l0}});$mp.data=Object.assign({},{$root:{l1:l1}})}'
fxy060608's avatar
fxy060608 已提交
678
    )
679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697
    assertCodegen(
      '<view><view v-for="(item, key) in {x:\'x\'}"><view>{{item}}</view></view></view>',
      '<view><block wx:for="{{({x:\'x\'})}}" wx:for-item="item" wx:for-index="key"><view><view>{{item}}</view></view></block></view>'
    )
    assertCodegen(
      '<view><view v-for="(item, key) in {\'x-x\':\'x\'}"><view>{{item}}</view></view></view>',
      '<view><block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="key"><view><view>{{item}}</view></view></block></view>',
      'with(this){var l0={"x-x":"x"};$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
    assertCodegen(
      '<view><view v-for="(item, index) in getList(test)"><view>{{item}}</view></view></view>',
      '<view><block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index"><view><view>{{item}}</view></view></block></view>',
      'with(this){var l0=getList(test);$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
    assertCodegen(
      '<view><view v-for="(item, index) in list[get(test)]"><view>{{item}}</view></view></view>',
      '<view><block wx:for="{{list[$root.m0]}}" wx:for-item="item" wx:for-index="index"><view><view>{{item}}</view></view></block></view>',
      'with(this){var m0=get(test);$mp.data=Object.assign({},{$root:{m0:m0}})}'
    )
fxy060608's avatar
fxy060608 已提交
698 699 700 701 702 703
  })

  it('generate TemplateLiteral ', () => {
    assertCodegen(
      /* eslint-disable no-template-curly-in-string */
      '<view @tap="go(`/pages/page/page?id=${aaa}`)"></view>',
fxy060608's avatar
fxy060608 已提交
704
      '<view data-event-opts="{{[[\'tap\',[[\'go\',[\'/pages/page/page?id=\'+aaa]]]]]}}" bindtap="__e"></view>'
fxy060608's avatar
fxy060608 已提交
705 706 707 708
    )
    assertCodegen(
      /* eslint-disable no-template-curly-in-string */
      '<view :data-test="`hello`+aaa"></view>',
fxy060608's avatar
fxy060608 已提交
709
      '<view data-test="{{\'hello\'+aaa}}"></view>'
fxy060608's avatar
fxy060608 已提交
710 711
    )
  })
fxy060608's avatar
fxy060608 已提交
712 713 714 715 716
  it('generate event ', () => {
    assertCodegen(
      '<view @/>',
      '<view></view>'
    )
717

718
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
719 720
      '<text v-for="item in items[\'metas\']" :key="item[\'id\']" class="title" @tap="handle(item[\'id\'],item[\'title\'])">{{item.title}}</text>',
      '<block wx:for="{{items[\'metas\']}}" wx:for-item="item" wx:for-index="__i0__" wx:key="id"><text data-event-opts="{{[[\'tap\',[[\'handle\',[\'$0\',\'$1\'],[[[\'items.metas\',\'id\',item[\'id\'],\'id\']],[[\'items.metas\',\'id\',item[\'id\'],\'title\']]]]]]]}}" class="title" bindtap="__e">{{item.title}}</text></block>'
721
    )
fxy060608's avatar
fxy060608 已提交
722
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
723 724
      '<view @touchmove>1</view>',
      '<view data-event-opts="{{[[\'touchmove\',[[\'\',[\'$event\']]]]]}}" bindtouchmove="__e">1</view>'
fxy060608's avatar
fxy060608 已提交
725 726
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
727 728
      '<view @touchmove="">2</view>',
      '<view data-event-opts="{{[[\'touchmove\',[[\'\',[\'$event\']]]]]}}" bindtouchmove="__e">2</view>'
fxy060608's avatar
fxy060608 已提交
729 730
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
731 732
      '<view @touchmove.stop.prevent>3</view>',
      '<view data-event-opts="{{[[\'touchmove\',[[\'\',[\'$event\']]]]]}}" catchtouchmove="__e">3</view>'
fxy060608's avatar
fxy060608 已提交
733 734
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
735 736
      '<view @tap="change(item,item.b,\'a\',true)"></view>',
      '<view data-event-opts="{{[[\'tap\',[[\'change\',[\'$0\',\'$1\',\'a\',true],[\'item\',\'item.b\']]]]]}}" bindtap="__e"></view>'
737 738
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
739 740
      '<view @click="handle({name:\'a\',b:123},[1,2,3])"></view>',
      '<view data-event-opts="{{[[\'tap\',[[\'handle\',[[\'o\',[\'name\',\'a\'],[\'b\',123]],[1,2,3]]]]]]}}" bindtap="__e"></view>'
741 742
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
743 744
      '<text v-for="(item,index) in pickerList[pickerIndex[0][2][\'asdf\']].children" :key="index">{{item.title}}</text>',
      '<block wx:for="{{pickerList[pickerIndex[0][2][\'asdf\']].children}}" wx:for-item="item" wx:for-index="index" wx:key="index"><text>{{item.title}}</text></block>'
745 746
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
747 748
      '<text v-for="(item,index) in pickerList[0][1].children" :key="index" @tap="handle(item,index)">{{item.title}}</text>',
      '<block wx:for="{{pickerList[0][1].children}}" wx:for-item="item" wx:for-index="index" wx:key="index"><text data-event-opts="{{[[\'tap\',[[\'handle\',[\'$0\',index],[[[\'pickerList.__$n0.__$n1.children\',\'\',index]]]]]]]}}" bindtap="__e">{{item.title}}</text></block>'
749 750
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
751 752
      '<view v-for="(v2,i2) in ddd.item[0]" :key="i2" @tap="toInfo(v2)"></view>',
      '<block wx:for="{{ddd.item[0]}}" wx:for-item="v2" wx:for-index="i2" wx:key="i2"><view data-event-opts="{{[[\'tap\',[[\'toInfo\',[\'$0\'],[[[\'ddd.item.__$n0\',\'\',i2]]]]]]]}}" bindtap="__e"></view></block>'
753 754
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
755 756
      '<button type="primary" @click="test(arr, arr[index+1])">click me</button>',
      '<button type="primary" data-event-opts="{{[[\'tap\',[[\'test\',[\'$0\',\'$1\'],[\'arr\',\'arr.\'+index+1+\'\']]]]]}}" bindtap="__e">click me</button>'
757 758
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
759 760
      '<button type="primary" @click="test(arr, arr[0])">click me</button>',
      '<button type="primary" data-event-opts="{{[[\'tap\',[[\'test\',[\'$0\',\'$1\'],[\'arr\',\'arr.__$n0\']]]]]}}" bindtap="__e">click me</button>'
761 762
    )
    assertCodegen(
fxy060608's avatar
fxy060608 已提交
763 764
      '<view v-for="item in list" @click="test(item)">{{ item }}</view>',
      '<block wx:for="{{list}}" wx:for-item="item" wx:for-index="__i0__"><view data-event-opts="{{[[\'tap\',[[\'test\',[\'$0\'],[[[\'list\',\'\',__i0__]]]]]]]}}" bindtap="__e">{{item}}</view></block>'
765
    )
766 767 768 769
    assertCodegen(
      '<view v-for="item in list" @click.stop="test(item)">{{ item }}</view>',
      '<block wx:for="{{list}}" wx:for-item="item" wx:for-index="__i0__"><view data-event-opts="{{[[\'tap\',[[\'test\',[\'$0\'],[[[\'list\',\'\',__i0__]]]]]]]}}" catchtap="__e">{{item}}</view></block>'
    )
770 771 772 773 774
    assertCodegen(
      '<view v-for="(item, index) in [{x:[1,2,3,4]}]"><view v-for="item2 in item.x" @click="test(item2)">{{ item2 }}+{{index}}</view></view>',
      '<block wx:for="{{[{x:[1,2,3,4]}]}}" wx:for-item="item" wx:for-index="index"><view><block wx:for="{{item.x}}" wx:for-item="item2" wx:for-index="__i0__"><view data-event-opts="{{[[\'tap\',[[\'e0\',[\'$event\']]]]]}}" data-event-params="{{({item2})}}" bindtap="__e">{{item2+"+"+index}}</view></block></view></block>',
      'with(this){if(!_isMounted){e0=function($event,item2){var _temp=arguments[arguments.length-1].currentTarget.dataset,_temp2=_temp.eventParams||_temp["event-params"],item2=_temp2.item2;var _temp,_temp2;return test(item2)}}}'
    )
775 776 777 778 779 780 781 782 783
    assertCodegen(
      '<view v-for="(item, index) in array()"><view @click="test"></view></view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index"><view><view data-event-opts="{{[[\'tap\',[[\'test\',[\'$event\']]]]]}}" bindtap="__e"></view></view></block>',
      'with(this){var l0=array();$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
    assertCodegen(
      '<view v-for="(item, index) in array()"><view @click="test(item)"></view></view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index"><view><view data-event-opts="{{[[\'tap\',[[\'e0\',[\'$event\']]]]]}}" data-event-params="{{({item})}}" bindtap="__e"></view></view></block>',
      'with(this){var l0=array();if(!_isMounted){e0=function($event,item){var _temp=arguments[arguments.length-1].currentTarget.dataset,_temp2=_temp.eventParams||_temp["event-params"],item=_temp2.item;var _temp,_temp2;return test(item)}}$mp.data=Object.assign({},{$root:{l0:l0}})}'
784
    )
785 786 787 788 789
    assertCodegen(
      '<view v-for="(item, index) in array()"><view @click.stop="test(item)"></view></view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index"><view><view data-event-opts="{{[[\'tap\',[[\'e0\',[\'$event\']]]]]}}" data-event-params="{{({item})}}" catchtap="__e"></view></view></block>',
      'with(this){var l0=array();if(!_isMounted){e0=function($event,item){var _temp=arguments[arguments.length-1].currentTarget.dataset,_temp2=_temp.eventParams||_temp["event-params"],item=_temp2.item;var _temp,_temp2;$event.stopPropagation();return test(item)}}$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
790 791 792 793 794 795 796 797 798
    assertCodegen(
      '<view v-for="(item, index) in array()"><view @click="test(item)">{{item}}</view></view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index"><view><view data-event-opts="{{[[\'tap\',[[\'e0\',[\'$event\']]]]]}}" data-event-params="{{({item})}}" bindtap="__e">{{item}}</view></view></block>',
      'with(this){var l0=array();if(!_isMounted){e0=function($event,item){var _temp=arguments[arguments.length-1].currentTarget.dataset,_temp2=_temp.eventParams||_temp["event-params"],item=_temp2.item;var _temp,_temp2;return test(item)}}$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
    assertCodegen(
      '<view v-for="(item, index) in array()"><view @click="test(item)">{{get(item)}}</view></view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index"><view><view data-event-opts="{{[[\'tap\',[[\'e0\',[\'$event\']]]]]}}" data-event-params="{{({item:item.$orig})}}" bindtap="__e">{{item.m0}}</view></view></block>',
      'with(this){var l0=__map(array(),function(item,index){var $orig=__get_orig(item);var m0=get(item);return{$orig:$orig,m0:m0}});if(!_isMounted){e0=function($event,item){var _temp=arguments[arguments.length-1].currentTarget.dataset,_temp2=_temp.eventParams||_temp["event-params"],item=_temp2.item;var _temp,_temp2;return test(item)}}$mp.data=Object.assign({},{$root:{l0:l0}})}'
799
    )
fxy060608's avatar
fxy060608 已提交
800 801 802 803 804 805 806 807 808 809
  })
  it('generate bool attr', () => {
    assertCodegen(
      '<video id class style inline-template controls/>',
      '<video id controls="{{true}}"></video>'
    )
    assertCodegen(
      '<video controls=""/>',
      '<video controls></video>'
    )
fxy060608's avatar
fxy060608 已提交
810
  })
811 812 813 814 815 816 817 818 819 820 821
  it('generate v-if', () => {
    assertCodegen(
      '<view v-if="show">{{getValue(key)}}</view>',
      '<block wx:if="{{show}}"><view>{{$root.m0}}</view></block>',
      'with(this){var m0=show?getValue(key):null;$mp.data=Object.assign({},{$root:{m0:m0}})}'
    )
    assertCodegen(
      '<view v-if="getValue(key)">{{getValue(key)}}</view>',
      '<block wx:if="{{$root.m0}}"><view>{{$root.m1}}</view></block>',
      'with(this){var m0=getValue(key);var m1=m0?getValue(key):null;$mp.data=Object.assign({},{$root:{m0:m0,m1:m1}})}'
    )
822 823
    assertCodegen(
      '<view v-if="test1(key)&&test2(key)">{{getValue(key)}}</view>',
824 825
      '<block wx:if="{{$root.m0}}"><view>{{$root.m1}}</view></block>',
      'with(this){var m0=test1(key)&&test2(key);var m1=m0?getValue(key):null;$mp.data=Object.assign({},{$root:{m0:m0,m1:m1}})}'
826
    )
827 828 829 830 831 832 833 834 835 836
    assertCodegen(
      '<view v-if="test.test(key)&&test2(key)">{{getValue(key)}}</view>',
      '<block wx:if="{{$root.g0}}"><view>{{$root.m0}}</view></block>',
      'with(this){var g0=test.test(key)&&test2(key);var m0=g0?getValue(key):null;$mp.data=Object.assign({},{$root:{g0:g0,m0:m0}})}'
    )
    assertCodegen(
      '<view v-if="show"><view v-if="test.test(key)&&test2(key)">{{getValue(key)}}</view></view>',
      '<block wx:if="{{show}}"><view><block wx:if="{{$root.g0}}"><view>{{$root.m0}}</view></block></view></block>',
      'with(this){var g0=show?test.test(key)&&test2(key):null;var m0=show&&g0?getValue(key):null;$mp.data=Object.assign({},{$root:{g0:g0,m0:m0}})}'
    )
837 838 839 840 841
    assertCodegen(
      '<view v-if="test&&!test.test(key1)&&!test.test(key2)">{{getValue(key)}}</view>',
      '<block wx:if="{{$root.g0}}"><view>{{$root.m0}}</view></block>',
      'with(this){var g0=test&&!test.test(key1)&&!test.test(key2);var m0=g0?getValue(key):null;$mp.data=Object.assign({},{$root:{g0:g0,m0:m0}})}'
    )
842 843 844 845 846
    assertCodegen(
      '<view v-for="(item,index) in list" :key="index"><view v-if="item">{{getValue(item)}}</view></view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view><block wx:if="{{item.$orig}}"><view>{{item.m0}}</view></block></view></block>',
      'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var m0=item?getValue(item):null;return{$orig:$orig,m0:m0}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
847 848 849 850 851
    assertCodegen(
      '<view v-for="(item,index) in list" :key="index"><view v-if="item.length">{{getValue(item)}}</view></view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view><block wx:if="{{item.$orig.length}}"><view>{{item.m0}}</view></block></view></block>',
      'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var m0=item.length?getValue(item):null;return{$orig:$orig,m0:m0}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
852 853 854 855 856
    assertCodegen(
      '<view v-for="(item,index) in list" :key="index"><view v-if="item.length>0">{{getValue(item)}}</view></view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view><block wx:if="{{item.$orig.length>0}}"><view>{{item.m0}}</view></block></view></block>',
      'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var m0=item.length>0?getValue(item):null;return{$orig:$orig,m0:m0}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
857 858 859 860 861 862 863 864 865 866 867 868 869 870 871
    assertCodegen(
      '<view v-for="(item,index) in list" :key="index"><view v-if="item.length>0">{{test(\'item\')}}</view></view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view><block wx:if="{{item.$orig.length>0}}"><view>{{item.m0}}</view></block></view></block>',
      'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var m0=item.length>0?test("item"):null;return{$orig:$orig,m0:m0}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
    assertCodegen(
      '<view v-for="(item,index) in list" :key="index"><view v-if="test(item)">{{test(\'item\')}}</view></view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view><block wx:if="{{item.m0}}"><view>{{item.m1}}</view></block></view></block>',
      'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var m0=test(item);var m1=m0?test("item"):null;return{$orig:$orig,m0:m0,m1:m1}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
    assertCodegen(
      '<view v-for="(item,index) in list" :key="index"><view v-if="test(item.id)"><view v-if="test(item.type)">{{test(\'item\')}}</view></view></view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view><block wx:if="{{item.m0}}"><view><block wx:if="{{item.m1}}"><view>{{item.m2}}</view></block></view></block></view></block>',
      'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var m0=test(item.id);var m1=m0?test(item.type):null;var m2=m0&&m1?test("item"):null;return{$orig:$orig,m0:m0,m1:m1,m2:m2}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
872 873 874 875 876
    assertCodegen(
      '<view v-for="(item,index) in list" :key="index"><view v-if="Object.values(item.list).length">{{test(item.list)}}</view></view>',
      '<block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view><block wx:if="{{item.g0.length}}"><view>{{item.m0}}</view></block></view></block>',
      'with(this){var l0=__map(list,function(item,index){var $orig=__get_orig(item);var g0=Object.values(item.list);var m0=g0.length?test(item.list):null;return{$orig:$orig,g0:g0,m0:m0}});$mp.data=Object.assign({},{$root:{l0:l0}})}'
    )
877
  })
878
})