package Ġcom . gu ym ichael . kotlin react . model Ċ Ċ import Ġcom . gu ym ichael . kotlin react . model . own state . Boolean State Ċ import Ġcom . gu ym ichael . kotlin react . model . own state . Double State Ċ import Ġcom . gu ym ichael . kotlin react . model . own state . Int State Ċ import Ġcom . gu ym ichael . kotlin react . model . props . Boolean Props Ċ Ċ internal Ġabstract Ġclass ĠTest Component < P Ġ: ĠOwn Props , ĠS Ġ: ĠOwn State > Ġ: ĠComponent < P , ĠS > Ġ{ ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġown State : ĠS ĊĠĠĠ Ġoverride Ġlateinit Ġvar Ġprops : ĠP ĊĠĠĠ Ġoverride Ġval Ġforce Re Render On Rem ount : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġvar Ġre Render Pending Rem ount Due To New Props : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġoverride Ġvar Ġre Render Pending Rem ount Due To New State : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ/* Ġhandle Ġ( test ) Ġmount s Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Is Mount ed Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Mount ed Callback : Ġ(( Boolean ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĠĠĠ Ġfun Ġtest Set Is Mount ed ( mounted : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Is Mount ed Ġ= Ġmounted ĊĠĠĠĠĠĠĠ Ġis Mount ed Callback ?. invoke ( mounted ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġfinal Ġoverride Ġfun Ġlisten On Mount State Changes ( consumer : Ġ( Boolean ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Mount ed Callback Ġ= Ġconsumer ĊĠĠĠ Ġ} ĊĠĠĠ Ġfinal Ġoverride Ġfun Ġis Mount ed () Ġ= Ġm Is Mount ed ĊĊĊĊĠĠĠ Ġ/* Ġhandle Ġ( test ) Ġlifecycle Ġ*/ ĊĠĠĠ Ġvar Ġdid Mount Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġfinal Ġoverride Ġfun ĠcomponentDidMount () Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . did Mount Count Ġ+= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġdid Update Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġfinal Ġoverride Ġfun ĠcomponentDid Update ( prev Props : ĠP , Ġprev State : ĠS , Ġsnapshot : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġdid Update Count Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġassert ( did Update Count Ġ+ Ġdid Mount Count Ġ== Ġrender Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ java Class . simple Name }: ĠcomponentDid Update Ġcount Ġ($ did Update Count )" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" and Ġdid Mount Ġcount Ġ($ did Mount Count ) Ġdon 't Ġmatch Ġrender Ġcount Ġ($ render Count )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert ( should Update Props Count Ġ+ Ġshould Update State Count Ġ== Ġdid Update Count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ java Class . simple Name }: ĠcomponentDid Update Ġcalled Ġmore Ġtimes Ġ($ did Mount Count ) Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" than Ġshould Update Props Count ($ should Update Props Count ) Ġand / or Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" should Update State Count ($ should Update State Count )") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġassert ( prev Should Update Props Ġ== Ġtrue Ġ|| Ġprev Should Update State Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ java Class . simple Name }: ĠcomponentDid Update Ġcalled Ġwhile Ġneither Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" prev Should Update Props ($ prev Should Update Props ) Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" or Ġprev Should Update State ($ prev Should Update State ) Ġis Ġ' true '") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġshould Update Props Count Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġprev Should Update Props : ĠBoolean ? Ġ= Ġnull ĊĠĠĠ Ġfinal Ġoverride Ġfun Ġshould Component Update ( next Props : ĠP ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġshould Update Props Count Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . should Component Update ( next Props ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Should Update Props Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġshould Update State Count Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġprev Should Update State : ĠBoolean ? Ġ= Ġnull ĊĠĠĠ Ġfinal Ġoverride Ġfun Ġshould Component Update ( next State : ĠS ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġshould Update State Count Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . should Component Update ( next State ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprev Should Update State Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġvar Ġwill Unmount Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġoverride Ġfun ĠcomponentWill Unmount () Ġ{ ĊĠĠĠĠĠĠĠ Ġwill Unmount Count Ġ+= Ġ 1 ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/* Ġhandle Ġ( test ) Ġrenders Ġ*/ ĊĠĠĠ Ġvar Ġrender Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġfinal Ġoverride Ġfun Ġrender () Ġ{ ĊĠĠĠĠĠĠĠ Ġassert ( is Mount ed ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ("${ java Class . simple Name }: Ġrender Ġ# ${ render Count + 1 } Ġcalled Ġwhile Ġdis mounted ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrender Count Ġ+= Ġ 1 ĊĠĠĠĠĠĠĠ Ġprintln ("${ java Class . simple Name }: Ġrender Ġ#$ render Count ") ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠTest Component _ Boolean Ġ: ĠTest Component < Boolean Props , ĠBoolean State >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate InitialState ( props : ĠBoolean Props ) Ġ= ĠBoolean State ( props . value ) Ċ } Ċ Ċ internal Ġclass ĠTest Component _ Complex Ġ: ĠTest Component < Complex Props , ĠDouble State >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġcreate InitialState ( props : ĠComplex Props ) Ġ= ĠDouble State ( props . init _ c ) Ċ } Ċ internal Ġdata Ġclass ĠComplex Props ( val Ġa : ĠInt , Ġval Ġb : ĠList < String >, Ġval Ġinit _ c : ĠDouble ) Ġ: ĠOwn Props () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetAll Members () Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġa , Ġb ĊĠĠĠ Ġ) Ċ }