package Ġio . pro venance . aggregate . service . test . mocks Ċ Ċ type alias ĠAction Ġ= Ġ( Array < out ĠAny ?> ) Ġ-> ĠAny ? Ċ Ċ interface ĠService Mock Ġ{ ĊĠĠĠ Ġsuspend Ġfun Ġ< T > Ġrespond With ( method : ĠString , Ġvar arg Ġargs : ĠAny ?): ĠT Ċ } Ċ Ċ class ĠService M ocker Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġactions : ĠMap < String , ĠAction > Ċ ) Ġ: ĠService Mock Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcalls : ĠMutable Map < String , ĠInt > Ġ= Ġmutable Map Of () ĊĊĠĠĠ Ġdata Ġclass ĠBuilder ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbuild Actions : ĠMutable Map < String , ĠAction > Ġ= Ġmutable Map Of (), ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠRegister Ġan Ġaction Ġto Ġrun Ġfor Ġa Ġgiven Ġmethod Ġwith Ġthe Ġarguments Ġpassed Ġto Ġthe Ġcalling ĠAPI Ġmethod Ġthat Ġis ĊĠĠĠĠĠĠĠĠ Ġ* Ġbeing Ġmocked ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġdo For ( method : ĠString , Ġaction : ĠAction ): ĠBuilder Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Actions [ method ] Ġ= Ġaction ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġbuild (): ĠService M ocker Ġ= ĠService M ocker ( build Actions ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġ< T > Ġbuild ( clazz : ĠClass < T >): ĠT Ġ= Ġclazz . getDeclared Constructor ( Service Mock :: class . java ). newInstance ( build ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġ< T > Ġrespond With ( method : ĠString , Ġvar arg Ġargs : ĠAny ?): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= Ġactions [ method ] Ġ?: Ġthrow ĠIllegalArgumentException (" Bad Ġmethod : Ġ$ method ") ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġaction ( args ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġcalls . put If Absent ( method , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġcalls . compute If Present ( method ) Ġ{ Ġ_, Ġv Ġ-> Ġv Ġ+ Ġ 1 Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} Ċ }