@@ -325,6 +325,45 @@ describe( 'Renderer', () => {
325325 expect ( domP . childNodes . length ) . to . equal ( 0 ) ;
326326 } ) ;
327327
328+ it ( 'should update removed item when it is reinserted #2' , ( ) => {
329+ // Prepare view: root -> div "outer" -> div "inner" -> p.
330+ const viewP = new ViewElement ( 'p' ) ;
331+ const viewDivInner = new ViewElement ( 'div' , null , viewP ) ;
332+ const viewDivOuter = new ViewElement ( 'div' , null , viewDivInner ) ;
333+ viewRoot . appendChildren ( viewDivOuter ) ;
334+
335+ // Render view tree to DOM.
336+ renderer . markToSync ( 'children' , viewRoot ) ;
337+ renderer . render ( ) ;
338+
339+ // Remove div "outer" from root and render it.
340+ viewDivOuter . remove ( ) ;
341+ renderer . markToSync ( 'children' , viewRoot ) ;
342+ renderer . render ( ) ;
343+
344+ // Remove p from div "child" -- div "inner" won't be marked because it is in document fragment not view root.
345+ viewP . remove ( ) ;
346+ // Add div "outer" back to root.
347+ viewRoot . appendChildren ( viewDivOuter ) ;
348+ renderer . markToSync ( 'children' , viewRoot ) ;
349+
350+ // Render changes, view is: root -> div "outer" -> div "inner".
351+ renderer . render ( ) ;
352+
353+ // Same is expected in DOM.
354+ expect ( domRoot . childNodes . length ) . to . equal ( 1 ) ;
355+
356+ const domDivOuter = domRoot . childNodes [ 0 ] ;
357+ expect ( renderer . domConverter . viewToDom ( viewDivOuter , domRoot . document ) ) . to . equal ( domDivOuter ) ;
358+ expect ( domDivOuter . tagName ) . to . equal ( 'DIV' ) ;
359+ expect ( domDivOuter . childNodes . length ) . to . equal ( 1 ) ;
360+
361+ const domDivInner = domDivOuter . childNodes [ 0 ] ;
362+ expect ( renderer . domConverter . viewToDom ( viewDivInner , domRoot . document ) ) . to . equal ( domDivInner ) ;
363+ expect ( domDivInner . tagName ) . to . equal ( 'DIV' ) ;
364+ expect ( domDivInner . childNodes . length ) . to . equal ( 0 ) ;
365+ } ) ;
366+
328367 it ( 'should not throw when trying to update children of view element that got removed and lost its binding' , ( ) => {
329368 const viewFoo = new ViewText ( 'foo' ) ;
330369 const viewP = new ViewElement ( 'p' , null , viewFoo ) ;
0 commit comments