package Ġdev . gar age . rpm Ċ Ċ import Ġcom . bad oo . reak t ive . subject . publish . Publish Subject Ċ import Ġcom . bad oo . reak t ive . test . observable . assert No Values Ċ import Ġcom . bad oo . reak t ive . test . observable . assert Values Ċ import Ġcom . bad oo . reak t ive . test . observable . test Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . spy Ċ import Ġdev . gar age . rpm . Presentation Model . Lifecycle .* Ċ import Ġdev . gar age . rpm . test . Pm TestHelper Ċ import Ġdev . gar age . rpm . util . Schedulers Rule Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ class ĠState Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġs chedulers Ġ= ĠS chedulers Rule () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpm : ĠPresentation Model ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpm TestHelper : ĠP m TestHelper ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġpm Ġ= Ġspy () ĊĠĠĠĠĠĠĠ Ġpm TestHelper Ġ= ĠP m TestHelper ( pm ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdefault Diff Strategy The Same Content () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġpm . state < String >() ĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġstate . observable . test () ĊĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" foo ") ĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" foo ") ĊĊĠĠĠĠĠĠĠ Ġtest Observer . assert Values (" foo ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdefault Diff Strategy Content Is Different () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġpm . state < String >() ĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġstate . observable . test () ĊĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" foo ") ĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" bar ") ĊĊĠĠĠĠĠĠĠ Ġtest Observer . assert Values (" foo ", Ġ" bar ") ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwithout Diff Strategy () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġpm . state < String >( diff Strategy Ġ= Ġnull ) ĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġstate . observable . test () ĊĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" foo ") ĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" foo ") ĊĊĠĠĠĠĠĠĠ Ġtest Observer . assert Values (" foo ", Ġ" foo ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcustom Diff Strategy () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġpm . state ( diff Strategy Ġ= Ġobject Ġ: ĠDiff Strategy < String > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare The Same ( new : ĠString , Ġold : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( new Ġ== Ġ" foo ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Ġ== Ġold ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcompute Async () Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġstate . observable . test () ĊĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" foo ") ĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" foo ") ĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" bar ") ĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" bar ") ĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" baz ") ĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" baz ") ĊĊĠĠĠĠĠĠĠ Ġtest Observer . assert Values (" foo ", Ġ" foo ", Ġ" bar ", Ġ" baz ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġblocks Updates Before Created () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġpm . state (" foo ") ĊĠĠĠĠĠĠĠ Ġval Ġrelay Ġ= ĠPublish Subject < String >() ĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġrelay . test () ĊĊĠĠĠĠĠĠĠ Ġstate . bind To ( relay ) ĊĊĠĠĠĠĠĠĠ Ġtest Observer . assert No Values () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġblocks Updates Before Bin ded () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġpm . state (" foo ") ĊĠĠĠĠĠĠĠ Ġval Ġrelay Ġ= ĠPublish Subject < String >() ĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġrelay . test () ĊĊĠĠĠĠĠĠĠ Ġstate . bind To ( relay ) ĊĊĠĠĠĠĠĠĠ Ġpm TestHelper . set Lifecycle To ( CREATED ) ĊĊĠĠĠĠĠĠĠ Ġtest Observer . assert No Values () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġblocks Updates Before Res umed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġpm . state (" foo ") ĊĠĠĠĠĠĠĠ Ġval Ġrelay Ġ= ĠPublish Subject < String >() ĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġrelay . test () ĊĊĠĠĠĠĠĠĠ Ġstate . bind To ( relay ) ĊĊĠĠĠĠĠĠĠ Ġpm TestHelper . set Lifecycle To ( BIN DED ) ĊĊĠĠĠĠĠĠĠ Ġtest Observer . assert No Values () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġblocks Updates After Paused () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġpm . state < String >() ĊĠĠĠĠĠĠĠ Ġval Ġrelay Ġ= ĠPublish Subject < String >() ĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġrelay . test () ĊĊĠĠĠĠĠĠĠ Ġstate . bind To ( relay ) ĊĊĠĠĠĠĠĠĠ Ġpm TestHelper . set Lifecycle To ( PA USED ) ĊĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" foo ") ĊĊĠĠĠĠĠĠĠ Ġtest Observer . assert No Values () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġupdates When Res umed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġpm . state < String >() ĊĠĠĠĠĠĠĠ Ġval Ġrelay Ġ= ĠPublish Subject < String >() ĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġrelay . test () ĊĊĠĠĠĠĠĠĠ Ġstate . bind To ( relay ) ĊĊĠĠĠĠĠĠĠ Ġpm TestHelper . set Lifecycle To ( RE SU MED ) ĊĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" foo ") ĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" bar ") ĊĊĠĠĠĠĠĠĠ Ġtest Observer . assert Values (" foo ", Ġ" bar ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsend Buffered Value After Res umed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġpm . state < String >() ĊĠĠĠĠĠĠĠ Ġval Ġrelay Ġ= ĠPublish Subject < String >() ĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġrelay . test () ĊĊĠĠĠĠĠĠĠ Ġstate . bind To ( relay ) ĊĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" foo ") ĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" bar ") ĊĊĠĠĠĠĠĠĠ Ġpm TestHelper . set Lifecycle To ( RE SU MED ) ĊĊĠĠĠĠĠĠĠ Ġtest Observer . assert Values (" bar ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsend Buffered Value After Res umed Again () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstate Ġ= Ġpm . state < String >() ĊĠĠĠĠĠĠĠ Ġval Ġrelay Ġ= ĠPublish Subject < String >() ĊĠĠĠĠĠĠĠ Ġval Ġtest Observer Ġ= Ġrelay . test () ĊĊĠĠĠĠĠĠĠ Ġstate . bind To ( relay ) ĊĊĠĠĠĠĠĠĠ Ġpm TestHelper . set Lifecycle To ( PA USED ) ĊĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" foo ") ĊĠĠĠĠĠĠĠ Ġstate . relay . accept (" bar ") ĊĊĠĠĠĠĠĠĠ Ġpm TestHelper . set Lifecycle To ( RE SU MED ) ĊĊĠĠĠĠĠĠĠ Ġtest Observer . assert Values (" bar ") ĊĊĠĠĠ Ġ} Ċ }