package Ġse . g ust av kar l sson . k rate . core Ċ Ċ import Ġassert k . assert Ċ import Ġassert k . assertions . contains Exactly Ċ import Ġassert k . assertions . isEmpty Ċ import Ġassert k . assertions . isEqualTo Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . in Order Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġio . reactivex . Flow able Ċ import Ġorg . junit . Test Ċ Ċ class ĠComposite Transformer Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġmock Transformer 1 Ġ= Ġmock < Transformer < Boolean , ĠInt >> Ġ{ ĊĠĠĠĠĠĠĠ Ġon ( it . invoke ( any ())). then Answer Ġ{ Ġinvocation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommands Ġ= Ġinvocation . arguments [ 0 ] Ġas ĠFlow able < *> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . map Ġ{ Ġ 1 Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġmock Transformer 2 Ġ= Ġmock < Transformer < Boolean , ĠInt >> Ġ{ ĊĠĠĠĠĠĠĠ Ġon ( it . invoke ( any ())). then Answer Ġ{ Ġinvocation Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommands Ġ= Ġinvocation . arguments [ 0 ] Ġas ĠFlow able < *> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommands . flatMap Ġ{ ĠFlow able . just ( 2 , Ġ 3 ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġimpl Ġ= ĠComposite Transformer ( listOf ( mock Transformer 1 , Ġmock Transformer 2 )) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` no Ġtransform ers Ġresults Ġin Ġempty Ġstream `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimpl Ġ= ĠComposite Transformer < Boolean , ĠInt >( emptyList ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġimpl . invoke ( Flow able . just ( true )). blocking List () ĊĊĠĠĠĠĠĠĠ Ġassert ( results ). isEmpty () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` transformers Ġare Ġrun Ġin Ġorder `() Ġ{ ĊĠĠĠĠĠĠĠ Ġimpl . invoke ( Flow able . just ( true )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĊĠĠĠĠĠĠĠ Ġin Order ( mock Transformer 1 , Ġmock Transformer 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( mock Transformer 1 ). invoke ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( mock Transformer 2 ). invoke ( any ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` transformer Ġresults Ġare Ġmerged `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġimpl . invoke ( Flow able . just ( true )). blocking List () ĊĊĠĠĠĠĠĠĠ Ġassert ( results ). contains Exactly ( 1 , Ġ 2 , Ġ 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` source Ġstream Ġis Ġsubscribed Ġonly Ġonce Ġwith Ġmultiple Ġtransform ers `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsubscription Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġsource Ġ= ĠFlow able . empty < Boolean >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. do On Subscribe Ġ{ Ġsubscription Count ++ Ġ} ĊĊĠĠĠĠĠĠĠ Ġimpl . invoke ( source ). subscribe () ĊĊĠĠĠĠĠĠĠ Ġassert ( subscription Count , Ġ" subscription Count "). isEqualTo ( 1 ) ĊĠĠĠ Ġ} Ċ } Ċ