@@ -314,12 +314,88 @@ describe('parser', () => {
314314 expect ( liAst . alias ) . toBe ( '{ foo }' )
315315 expect ( liAst . iterator1 ) . toBe ( 'i' )
316316
317+ // with key + index
318+ ast = parse ( '<ul><li v-for="({ foo }, i, j) in items"></li></ul>' , baseOptions )
319+ liAst = ast . children [ 0 ]
320+ expect ( liAst . for ) . toBe ( 'items' )
321+ expect ( liAst . alias ) . toBe ( '{ foo }' )
322+ expect ( liAst . iterator1 ) . toBe ( 'i' )
323+ expect ( liAst . iterator2 ) . toBe ( 'j' )
324+
317325 // multi-var destructuring with index
318326 ast = parse ( '<ul><li v-for="({ foo, bar, baz }, i) in items"></li></ul>' , baseOptions )
319327 liAst = ast . children [ 0 ]
320328 expect ( liAst . for ) . toBe ( 'items' )
321329 expect ( liAst . alias ) . toBe ( '{ foo, bar, baz }' )
322330 expect ( liAst . iterator1 ) . toBe ( 'i' )
331+
332+ // array
333+ ast = parse ( '<ul><li v-for="[ foo ] in items"></li></ul>' , baseOptions )
334+ liAst = ast . children [ 0 ]
335+ expect ( liAst . for ) . toBe ( 'items' )
336+ expect ( liAst . alias ) . toBe ( '[ foo ]' )
337+
338+ // multi-array
339+ ast = parse ( '<ul><li v-for="[ foo, bar, baz ] in items"></li></ul>' , baseOptions )
340+ liAst = ast . children [ 0 ]
341+ expect ( liAst . for ) . toBe ( 'items' )
342+ expect ( liAst . alias ) . toBe ( '[ foo, bar, baz ]' )
343+
344+ // array with paren
345+ ast = parse ( '<ul><li v-for="([ foo ]) in items"></li></ul>' , baseOptions )
346+ liAst = ast . children [ 0 ]
347+ expect ( liAst . for ) . toBe ( 'items' )
348+ expect ( liAst . alias ) . toBe ( '[ foo ]' )
349+
350+ // multi-array with paren
351+ ast = parse ( '<ul><li v-for="([ foo, bar, baz ]) in items"></li></ul>' , baseOptions )
352+ liAst = ast . children [ 0 ]
353+ expect ( liAst . for ) . toBe ( 'items' )
354+ expect ( liAst . alias ) . toBe ( '[ foo, bar, baz ]' )
355+
356+ // array with index
357+ ast = parse ( '<ul><li v-for="([ foo ], i) in items"></li></ul>' , baseOptions )
358+ liAst = ast . children [ 0 ]
359+ expect ( liAst . for ) . toBe ( 'items' )
360+ expect ( liAst . alias ) . toBe ( '[ foo ]' )
361+ expect ( liAst . iterator1 ) . toBe ( 'i' )
362+
363+ // array with key + index
364+ ast = parse ( '<ul><li v-for="([ foo ], i, j) in items"></li></ul>' , baseOptions )
365+ liAst = ast . children [ 0 ]
366+ expect ( liAst . for ) . toBe ( 'items' )
367+ expect ( liAst . alias ) . toBe ( '[ foo ]' )
368+ expect ( liAst . iterator1 ) . toBe ( 'i' )
369+ expect ( liAst . iterator2 ) . toBe ( 'j' )
370+
371+ // multi-array with paren
372+ ast = parse ( '<ul><li v-for="([ foo, bar, baz ]) in items"></li></ul>' , baseOptions )
373+ liAst = ast . children [ 0 ]
374+ expect ( liAst . for ) . toBe ( 'items' )
375+ expect ( liAst . alias ) . toBe ( '[ foo, bar, baz ]' )
376+
377+ // multi-array with index
378+ ast = parse ( '<ul><li v-for="([ foo, bar, baz ], i) in items"></li></ul>' , baseOptions )
379+ liAst = ast . children [ 0 ]
380+ expect ( liAst . for ) . toBe ( 'items' )
381+ expect ( liAst . alias ) . toBe ( '[ foo, bar, baz ]' )
382+ expect ( liAst . iterator1 ) . toBe ( 'i' )
383+
384+ // nested
385+ ast = parse ( '<ul><li v-for="({ foo, bar: { baz }, qux: [ n ] }, i, j) in items"></li></ul>' , baseOptions )
386+ liAst = ast . children [ 0 ]
387+ expect ( liAst . for ) . toBe ( 'items' )
388+ expect ( liAst . alias ) . toBe ( '{ foo, bar: { baz }, qux: [ n ] }' )
389+ expect ( liAst . iterator1 ) . toBe ( 'i' )
390+ expect ( liAst . iterator2 ) . toBe ( 'j' )
391+
392+ // array nested
393+ ast = parse ( '<ul><li v-for="([ foo, { bar }, baz ], i, j) in items"></li></ul>' , baseOptions )
394+ liAst = ast . children [ 0 ]
395+ expect ( liAst . for ) . toBe ( 'items' )
396+ expect ( liAst . alias ) . toBe ( '[ foo, { bar }, baz ]' )
397+ expect ( liAst . iterator1 ) . toBe ( 'i' )
398+ expect ( liAst . iterator2 ) . toBe ( 'j' )
323399 } )
324400
325401 it ( 'v-for directive invalid syntax' , ( ) => {
0 commit comments