@@ -314,12 +314,88 @@ describe('parser', () => {
314
314
expect ( liAst . alias ) . toBe ( '{ foo }' )
315
315
expect ( liAst . iterator1 ) . toBe ( 'i' )
316
316
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
+
317
325
// multi-var destructuring with index
318
326
ast = parse ( '<ul><li v-for="({ foo, bar, baz }, i) in items"></li></ul>' , baseOptions )
319
327
liAst = ast . children [ 0 ]
320
328
expect ( liAst . for ) . toBe ( 'items' )
321
329
expect ( liAst . alias ) . toBe ( '{ foo, bar, baz }' )
322
330
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' )
323
399
} )
324
400
325
401
it ( 'v-for directive invalid syntax' , ( ) => {
0 commit comments