package Ġcom . e zi ke . to ben na . star w ars search . test utils Ċ Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . launch In Ċ import Ġkotlinx . coroutines . flow . on Each Ċ Ċ /** Ċ Ġ* Ġsource : Ċ Ġ* Ġhttps :// github . com / Reactive Circ us / stream lined / blob / main / libraries / coroutines - test - ext Ċ Ġ*/ Ċ Ċ public Ġfun Ġ< T > ĠFlow < T >. record With ( recorder : ĠFlow Recorder < T >) Ġ{ ĊĠĠĠ Ġon Each Ġ{ Ġrecorder Ġ+= Ġit Ġ}. launch In ( recorder . coroutine Scope ) Ċ } Ċ Ċ @ Opt In ( Experimental Std lib Api :: class ) Ċ public Ġclass ĠFlow Recorder < T >( internal Ġval Ġcoroutine Scope : ĠCor outine Scope ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġvalues : ĠMutable List < T > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġinternal Ġoperator Ġfun Ġplus Assign ( t : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvalues Ġ+= Ġt ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTakes Ġthe Ġfirst Ġ[ numberOf Values ] Ġrecorded Ġvalues Ġemitted Ġby Ġthe Ġ[ Flow ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġtake ( numberOf Values : ĠInt ): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( numberOf Values Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Least Ġnumber Ġof Ġvalues Ġto Ġtake Ġis Ġ 1 ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrequire ( numberOf Values Ġ<= Ġvalues . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" T aking Ġ$ numberOf Values Ġbut Ġonly Ġ${ values . size } Ġvalue ( s ) Ġhave Ġbeen Ġrecorded ." ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdr ained Values : ĠMutable List < T > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( dr ained Values . size Ġ< ĠnumberOf Values ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdr ained Values Ġ+= Ġvalues . remove First () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġdr ained Values ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTakes Ġall Ġrecorded Ġvalues Ġemitted Ġby Ġthe Ġ[ Flow ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġtake All (): ĠList < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdr ained Values : ĠList < T > Ġ= Ġbuild List Ġ{ Ġadd All ( values ) Ġ} ĊĠĠĠĠĠĠĠ Ġvalues . clear () ĊĠĠĠĠĠĠĠ Ġreturn Ġdr ained Values ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġreturns Ġthe Ġnumber Ġof Ġitems Ġemitted Ġby Ġthe Ġ[ Flow ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġval Ġsize : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġvalues . size ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠClear s Ġall Ġrecorded Ġvalues Ġemitted Ġby Ġthe Ġ[ Flow ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġvalues . clear () ĊĠĠĠ Ġ} Ċ } Ċ