package Ġcom . max im b irc u . devtools . common Ċ Ċ import Ġcom . max im b irc u . devtools . common . core . Dev Tool Ċ import Ġcom . max im b irc u . devtools . common . core . create Tool Ċ import Ġcom . max im b irc u . devtools . common . extensions . forEach Re cursively Ċ import Ġcom . max im b irc u . devtools . common . mvp . Base Test Ċ import Ġcom . max im b irc u . devtools . common . presentation . tools . group . Group Tool Ċ import Ġcom . max im b irc u . devtools . common . presentation . tools . text . Text Tool Ċ import Ġcom . max im b irc u . devtools . common . presentation . tools . toggle . Toggle Tool Ċ import Ġcom . max im b irc u . devtools . common . readers . Dev Tools Sources Ċ import Ġcom . max im b irc u . devtools . common . readers . memory Ċ import Ġcom . max im b irc u . devtools . common . utils . mock k Ċ import Ġcom . max im b irc u . devtools . common . utils . returns Ċ import Ġio . mock k . Called Ċ import Ġio . mock k . clear All Mocks Ċ import Ġio . mock k . spy k Ċ import Ġio . mock k . verify Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠDev Tools Impl Test Ġ: ĠBaseTest () Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` rest ores Ġpersisted Ġstate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtools Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - tool " Ġto Ġcreate Tool Ġ{ Ġ:: has Un saved Changes Ġreturns Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" second - tool " Ġto Ġcreate Tool < Group Tool > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: tools Ġreturns Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - child - tool " Ġto Ġcreate Tool < Toggle Tool >(), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" second - child - tool " Ġto Ġcreate Tool < Text Tool > Ġ{ Ġ:: has Un saved Changes Ġreturns Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠDev Tools . create (" TEST ", ĠDev Tools Sources . memory ( tools )) ĊĊĠĠĠĠĠĠĠ Ġtools . forEach Re cursively Ġ{ Ġ_, Ġtool Ġ-> Ġverify Ġ{ Ġtool . restore Pers isted State () Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` pers ists Ġtool Ġstate Ġin Ġcase Ġit Ġhas Ġun saved Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Tools Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - child - tool " Ġto Ġcreate Tool < Toggle Tool >(), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" second - child - tool " Ġto Ġcreate Tool < Text Tool > Ġ{ Ġ:: has Un saved Changes Ġreturns Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtools Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - tool " Ġto Ġcreate Tool Ġ{ Ġ:: has Un saved Changes Ġreturns Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" second - tool " Ġto Ġcreate Tool < Group Tool > Ġ{ Ġ:: tools Ġreturns Ġchild Tools Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdev Tools Ġ= ĠDev Tools . create (" TEST ", ĠDev Tools Sources . memory ( tools )) ĊĊĠĠĠĠĠĠĠ Ġdev Tools . persist Tools State () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġtools . getValue (" first - tool "). persist State () Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġchild Tools . getValue (" second - child - tool "). persist State () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` not ifies Ġthe Ġlistener Ġabout Ġtools Ġconfig Ġupdate Ġif Ġat Ġleast Ġone Ġtool Ġwas Ġupdated `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġon Config Update : Ġ( Boolean ) Ġ-> ĠUnit Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġdev Tools Ġ= ĠDev Tools . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" TEST ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDev Tools Sources . memory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - tool " Ġto Ġcreate Tool Ġ{ Ġ:: has Un saved Changes Ġreturns Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" second - tool " Ġto Ġcreate Tool () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Config Update Ġ= Ġon Config Update ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdev Tools . persist Tools State () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġon Config Update ( false ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` does n 't Ġnotify Ġthe Ġlistener Ġabout Ġtools Ġcritical Ġconfig Ġupdate Ġif Ġthere Ġare Ġno Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġon Config Update : Ġ( Boolean ) Ġ-> ĠUnit Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġdev Tools Ġ= ĠDev Tools . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" TEST ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDev Tools Sources . memory ( map Of (" first - tool " Ġto Ġcreate Tool ())), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Config Update Ġ= Ġon Config Update ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdev Tools . persist Tools State () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġon Config Update ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` not ifies Ġthe Ġlistener Ġabout Ġtools Ġcritical Ġconfig Ġupdate Ġif Ġat Ġleast Ġone Ġhappened `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġon Config Update : Ġ( Boolean ) Ġ-> ĠUnit Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġval Ġdev Tools Ġ= ĠDev Tools . create ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" TEST ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDev Tools Sources . memory ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - tool " Ġto Ġcreate Tool Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: has Un saved Changes Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: is Critical Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" second - tool " Ġto Ġcreate Tool () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġdev Tools . on Config Updated Ġ= Ġon Config Update ĊĊĠĠĠĠĠĠĠ Ġdev Tools . persist Tools State () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġon Config Update ( true ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` updates Ġdev Ġtools Ġfrom Ġprovided Ġparams `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Tools Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - tool " Ġto Ġcreate Tool Ġ{ Ġ:: key Ġreturns Ġ" group - tool . first - tool " Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" second - tool " Ġto Ġcreate Tool < Text Tool > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: key Ġreturns Ġ" group - tool . second - tool " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: value Ġreturns Ġ" Config Ġvalue " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtools Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - tool " Ġto Ġcreate Tool < Toggle Tool > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: key Ġreturns Ġ" first - tool " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: value Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" group - tool " Ġto Ġcreate Tool < Group Tool > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: key Ġreturns Ġ" group - tool " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: tools Ġreturns Ġchild Tools ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdev Tools Ġ= Ġspy k ( Dev Tools . create (" TEST ", ĠDev Tools Sources . memory ( tools ))) ĊĊĠĠĠĠĠĠĠ Ġdev Tools . update From Params ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - tool " Ġto Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" group - tool . second - tool " Ġto Ġ" New Ġconfig Ġvalue " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġtools . getValue (" first - tool "). isEnabled Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġchild Tools . getValue (" second - tool "). isEnabled Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġtools . getValue (" first - tool ") Ġset Property Ġ" value " Ġvalue Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġchild Tools . getValue (" second - tool ") Ġset Property Ġ" value " Ġvalue Ġ" New Ġconfig Ġvalue " Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġdev Tools . persist Tools State () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` does n 't Ġtouch Ġthe Ġtools Ġin Ġcase Ġthe Ġprovided Ġparams Ġare Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Tools Ġ= Ġmap Of < String , ĠDev Tool < *> >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - tool " Ġto Ġcreate Tool Ġ{ Ġ:: key Ġreturns Ġ" group - tool . first - tool " Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" second - tool " Ġto Ġcreate Tool < Text Tool > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: key Ġreturns Ġ" group - tool . second - tool " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: value Ġreturns Ġ" Config Ġvalue " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġtools Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - tool " Ġto Ġcreate Tool < Toggle Tool > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: key Ġreturns Ġ" first - tool " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: value Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" group - tool " Ġto Ġcreate Tool < Group Tool > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: key Ġreturns Ġ" group - tool " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: tools Ġreturns Ġchild Tools ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġdev Tools Ġ= Ġspy k ( Dev Tools . create (" TEST ", ĠDev Tools Sources . memory ( tools ))) ĊĠĠĠĠĠĠĠ Ġclear All Mocks () ĊĊĠĠĠĠĠĠĠ Ġdev Tools . update From Params ( empty Map ()) ĊĊĠĠĠĠĠĠĠ Ġtools . values . forEach Ġ{ Ġtool Ġ-> Ġverify Ġ{ Ġtool Ġwas Not ĠCalled Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġchild Tools . values . forEach Ġ{ Ġtool Ġ-> Ġverify Ġ{ Ġtool Ġwas Not ĠCalled Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġdev Tools . persist Tools State () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` checks Ġ` () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtools Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - tool " Ġto Ġcreate Tool Ġ{ Ġ:: has Un saved Changes Ġreturns Ġtrue Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" second - tool " Ġto Ġcreate Tool < Group Tool > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ:: tools Ġreturns Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" first - child - tool " Ġto Ġcreate Tool < Toggle Tool >(), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" second - child - tool " Ġto Ġcreate Tool < Text Tool > Ġ{ Ġ:: has Un saved Changes Ġreturns Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdev Tools Ġ= ĠDev Tools . create (" TEST ", ĠDev Tools Sources . memory ( tools )) ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( dev Tools . there Exist Un saved Changes ) ĊĠĠĠ Ġ} Ċ } Ċ