package Ġio . github . toy ota 3 2 k . bind it Ċ Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġio . github . toy ota 3 2 k . utils . and Ċ import Ġio . github . toy ota 3 2 k . utils . combine Latest Ċ import Ġio . github . toy ota 3 2 k . utils . not Ċ import Ġio . github . toy ota 3 2 k . utils . or Ċ import Ġjunit . framework . Assert .* Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . ro bo lectric . Ro bo lectric Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġorg . ro bo lectric . android . controller . Activity Controller Ċ Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ class ĠLive Data Test Ġ{ ĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġinstant Executor Rule Ġ: ĠInstant Task Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġactivity Controller Ġ: ĠActivity Controller < Just Test Activity > ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Activity (): ĠAppCompatActivity Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Controller Ġ= ĠRo bo lectric . build Activity ( Just Test Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġreturn Ġactivity Controller . create (). start (). get () Ġas ĠAppCompatActivity ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġfinish () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Controller . pause (). destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcombine Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġcreate Activity () ĊĊĠĠĠĠĠĠĠ Ġval Ġsource 0 Ġ= ĠMutable LiveData < Int >( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġsource 1 Ġ= ĠMutable LiveData < Int >( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġsource 2 Ġ= ĠMutable LiveData < Int >( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġsource 3 Ġ= ĠMutable LiveData < Int >( 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġsource 4 Ġ= ĠMutable LiveData < Int >( 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġc 2 Ġ= Ġcombine Latest ( source 0 , source 1 ) Ġ{ Ġa , b -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( a ?: 0 ) Ġ+ Ġ( b ?: 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġc 3 Ġ= Ġcombine Latest ( source 0 , source 1 , source 2 ) Ġ{ a , b , c -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( a ?: 0 ) Ġ+ Ġ( b ?: 0 ) Ġ+ Ġ( c ?: 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġc 4 Ġ= Ġcombine Latest ( source 0 , source 1 , source 2 , source 3 ) Ġ{ a , b , c , d -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( a ?: 0 ) Ġ+ Ġ( b ?: 0 ) Ġ+ Ġ( c ?: 0 ) Ġ+ Ġ( d ?: 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġc 5 Ġ= Ġcombine Latest ( source 0 , source 1 , source 2 , source 3 , source 4 ) Ġ{ a , b , c , d , e -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( a ?: 0 ) Ġ+ Ġ( b ?: 0 ) Ġ+ Ġ( c ?: 0 ) Ġ+ Ġ( d ?: 0 ) Ġ+ Ġ( e ?: 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , c 2 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , c 3 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , c 4 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , c 5 . value ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠObserver ãģĮ ãĤ»ãĥĥãĥĪ ãģķãĤĮ ãģ¦ãģĦ ãģªãģĦ çĬ¶æħĭ ãģ§ãģ¯ ãĢģ Mediator LiveData ãģ® åĢ¤ ãģ¯ å¤ī åĮĸ ãģĹãģªãģĦ ĊĠĠĠĠĠĠĠ Ġsource 0 . value Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , c 2 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , c 3 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , c 4 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , c 5 . value ) Ċ Ċ // ĠĠĠĠĠĠĠ Ġc 2 . observe ( activity ) Ġ{} Ċ // ĠĠĠĠĠĠĠ Ġc 3 . observe ( activity ) Ġ{} Ċ // ĠĠĠĠĠĠĠ Ġc 4 . observe ( activity ) Ġ{} Ċ // ĠĠĠĠĠĠĠ Ġc 5 . observe ( activity ) Ġ{} ĊĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġ Ġcombine Latest ( c 2 , c 3 , c 4 , c 5 ) Ġ{ a , b , c , d -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( a ?: 0 ) Ġ+ Ġ( b ?: 0 ) Ġ+ Ġ( c ?: 0 ) Ġ+ Ġ( d ?: 0 ) ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm . observe ( activity ) Ġ{} ĊĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , c 2 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , c 3 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , c 4 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , c 5 . value ) ĊĊĠĠĠĠĠĠĠ Ġsource 1 . value Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , c 2 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , c 3 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , c 4 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , c 5 . value ) ĊĊĠĠĠĠĠĠĠ Ġsource 2 . value Ġ= Ġ 3 ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , c 2 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 , c 3 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 , c 4 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 , c 5 . value ) ĊĊĠĠĠĠĠĠĠ Ġsource 3 . value Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , c 2 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 , c 3 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 , c 4 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 , c 5 . value ) ĊĊĠĠĠĠĠĠĠ Ġsource 4 . value Ġ= Ġ 5 ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , c 2 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 6 , c 3 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 0 , c 4 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 5 , c 5 . value ) ĊĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġand Or Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġcreate Activity () ĊĊĠĠĠĠĠĠĠ Ġval Ġsource 0 Ġ= ĠMutable LiveData < Boolean >( false ) ĊĠĠĠĠĠĠĠ Ġval Ġsource 1 Ġ= ĠMutable LiveData < Boolean >( false ) ĊĠĠĠĠĠĠĠ Ġval Ġsource 2 Ġ= ĠMutable LiveData < Boolean >( false ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnot Ġ= Ġsource 0 . not () ĊĠĠĠĠĠĠĠ Ġval Ġand Ġ= Ġand ( source 0 , source 1 , source 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġor Ġ= Ġor ( source 0 , source 1 , source 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġor ( not , and , or ) ĊĠĠĠĠĠĠĠ Ġm . observe ( activity ) Ġ{} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġsource 0 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġsource 1 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġsource 2 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġnot . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġand . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġor . value ) ĊĊĠĠĠĠĠĠĠ Ġsource 0 . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġsource 0 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġsource 1 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġsource 2 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġnot . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġand . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġor . value ) ĊĊĠĠĠĠĠĠĠ Ġsource 1 . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġsource 0 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġsource 1 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġsource 2 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġnot . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġand . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġor . value ) ĊĊĠĠĠĠĠĠĠ Ġsource 2 . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġsource 0 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġsource 1 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġsource 2 . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġnot . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġand . value ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġor . value ) ĊĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} Ċ }