@@ -1636,4 +1636,68 @@ describe('render()', () => {
16361636 '<div><div>One</div><div>Six</div><div>Seven</div></div>'
16371637 ) ;
16381638 } ) ;
1639+
1640+ it ( 'handles shuffled child-ordering' , function ( ) {
1641+ const App = ( { items } ) => (
1642+ < div >
1643+ { items . map ( key => (
1644+ < div key = { key } > { key } </ div >
1645+ ) ) }
1646+ </ div >
1647+ ) ;
1648+ const a = [ '0' , '1' , '2' , '3' , '4' , '5' , '6' ] ;
1649+ const b = [ '1' , '3' , '5' , '2' , '6' , '4' , '0' ] ;
1650+ const c = [ '11' , '3' , '1' , '4' , '6' , '2' , '5' , '0' , '9' , '10' ] ;
1651+ render ( < App items = { a } /> , scratch ) ;
1652+ clearLog ( ) ;
1653+ expect ( scratch . innerHTML ) . to . equal (
1654+ `<div>${ a . map ( n => `<div>${ n } </div>` ) . join ( '' ) } </div>`
1655+ ) ;
1656+
1657+ render ( < App items = { b } /> , scratch ) ;
1658+ expect ( scratch . innerHTML ) . to . equal (
1659+ `<div>${ b . map ( n => `<div>${ n } </div>` ) . join ( '' ) } </div>`
1660+ ) ;
1661+ expect ( getLog ( ) ) . to . deep . equal ( [
1662+ '<div>0123456.insertBefore(<div>2, <div>6)' ,
1663+ '<div>0134526.appendChild(<div>4)' ,
1664+ '<div>0135264.appendChild(<div>0)'
1665+ ] ) ;
1666+ clearLog ( ) ;
1667+
1668+ render ( < App items = { c } /> , scratch ) ;
1669+ expect ( scratch . innerHTML ) . to . equal (
1670+ `<div>${ c . map ( n => `<div>${ n } </div>` ) . join ( '' ) } </div>`
1671+ ) ;
1672+ expect ( getLog ( ) ) . to . deep . equal ( [
1673+ '<div>.appendChild(#text)' ,
1674+ '<div>1352640.insertBefore(<div>11, <div>1)' ,
1675+ '<div>111352640.insertBefore(<div>1, <div>5)' ,
1676+ '<div>113152640.insertBefore(<div>6, <div>0)' ,
1677+ '<div>113152460.insertBefore(<div>2, <div>0)' ,
1678+ '<div>113154620.insertBefore(<div>5, <div>0)' ,
1679+ '<div>.appendChild(#text)' ,
1680+ '<div>113146250.appendChild(<div>9)' ,
1681+ '<div>.appendChild(#text)' ,
1682+ '<div>1131462509.appendChild(<div>10)'
1683+ ] ) ;
1684+ clearLog ( ) ;
1685+
1686+ render ( < App items = { a } /> , scratch ) ;
1687+ expect ( scratch . innerHTML ) . to . equal (
1688+ `<div>${ a . map ( n => `<div>${ n } </div>` ) . join ( '' ) } </div>`
1689+ ) ;
1690+ expect ( getLog ( ) ) . to . deep . equal ( [
1691+ '<div>11.remove()' ,
1692+ '<div>9.remove()' ,
1693+ '<div>10.remove()' ,
1694+ '<div>3146250.appendChild(<div>1)' ,
1695+ '<div>3462501.appendChild(<div>2)' ,
1696+ '<div>3465012.appendChild(<div>3)' ,
1697+ '<div>4650123.appendChild(<div>4)' ,
1698+ '<div>6501234.appendChild(<div>5)' ,
1699+ '<div>6012345.appendChild(<div>6)'
1700+ ] ) ;
1701+ clearLog ( ) ;
1702+ } ) ;
16391703} ) ;
0 commit comments