@@ -1531,6 +1531,20 @@ describe('Vapor Mode hydration', () => {
1531
1531
`<span></span>` +
1532
1532
`</div>` ,
1533
1533
)
1534
+
1535
+ data . value . splice ( 0 , 1 )
1536
+ await nextTick ( )
1537
+ expect ( container . innerHTML ) . toBe (
1538
+ `<div>` +
1539
+ `<span></span>` +
1540
+ `<!--[-->` +
1541
+ `<span>b</span>` +
1542
+ `<span>c</span>` +
1543
+ `<span>d</span>` +
1544
+ `<!--]-->` +
1545
+ `<span></span>` +
1546
+ `</div>` ,
1547
+ )
1534
1548
} )
1535
1549
1536
1550
test ( 'consecutive v-for with anchor insertion' , async ( ) => {
@@ -1583,13 +1597,135 @@ describe('Vapor Mode hydration', () => {
1583
1597
`<span></span>` +
1584
1598
`</div>` ,
1585
1599
)
1600
+
1601
+ data . value . splice ( 0 , 2 )
1602
+ await nextTick ( )
1603
+ expect ( container . innerHTML ) . toBe (
1604
+ `<div>` +
1605
+ `<span></span>` +
1606
+ `<!--[-->` +
1607
+ `<span>c</span>` +
1608
+ `<span>d</span>` +
1609
+ `<!--]-->` +
1610
+ `<!--[-->` +
1611
+ `<span>c</span>` +
1612
+ `<span>d</span>` +
1613
+ `<!--]-->` +
1614
+ `<span></span>` +
1615
+ `</div>` ,
1616
+ )
1586
1617
} )
1587
1618
1588
- // TODO wait for slots hydration support
1589
- test . todo ( 'v-for on component' , async ( ) => { } )
1619
+ test ( 'v-for on component' , async ( ) => {
1620
+ const { container, data } = await testHydration (
1621
+ `<template>
1622
+ <div>
1623
+ <components.Child v-for="item in data" :key="item"/>
1624
+ </div>
1625
+ </template>` ,
1626
+ {
1627
+ Child : `<template><div>comp</div></template>` ,
1628
+ } ,
1629
+ ref ( [ 'a' , 'b' , 'c' ] ) ,
1630
+ )
1590
1631
1591
- // TODO wait for slots hydration support
1592
- test . todo ( 'on fragment component' , async ( ) => { } )
1632
+ expect ( container . innerHTML ) . toBe (
1633
+ `<div>` +
1634
+ `<!--[-->` +
1635
+ `<div>comp</div>` +
1636
+ `<div>comp</div>` +
1637
+ `<div>comp</div>` +
1638
+ `<!--]-->` +
1639
+ `</div>` ,
1640
+ )
1641
+
1642
+ data . value . push ( 'd' )
1643
+ await nextTick ( )
1644
+ expect ( container . innerHTML ) . toBe (
1645
+ `<div>` +
1646
+ `<!--[-->` +
1647
+ `<div>comp</div>` +
1648
+ `<div>comp</div>` +
1649
+ `<div>comp</div>` +
1650
+ `<div>comp</div>` +
1651
+ `<!--]-->` +
1652
+ `</div>` ,
1653
+ )
1654
+ } )
1655
+
1656
+ test ( 'v-for on component with slots' , async ( ) => {
1657
+ const { container, data } = await testHydration (
1658
+ `<template>
1659
+ <div>
1660
+ <components.Child v-for="item in data" :key="item">
1661
+ <span>{{ item }}</span>
1662
+ </components.Child>
1663
+ </div>
1664
+ </template>` ,
1665
+ {
1666
+ Child : `<template><slot/></template>` ,
1667
+ } ,
1668
+ ref ( [ 'a' , 'b' , 'c' ] ) ,
1669
+ )
1670
+ expect ( container . innerHTML ) . toBe (
1671
+ `<div>` +
1672
+ `<!--[-->` +
1673
+ `<!--[--><span>a</span><!--]--><!--slot-->` +
1674
+ `<!--[--><span>b</span><!--]--><!--slot-->` +
1675
+ `<!--[--><span>c</span><!--]--><!--slot-->` +
1676
+ `<!--]-->` +
1677
+ `</div>` ,
1678
+ )
1679
+
1680
+ data . value . push ( 'd' )
1681
+ await nextTick ( )
1682
+ expect ( container . innerHTML ) . toBe (
1683
+ `<div>` +
1684
+ `<!--[-->` +
1685
+ `<!--[--><span>a</span><!--]--><!--slot-->` +
1686
+ `<!--[--><span>b</span><!--]--><!--slot-->` +
1687
+ `<!--[--><span>c</span><!--]--><!--slot-->` +
1688
+ `<span>d</span><!--slot-->` +
1689
+ `<!--]-->` +
1690
+ `</div>` ,
1691
+ )
1692
+ } )
1693
+
1694
+ test ( 'on fragment component' , async ( ) => {
1695
+ const { container, data } = await testHydration (
1696
+ `<template>
1697
+ <div>
1698
+ <components.Child v-for="item in data" :key="item"/>
1699
+ </div>
1700
+ </template>` ,
1701
+ {
1702
+ Child : `<template><div>foo</div>-bar-</template>` ,
1703
+ } ,
1704
+ ref ( [ 'a' , 'b' , 'c' ] ) ,
1705
+ )
1706
+ expect ( container . innerHTML ) . toBe (
1707
+ `<div>` +
1708
+ `<!--[-->` +
1709
+ `<!--[--><div>foo</div>-bar-<!--]-->` +
1710
+ `<!--[--><div>foo</div>-bar-<!--]-->` +
1711
+ `<!--[--><div>foo</div>-bar-<!--]-->` +
1712
+ `<!--]-->` +
1713
+ `</div>` ,
1714
+ )
1715
+
1716
+ data . value . push ( 'd' )
1717
+ await nextTick ( )
1718
+ expect ( container . innerHTML ) . toBe (
1719
+ `<div>` +
1720
+ `<!--[-->` +
1721
+ `<!--[--><div>foo</div>-bar-<!--]-->` +
1722
+ `<!--[--><div>foo</div>-bar-<!--]-->` +
1723
+ `<!--[--><div>foo</div>-bar-<!--]-->` +
1724
+ `<div>foo</div>-bar-` +
1725
+ `<!--]-->` +
1726
+ `</div>` ,
1727
+ )
1728
+ } )
1593
1729
1594
1730
// TODO wait for vapor TransitionGroup support
1595
1731
// v-for inside TransitionGroup does not render as a fragment
0 commit comments