/* Ċ Ġ* ĠThe ĠMIT ĠLicense Ġ( MIT ) Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 1 8 ĠShop ify ĠInc . Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ċ Ġ* Ġall Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN Ċ Ġ* ĠTHE ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . shop ify . li ved ata k tx Ċ Ċ import Ġandroid . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroid . arch . lifecycle . Lifecycle Ċ import Ġandroid . arch . lifecycle . Lifecycle Owner Ċ import Ġandroid . arch . lifecycle . Lifecycle Registry Ċ import Ġandroid . arch . lifecycle . Mutable LiveData Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Test Rule Ċ Ċ class ĠLive Data Test Ġ: ĠLifecycle Owner Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġrule : ĠTest Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġoverride Ġfun Ġget Lifecycle (): ĠLifecycle Ġ= Ġlifecycle Registry ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlifecycle Registry : ĠLifecycle Registry ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Registry Ġ= ĠLifecycle Registry ( this ) ĊĠĠĠĠĠĠĠ Ġlifecycle Registry . handle Lifecycle Event ( Lifecycle . Event . ON _ CREATE ) ĊĠĠĠĠĠĠĠ Ġlifecycle Registry . handle Lifecycle Event ( Lifecycle . Event . ON _ START ) ĊĠĠĠĠĠĠĠ Ġlifecycle Registry . handle Lifecycle Event ( Lifecycle . Event . ON _ RE SU ME ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġteardown () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Registry . handle Lifecycle Event ( Lifecycle . Event . ON _ PAUSE ) ĊĠĠĠĠĠĠĠ Ġlifecycle Registry . handle Lifecycle Event ( Lifecycle . Event . ON _ STOP ) ĊĠĠĠĠĠĠĠ Ġlifecycle Registry . handle Lifecycle Event ( Lifecycle . Event . ON _ DESTROY ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdistinct () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlive Data : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ Ġval Ġactual s : ĠMutable List < Boolean ?> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : Ġ( t : ĠBoolean ?) Ġ-> ĠUnit Ġ= Ġ{ Ġactual s . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġlive Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , Ġobserver ) ĊĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected s Ġ= Ġmutable ListOf ( true , Ġfalse , Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected s , Ġactual s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfilter () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlive Data : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ Ġval Ġactual s : ĠMutable List < Boolean ?> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : Ġ( t : ĠBoolean ?) Ġ-> ĠUnit Ġ= Ġ{ Ġactual s . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġlive Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġ== Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , Ġobserver ) ĊĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected s Ġ= Ġmutable ListOf ( true , Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected s , Ġactual s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfirst () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlive Data : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ Ġval Ġactual s : ĠMutable List < Boolean ?> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : Ġ( t : ĠBoolean ?) Ġ-> ĠUnit Ġ= Ġ{ Ġactual s . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġlive Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , Ġobserver ) ĊĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected s Ġ= Ġmutable ListOf ( true ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected s , Ġactual s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmap () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlive Data : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ Ġval Ġactual s : ĠMutable List < Boolean ?> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : Ġ( t : ĠBoolean ?) Ġ-> ĠUnit Ġ= Ġ{ Ġactual s . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġlive Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , Ġobserver ) ĊĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected s Ġ= Ġmutable ListOf ( true , Ġtrue , Ġtrue , Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected s , Ġactual s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnon Null () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlive Data : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ Ġval Ġactual s : ĠMutable List < Boolean > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : Ġ( t : ĠBoolean ) Ġ-> ĠUnit Ġ= Ġ{ Ġactual s . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġlive Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. non Null () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , Ġobserver ) ĊĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected s Ġ= Ġmutable ListOf ( true , Ġfalse , Ġfalse , Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected s , Ġactual s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsingle _ observe Direct ly () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlive Data : ĠMutable LiveData < Int > Ġ= ĠSingle LiveData () ĊĠĠĠĠĠĠĠ Ġval Ġactual s : ĠMutable List < Int ?> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : Ġ( t : ĠInt ?) Ġ-> ĠUnit Ġ= Ġ{ Ġactual s . add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġlive Data . observe ( this , Ġobserver ) ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected s Ġ= Ġmutable ListOf ( 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected s , Ġactual s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsingle _ observe Direct ly More Than One In Different Time () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlive Data : ĠMutable LiveData < Int > Ġ= ĠSingle LiveData () ĊĠĠĠĠĠĠĠ Ġval Ġactual s 1 : ĠMutable List < Int ?> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġobserver 1 : Ġ( t : ĠInt ?) Ġ-> ĠUnit Ġ= Ġ{ Ġactual s 1 . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġactual s 2 : ĠMutable List < Int ?> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġobserver 2 : Ġ( t : ĠInt ?) Ġ-> ĠUnit Ġ= Ġ{ Ġactual s 2 . add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġlive Data . observe ( this , Ġobserver 1 ) ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġlive Data . observe ( this , Ġobserver 2 ) ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġ 4 ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected s 1 Ġ= Ġmutable ListOf ( 2 , Ġ 3 , Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected s 2 Ġ= Ġmutable ListOf ( 3 , Ġ 4 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected s 1 , Ġactual s 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected s 2 , Ġactual s 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsingle _ combine With Other Extension () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlive Data : ĠMutable LiveData < Int > Ġ= ĠSingle LiveData () ĊĠĠĠĠĠĠĠ Ġval Ġactual s 1 : ĠMutable List < Int ?> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġobserver 1 : Ġ( t : ĠInt ?) Ġ-> ĠUnit Ġ= Ġ{ Ġactual s 1 . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġactual s 2 : ĠMutable List < Int ?> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġobserver 2 : Ġ( t : ĠInt ?) Ġ-> ĠUnit Ġ= Ġ{ Ġactual s 2 . add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġlive Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit ?. let Ġ{ Ġit Ġ+ Ġ 1 Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , Ġobserver 1 ) ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġlive Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. non Null () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit Ġ+ Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , Ġobserver 2 ) ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġ 4 ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected s 1 Ġ= Ġmutable ListOf ( 3 , Ġ 4 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected s 2 Ġ= Ġmutable ListOf ( 5 , Ġ 6 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected s 1 , Ġactual s 1 ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected s 2 , Ġactual s 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcombine With () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Source Ġ= ĠMutable LiveData < Int >() ĊĠĠĠĠĠĠĠ Ġval Ġsecond Source Ġ= ĠMutable LiveData < String >() ĊĠĠĠĠĠĠĠ Ġval Ġactual s Ġ= Ġmutable ListOf < Int ?> () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : Ġ( t : ĠInt ?) Ġ-> ĠUnit Ġ= Ġ{ Ġactual s . add ( it ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġfirst Source . value Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġsecond Source . value Ġ= Ġ" 2 " ĊĊĠĠĠĠĠĠĠ Ġfirst Source ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. combine With ( second Source ) Ġ{ Ġi , Ġs Ġ-> Ġi !! Ġ+ Ġs !!. toInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , Ġobserver ) ĊĊĠĠĠĠĠĠĠ Ġobserver ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġfirst Source ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. non Null () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. combine With ( second Source ) Ġ{ Ġi , Ġs Ġ-> Ġi Ġ+ Ġs !!. toInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , Ġobserver ) ĊĊĠĠĠĠĠĠĠ Ġobserver ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġfirst Source ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. combine With ( second Source . non Null ()) Ġ{ Ġi , Ġs Ġ-> Ġi !! Ġ+ Ġs . toInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , Ġobserver ) ĊĊĠĠĠĠĠĠĠ Ġobserver ( 1 ) ĊĊĠĠĠĠĠĠĠ Ġfirst Source ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. non Null () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. combine With ( second Source . non Null ()) Ġ{ Ġi , Ġs Ġ-> Ġi Ġ+ Ġs . toInt () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , Ġobserver ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( mutable ListOf ( 3 , Ġ 1 , Ġ 3 , Ġ 1 , Ġ 3 , Ġ 1 , Ġ 3 ), Ġactual s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġremove Observer (){ ĊĠĠĠĠĠĠĠ Ġval Ġlive Data : ĠMutable LiveData < Boolean > Ġ= ĠMutable LiveData () ĊĠĠĠĠĠĠĠ Ġval Ġactual s : ĠMutable List < Boolean ?> Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġval Ġobserver : Ġ( t : ĠBoolean ?) Ġ-> ĠUnit Ġ= Ġ{ Ġactual s . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġremov able Ġ= Ġlive Data ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe ( this , Ġobserver ) ĊĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġremov able . remove Observer () ĊĠĠĠĠĠĠĠ Ġlive Data . value Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected s Ġ= Ġmutable ListOf ( true , Ġfalse ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected s , Ġactual s ) ĊĠĠĠ Ġ} Ċ }