/* Ċ Ġ* ĠCopyright Ġ 2 0 2 1 ĠJ ason ĠMon k Ċ Ġ* ĠĊ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* ĠĊ Ġ* ĠĠĠĠ Ġhttps :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* ĠĊ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . mon kop edia . ks rpc Ċ Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlinx . coroutines . Comp letable Deferred Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . Global Scope Ċ import Ġkotlinx . coroutines . async Ċ Ċ abstract Ġclass ĠOver lapping Test () Ġ: ĠOver lapping TestBase () Ċ Ċ // ĠH acks Ġfor Ġfirst Call Ġusage Ġ: /. Ċ abstract Ġclass ĠOver lapping TestBase ( ĊĠĠĠ Ġvar Ġfirst Call : ĠComp letable Deferred < String > Ġ= ĠComp letable Deferred < String >() Ċ ) Ġ: ĠRpc Function ality Test ( ĊĠĠĠ Ġserialized Channel Ġ= Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠW aits Ġfor Ġthe Ġsecond Ġcall Ġto Ġcome Ġin Ġbefore Ġthe Ġfirst Ġfinishes . ĊĠĠĠĠĠĠĠ Ġval Ġservice : ĠTest Interface Ġ= Ġobject Ġ: ĠTest Interface Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsecond Call : ĠComp letable Deferred < String >? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġsuspend Ġfun Ġrpc ( u : ĠPair < String , ĠString >): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( second Call Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Call . complete ( u . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Call Ġ= ĠComp letable Deferred () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"${ u . first } Ġ${ second Call ?. await () }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsecond Call ?. complete ( u . second ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"${ u . first } Ġ${ u . second }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġservice . serialized () ĊĠĠĠ Ġ}, ĊĠĠĠ Ġverify On Channel Ġ= Ġ{ Ġserialized Channel Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġstub Ġ= Ġserialized Channel . to Stub < Test Interface >() ĊĊĠĠĠĠĠĠĠ Ġval Ġfinish Ġ= ĠGlobal Scope . async ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals (" Hello Ġsecond ", Ġstub . rpc (" Hello " Ġto Ġ" first ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals (" first ", Ġfirst Call . await ()) ĊĠĠĠĠĠĠĠ ĠassertEquals (" Hello Ġsecond ", Ġstub . rpc (" Hello " Ġto Ġ" second ")) ĊĠĠĠĠĠĠĠ Ġfinish . await () ĊĠĠĠ Ġ} Ċ ) Ċ