package Ġcom . ptr br ynt . kotlin _ bloc . core Ċ Ċ import Ġapp . cash . tur bine . test Ċ import Ġcom . ptr br ynt . kotlin _ bloc . core . b locs . Counter Bloc Ċ import Ġcom . ptr br ynt . kotlin _ bloc . core . b locs . Counter Event Ċ import Ġcom . ptr br ynt . kotlin _ bloc . core . b locs . De bounce Bloc Ċ import Ġcom . ptr br ynt . kotlin _ bloc . core . b locs . De crement Ċ import Ġcom . ptr br ynt . kotlin _ bloc . core . b locs . Increment Ċ import Ġcom . ptr br ynt . kotlin _ bloc . core . b locs . Increment Only Counter Bloc Ċ import Ġcom . ptr br ynt . kotlin _ bloc . core . b locs . Multi Flow Bloc Ċ import Ġcom . ptr br ynt . kotlin _ bloc . core . b locs . Multi Flow Initialized Ċ import Ġcom . ptr br ynt . kotlin _ bloc . core . b locs . Multi Flow Number Added Ċ import Ġcom . ptr br ynt . kotlin _ bloc . core . b locs . Se eded Bloc Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . verify Order Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Test Ċ import Ġkotlin . system . measure Time Millis Ċ import Ġkotlin . test . assertContains Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertTrue Ċ import Ġkotlin . time . Duration Ċ import Ġkotlin . time . Experimental Time Ċ Ċ @ Experimental Time Ċ @ Experimental Cor outines Api Ċ internal Ġclass ĠB loc Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Counter Bloc Ġcalls Ġobserver Ġcorrectly `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġmock k < Bloc Observer >( relax ed Ġ= Ġtrue ) ĊĊĠĠĠĠĠĠĠ ĠB loc . observer Ġ= Ġobserver ĊĊĠĠĠĠĠĠĠ Ġval Ġb loc Ġ= ĠCounter Bloc () ĊĊĠĠĠĠĠĠĠ Ġb loc . add ( Increment ) ĊĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . onCreate ( bloc ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . on Event ( bloc , ĠIncrement ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . onChange ( bloc , ĠChange ( 0 , Ġ 1 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġobserver . on Transition ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb loc , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTransition ( 0 , ĠIncrement , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Counter Bloc Ġinitial Ġstate Ġis Ġ 0 `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb loc Ġ= ĠCounter Bloc () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġb loc . state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Counter Bloc Ġemits Ġcorrect Ġstates `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb loc Ġ= ĠCounter Bloc () ĊĊĠĠĠĠĠĠĠ Ġb loc . state Flow . test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Increment , ĠIncrement , ĠDec rement ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb loc . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( 1 , Ġ 2 , Ġ 1 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( it , Ġawait Item ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Counter Bloc Ġon Event Ġcallback Ġis Ġinvoked Ġfor Ġall Ġevents `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġmutable ListOf < Counter Event >() ĊĠĠĠĠĠĠĠ Ġval Ġb loc Ġ= ĠCounter Bloc ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Event Callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġb loc . add ( Increment ) ĊĠĠĠĠĠĠĠ Ġb loc . add ( De crement ) ĊĊĠĠĠĠĠĠĠ Ġassert Contains ( events , ĠIncrement ) ĊĠĠĠĠĠĠĠ Ġassert Contains ( events , ĠDec rement ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Counter Bloc Ġstate Ġvalue Ġstays Ġup - to - date `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb loc Ġ= ĠCounter Bloc () ĊĊĠĠĠĠĠĠĠ Ġb loc . add ( Increment ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġb loc . state ) ĊĊĠĠĠĠĠĠĠ Ġb loc . add ( Increment ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġb loc . state ) ĊĊĠĠĠĠĠĠĠ Ġb loc . add ( De crement ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġb loc . state ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Counter Bloc Ġon Transition Ġcallback Ġworks Ġas Ġexpected `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġtransition : ĠTransition < Counter Event , ĠInt >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġb loc Ġ= ĠCounter Bloc ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Transition Callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransition Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġb loc . add ( Increment ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTransition < Counter Event , ĠInt >( 0 , ĠIncrement , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtransition , ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Se eded Bloc Ġemits Ġcorrect Ġstates `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb loc Ġ= ĠSee ded Bloc ( listOf ( 1 , Ġ 2 ), Ġ 0 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġb loc . state ) ĊĊĠĠĠĠĠĠĠ Ġb loc . state Flow . test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb loc . add (" Hello ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġawait Item ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġawait Item ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` De bounce Bloc Ġemits Ġcorrect Ġstates `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb loc Ġ= ĠDe bounce Bloc () ĊĊĠĠĠĠĠĠĠ Ġb loc . state Flow . test ( Duration . seconds ( 2 . 5 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= Ġmeasure Time Millis Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġb loc . add ( Increment ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġawait Item ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue ( time Ġ>= Ġ 2 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Increment Only Counter Bloc Ġonly Ġrespon ds Ġto ĠIncrement Ġevents `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb loc Ġ= ĠIncrement Only Counter Bloc () ĊĊĠĠĠĠĠĠĠ Ġb loc . state Flow . test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb loc . add ( Increment ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġawait Item ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġb loc . add ( De crement ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect No Events () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġb loc . add ( Increment ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġawait Item ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Experimental Cor outines Api ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Multi Flow Bloc Ġstill Ġreceives Ġevents Ġafter Ġinitialize `() Ġ= Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġb loc Ġ= ĠMulti Flow Bloc () ĊĊĠĠĠĠĠĠĠ Ġb loc . state Flow . test Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġb loc . add ( Multi Flow Initialized ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( emptyList (), Ġawait Item ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġb loc . add ( Multi Flow Number Added ( 1 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( 1 ), Ġawait Item ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ