@@ -5999,6 +5999,71 @@ jsdomDescribe('vdom', () => {
5999
5999
meta . setRenderResult ( vnode ) ;
6000
6000
assert . strictEqual ( onAttachCallCount , 2 ) ;
6001
6001
} ) ;
6002
+ it ( 'Should run onUpdate after the dom node has been updated in the dom' , ( ) => {
6003
+ let onUpdateCallCount = 0 ;
6004
+ const myDomNode = document . createElement ( 'div' ) ;
6005
+ const div = document . createElement ( 'div' ) ;
6006
+ let vnode = d ( {
6007
+ node : myDomNode ,
6008
+ onUpdate : ( ) => {
6009
+ onUpdateCallCount ++ ;
6010
+ }
6011
+ } ) ;
6012
+ const [ Widget , meta ] = getWidget ( vnode ) ;
6013
+ const r = renderer ( ( ) => w ( Widget , { } ) ) ;
6014
+ r . mount ( { domNode : div , sync : true } ) ;
6015
+ assert . strictEqual ( onUpdateCallCount , 0 ) ;
6016
+ meta . setRenderResult ( vnode ) ;
6017
+ assert . strictEqual ( onUpdateCallCount , 1 ) ;
6018
+ meta . setRenderResult ( vnode ) ;
6019
+ assert . strictEqual ( onUpdateCallCount , 2 ) ;
6020
+ meta . setRenderResult ( vnode ) ;
6021
+ assert . strictEqual ( onUpdateCallCount , 3 ) ;
6022
+ } ) ;
6023
+ it ( 'Should run onDetach after the dom node has been removed from the dom' , ( ) => {
6024
+ let onDetachCallCount = 0 ;
6025
+ const myDomNode = document . createElement ( 'div' ) ;
6026
+ const div = document . createElement ( 'div' ) ;
6027
+ let vnode = d ( {
6028
+ node : myDomNode ,
6029
+ onDetach : ( ) => {
6030
+ onDetachCallCount ++ ;
6031
+ }
6032
+ } ) ;
6033
+ const [ Widget , meta ] = getWidget ( vnode ) ;
6034
+ const r = renderer ( ( ) => w ( Widget , { } ) ) ;
6035
+ r . mount ( { domNode : div , sync : true } ) ;
6036
+ assert . strictEqual ( onDetachCallCount , 0 ) ;
6037
+ meta . setRenderResult ( vnode ) ;
6038
+ assert . strictEqual ( onDetachCallCount , 0 ) ;
6039
+ meta . setRenderResult ( null ) ;
6040
+ assert . strictEqual ( onDetachCallCount , 1 ) ;
6041
+ meta . setRenderResult ( vnode ) ;
6042
+ assert . strictEqual ( onDetachCallCount , 1 ) ;
6043
+ } ) ;
6044
+ it ( 'Should run onDetach after the dom node has been removed from the dom in nested dom node' , ( ) => {
6045
+ let onDetachCallCount = 0 ;
6046
+ const myDomNode = document . createElement ( 'div' ) ;
6047
+ const div = document . createElement ( 'div' ) ;
6048
+ let vnode = v ( 'div' , [
6049
+ d ( {
6050
+ node : myDomNode ,
6051
+ onDetach : ( ) => {
6052
+ onDetachCallCount ++ ;
6053
+ }
6054
+ } )
6055
+ ] ) ;
6056
+ const [ Widget , meta ] = getWidget ( vnode ) ;
6057
+ const r = renderer ( ( ) => w ( Widget , { } ) ) ;
6058
+ r . mount ( { domNode : div , sync : true } ) ;
6059
+ assert . strictEqual ( onDetachCallCount , 0 ) ;
6060
+ meta . setRenderResult ( vnode ) ;
6061
+ assert . strictEqual ( onDetachCallCount , 0 ) ;
6062
+ meta . setRenderResult ( null ) ;
6063
+ assert . strictEqual ( onDetachCallCount , 1 ) ;
6064
+ meta . setRenderResult ( vnode ) ;
6065
+ assert . strictEqual ( onDetachCallCount , 1 ) ;
6066
+ } ) ;
6002
6067
} ) ;
6003
6068
6004
6069
describe ( 'deferred properties' , ( ) => {
0 commit comments