package Ġcom . exp one a . sdk . testutil Ċ Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjava . util . concurrent . TimeoutException Ċ Ċ const Ġval ĠDEFAULT _ TIMEOUT Ġ= Ġ 5 0 0 0 L Ċ Ċ /** Ċ Ġ* ĠRuns Ġlambda Ġand Ġblocks Ġthe Ġthread Ġuntil Ġlambda Ġinvokes Ġit 's Ġparameter Ġor Ġtimeout Ġruns Ġout . Ċ Ġ* ĠBe Ġcareful Ġnot Ġto Ġblock Ġmain Ġthread Ġin Ġlambda Ġfunction , Ġotherwise Ġtimeout Ġwill Ġbe Ġignored . Ċ Ġ* Ċ Ġ* ĠJ Unit Ġis Ġonly Ġcatch ing Ġassertion Ġerrors Ġon Ġit 's Ġown Ġthread . Ċ Ġ* ĠAssert s Ġin Ġdifferent Ġthreads Ġraise Ġexception Ġin Ġthat Ġthread , Ġtest Ġwon 't Ġfail Ġby Ġdefault . Ċ Ġ* ĠWhen Ġan Ġassert Ġfails , Ġwe Ġremember Ġthe Ġerror , Ġstop Ġwaiting Ġand Ġre throw Ġthe Ġerror Ġon Ġoriginal Ġthread . Ċ Ġ* Ċ Ġ* ĠExamples : Ċ Ġ* ĠwaitFor It Ġ{ Ċ Ġ* ĠĠĠĠ Ġthread Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ ĠThread . sleep ( 1 0 0 0 ) Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġit () Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ* Ċ Ġ* ĠwaitFor It Ġ{ Ċ Ġ* ĠĠĠĠ Ġthread Ġ{ Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġit . assertTrue ( false ) Ġ// Ġcauses Ġtest Ġto Ġfail , Ġnormal ĠassertTrue Ġwouldn 't Ċ Ġ* ĠĠĠĠĠĠĠĠ Ġit () Ċ Ġ* ĠĠĠĠ Ġ} Ċ Ġ* Ġ} Ċ Ġ*/ Ċ internal Ġfun ĠwaitFor It ( ĊĠĠĠ Ġtimeout MS : ĠLong Ġ= ĠDEFAULT _ TIMEOUT , ĊĠĠĠ Ġlambda : Ġ( Thread Assertion Collector ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ ĠThread Assertion Collector ( timeout MS , Ġlambda ) Ċ } Ċ Ċ internal Ġclass ĠThread Assertion Collector ( ĊĠĠĠ Ġprivate Ġval Ġtimeout MS : ĠLong Ġ= ĠDEFAULT _ TIMEOUT , ĊĠĠĠ Ġprivate Ġval Ġlambda : Ġ( Thread Assertion Collector ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcount Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠ Ġprivate Ġvar Ġerror : ĠAssertionError ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ Ġstart () Ġ} ĊĊĠĠĠ Ġfun ĠassertNull ( actual : ĠAny ?, Ġmessage : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Catch ing Ġ{ Ġkotlin . test . assertNull ( actual , Ġmessage ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > ĠassertNotNull ( actual : ĠT ?, Ġmessage : ĠString ? Ġ= Ġnull ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġassert Catch ing Ġ{ Ġkotlin . test . assertNotNull ( actual , Ġmessage ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠassertTrue ( actual : ĠBoolean , Ġmessage : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Catch ing Ġ{ Ġkotlin . test . assertTrue ( actual , Ġmessage ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠassertFalse ( actual : ĠBoolean , Ġmessage : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Catch ing Ġ{ Ġkotlin . test . assertFalse ( actual , Ġmessage ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > ĠassertEquals ( expected : ĠT , Ġactual : ĠT , Ġmessage : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Catch ing Ġ{ Ġkotlin . test . assertEquals ( expected , Ġactual , Ġmessage ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > Ġassert Not Equals ( il legal : ĠT , Ġactual : ĠT , Ġmessage : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Catch ing Ġ{ Ġkotlin . test . assertNot Equals ( il legal , Ġactual , Ġmessage ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfail ( message : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġassert Catch ing Ġ{ Ġkotlin . test . fail ( message ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun Ġinvoke () Ġ{ ĊĠĠĠĠĠĠĠ Ġcount . count Down () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > Ġassert Catch ing ( assert Block : Ġ() Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġassert Block () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠAssertionError ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ= Ġe ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġe ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġlambda ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! count . await ( timeout MS , ĠTimeUnit . MILLISECONDS )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠTimeout Exception (" Operation Ġdid Ġnot Ġfinish Ġin Ġ$ timeout MS Ġmilliseconds .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( error Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow Ġerror !! ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ