/** Ċ Ġ* ĠBSD Ġ 3 - Clause ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 0 , ĠAlex ĠK at le in Ċ Ġ* ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠRedistribution Ġand Ġuse Ġin Ġsource Ġand Ġbinary Ġforms , Ġwith Ġor Ġwithout Ċ Ġ* Ġmodification , Ġare Ġpermitted Ġprovided Ġthat Ġthe Ġfollowing Ġconditions Ġare Ġmet : Ċ Ġ* Ċ Ġ* Ġ 1 . ĠRedistributions Ġof Ġsource Ġcode Ġmust Ġretain Ġthe Ġabove Ġcopyright Ġnotice , Ġthis Ċ Ġ* ĠĠĠ Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer . Ċ Ġ* Ċ Ġ* Ġ 2 . ĠRedistributions Ġin Ġbinary Ġform Ġmust Ġreproduce Ġthe Ġabove Ġcopyright Ġnotice , Ċ Ġ* ĠĠĠ Ġthis Ġlist Ġof Ġconditions Ġand Ġthe Ġfollowing Ġdisclaimer Ġin Ġthe Ġdocumentation Ċ Ġ* ĠĠĠ Ġand / or Ġother Ġmaterials Ġprovided Ġwith Ġthe Ġdistribution . Ċ Ġ* Ċ Ġ* Ġ 3 . ĠNeither Ġthe Ġname Ġof Ġthe Ġcopyright Ġholder Ġnor Ġthe Ġnames Ġof Ġits Ċ Ġ* ĠĠĠ Ġcontributors Ġmay Ġbe Ġused Ġto Ġendorse Ġor Ġpromote Ġproducts Ġderived Ġfrom Ċ Ġ* ĠĠĠ Ġthis Ġsoftware Ġwithout Ġspecific Ġprior Ġwritten Ġpermission . Ċ Ġ* Ċ Ġ* ĠTHIS ĠSOFTWARE ĠIS ĠPROVIDED ĠBY ĠTHE ĠCOPYRIGHT ĠHOLDERS ĠAND ĠCONTRIBUTORS Ġ" AS ĠIS " Ċ Ġ* ĠAND ĠANY ĠEXPRESS ĠOR ĠIMPLIED ĠWARRANTIES , ĠINCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠTHE Ċ Ġ* ĠIMPLIED ĠWARRANTIES ĠOF ĠMERCHANTABILITY ĠAND ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠARE Ċ Ġ* ĠDISCLAIMED . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE ĠCOPYRIGHT ĠHOLDER ĠOR ĠCONTRIBUTORS ĠBE ĠLIABLE Ċ Ġ* ĠFOR ĠANY ĠDIRECT , ĠINDIRECT , ĠINCIDENTAL , ĠSPECIAL , ĠEXEMPLARY , ĠOR ĠCONSEQUENTIAL Ċ Ġ* ĠDAMAGES Ġ( INCLUDING , ĠBUT ĠNOT ĠLIMITED ĠTO , ĠPROCUREMENT ĠOF ĠSUBSTITUTE ĠGOODS ĠOR Ċ Ġ* ĠSERVICES ; ĠLOSS ĠOF ĠUSE , ĠDATA , ĠOR ĠPROFITS ; ĠOR ĠBUSINESS ĠINTERRUPTION ) ĠHOWEVER Ċ Ġ* ĠCAUSED ĠAND ĠON ĠANY ĠTHEORY ĠOF ĠLIABILITY , ĠWHETHER ĠIN ĠCONTRACT , ĠSTRICT ĠLIABILITY , Ċ Ġ* ĠOR ĠTORT Ġ( INCLUDING ĠNEGLIGENCE ĠOR ĠOTHERWISE ) ĠARISING ĠIN ĠANY ĠWAY ĠOUT ĠOF ĠTHE ĠUSE Ċ Ġ* ĠOF ĠTHIS ĠSOFTWARE , ĠEVEN ĠIF ĠADVISED ĠOF ĠTHE ĠPOSSIBILITY ĠOF ĠSUCH ĠDAMAGE . Ċ Ġ*/ Ċ package Ġio . v 4 7 . events Ċ Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . jupiter . api . Assertions . assert Iterable Equals Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . Test Instance Ċ Ċ @ Test Instance ( Test Instance . Lifecycle . PER _ CLASS ) Ċ class ĠEvents Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġemit Check List Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠString Event (" This Ġis Ġa Ġstring ! "), ĊĠĠĠĠĠĠĠ ĠString Event (" This Ġis Ġa Ġstring ! "), ĊĠĠĠĠĠĠĠ ĠString Event (" This Ġis Ġanother Ġstring !") ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġremove Check List Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ ĠString Event (" Event Ġno . Ġ 1 "), ĊĠĠĠĠĠĠĠ ĠString Event (" Event Ġno . Ġ 1 "), ĊĠĠĠĠĠĠĠ ĠString Event (" Event Ġno . Ġ 2 "), ĊĠĠĠĠĠĠĠ ĠString Event (" Event Ġno . Ġ 2 "), ĊĠĠĠĠĠĠĠ ĠString Event (" Event Ġno . Ġ 3 ") ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġemit Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġmutable ListOf < String Event >() ĊĊĠĠĠĠĠĠĠ Ġval Ġemitter Ġ= ĠDefault EventEmitter () ĊĠĠĠĠĠĠĠ Ġemitter . on ( String Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents Ġ+= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġemitter . once ( String Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents Ġ+= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . emit ( String Event , ĠString Event (" This Ġis Ġa Ġstring ! ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . emit ( String Event , ĠString Event (" This Ġis Ġanother Ġstring ! ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġemitter . clear () ĊĊĠĠĠĠĠĠĠ Ġassert Iterable Equals ( emit Check List , Ġevents ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġemit Blocking Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġmutable ListOf < String Event >() ĊĊĠĠĠĠĠĠĠ Ġval Ġemitter Ġ= ĠDefault EventEmitter () ĊĠĠĠĠĠĠĠ Ġemitter . on ( String Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents Ġ+= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġemitter . once ( String Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents Ġ+= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġemitter . emit Blocking ( String Event , ĠString Event (" This Ġis Ġa Ġstring ! ")) ĊĠĠĠĠĠĠĠ Ġemitter . emit Blocking ( String Event , ĠString Event (" This Ġis Ġanother Ġstring ! ")) ĊĊĠĠĠĠĠĠĠ Ġemitter . clear ( String Event ) ĊĊĠĠĠĠĠĠĠ Ġassert Iterable Equals ( emit Check List , Ġevents ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġremove Listener Test () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġevents Ġ= Ġmutable ListOf < String Event >() ĊĊĠĠĠĠĠĠĠ Ġval Ġemitter Ġ= ĠDefault EventEmitter () ĊĠĠĠĠĠĠĠ Ġemitter . on ( String Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents Ġ+= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtransient Listener : Ġ( suspend Ġ( String Event ) Ġ-> ĠUnit ) Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents Ġ+= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġemitter . on ( String Event , Ġtransient Listener ) ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . emit ( String Event , ĠString Event (" Event Ġno . Ġ 1 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . emit ( String Event , ĠString Event (" Event Ġno . Ġ 2 ")) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . remove ( transient Listener ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġemitter . emit ( String Event , ĠString Event (" Event Ġno . Ġ 3 ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġassert Iterable Equals ( remove Check List , Ġevents ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠString Event ( val Ġstring : ĠString ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ: ĠEvent Key < String Event > Ċ } Ċ