package Ġcom . github . j corn az . mi op . test Ċ Ċ import Ġjava . util . concurrent . atomic . Atomic Boolean Ċ import Ġjava . util . concurrent . atomic . Atomic Integer Ċ import Ġkotlin . test .* Ċ Ċ actual Ġabstract Ġclass ĠAsync Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġstep Count Ġ= ĠAtomicInteger () ĊĠĠĠ Ġprivate Ġval Ġis Finished Ġ= ĠAtomic Boolean () ĊĠĠĠ Ġprivate Ġvar Ġexception : ĠThrowable ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Before Test ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġstep Count . set ( 0 ) ĊĠĠĠĠĠĠĠ Ġis Finished . set ( false ) ĊĠĠĠĠĠĠĠ Ġexception Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ ĠThread . setDefault Un caught ExceptionHandler Ġ{ Ġ_, Ġt Ġ-> Ġunreachable Ġ{ Ġ" Exception Ġ\"$ t \" Ġdelivered Ġto Ġthe Ġun caught Ġexception Ġhandler " Ġ} Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Test ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( step Count . get () Ġ> Ġ 0 ) ĠassertTrue ( is Finished . get (), Ġ" finish () Ġwas Ġnot Ġcalled ") ĊĠĠĠĠĠĠĠ Ġexception ?. let Ġ{ Ġthrow Ġit Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġactual Ġfun Ġexpect ( step : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertFalse ( is Finished . get (), Ġ" expect ($ step ) Ġhas Ġbeen Ġcalled Ġafter Ġfinish (${ step Count . get () }) ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( step Count . increment AndGet (), Ġstep , Ġ" unexpected Ġstep Ġcount Ġ( expected Ġ$ step , Ġbut Ġ${ step Count . get ()} Ġwas Ġfound )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġactual Ġfun Ġfinish ( step : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertTrue ( is Finished . compare AndSet ( false , Ġtrue ), Ġ" finish Ġhas Ġbeen Ġcalled Ġtwice ") ĊĠĠĠĠĠĠĠ ĠassertEquals ( step Count . increment AndGet (), Ġstep , Ġ" unexpected Ġstep Ġcount Ġ( expected Ġ$ step , Ġbut Ġ${ step Count . get ()} Ġwas Ġfound )") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġactual Ġfun Ġunreachable ( create Message : Ġ() Ġ-> ĠString ): ĠNothing Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠAssertionError ( create Message ()) ĊĠĠĠĠĠĠĠ Ġexception Ġ= Ġerror ĊĠĠĠĠĠĠĠ Ġthrow Ġerror ĊĠĠĠ Ġ} Ċ } Ċ