/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠSquare , ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 Ċ Ġ* Ċ Ġ* Ġhttp :// 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 . squareup . kotlin po et . metadata . specs . test Ċ Ċ import Ġcom . google . testing . compile . Compilation Rule Ċ import Ġcom . squareup . kotlin po et . Type Spec Ċ import Ġcom . squareup . kotlin po et . class inspector . elements . Elements Class Inspector Ċ import Ġcom . squareup . kotlin po et . class inspector . reflect ive . Reflect ive Class Inspector Ċ import Ġcom . squareup . kotlin po et . metadata . Kotlin Po et Metadata Preview Ċ import Ġcom . squareup . kotlin po et . metadata . specs . Class Inspector Ċ import Ġcom . squareup . kotlin po et . metadata . specs . test . Multi Class Inspector Test . Class Inspector Type Ċ import Ġcom . squareup . kotlin po et . metadata . specs . to Type Spec Ċ import Ġorg . junit . Ass ume Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . rules . Test Rule Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Parameterized Ċ import Ġorg . junit . runners . Parameterized . Parameter Ċ import Ġorg . junit . runners . model . Statement Ċ import Ġjava . lang . annotation . Inherited Ċ import Ġkotlin . annotation . Annotation Retention . RUNTIME Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** ĠBase Ġtest Ġclass Ġthat Ġruns Ġall Ġtests Ġwith Ġmultiple Ġ[ Class Inspector Types ][ Class Inspector Type ]. Ġ*/ Ċ @ RunWith ( Parameterized :: class ) Ċ @ Kotlin Po et Metadata Preview Ċ abstract Ġclass ĠMulti Class Inspector Test Ġ{ ĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ@ Jvm Static ĊĠĠĠ Ġ@ Parameterized . Parameters ( name Ġ= Ġ"{ 0 }") ĊĠĠĠ Ġfun Ġdata (): ĠCollection < Array < Class Inspector Type >> Ġ{ ĊĠĠĠĠĠ Ġreturn ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Class Inspector Type . REF LECT IVE ), ĊĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Class Inspector Type . ELEMENT S ) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġenum Ġclass ĠClass Inspector Type Ġ{ ĊĠĠĠ ĠNONE Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( test Instance : ĠMulti Class Inspector Test ): ĠClass Inspector Ġ{ ĊĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Should Ġnot Ġbe Ġcalled , Ġjust Ġhere Ġto Ġdefault Ġthe Ġj vm field Ġto Ġsomething .") ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, ĊĠĠĠ ĠREF LECT IVE Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( test Instance : ĠMulti Class Inspector Test ): ĠClass Inspector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠReflect ive Class Inspector . create () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, ĊĠĠĠ ĠELEMENT S Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġcreate ( test Instance : ĠMulti Class Inspector Test ): ĠClass Inspector Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠElements Class Inspector . create ( test Instance . compilation . elements , Ġtest Instance . compilation . types ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}; ĊĊĠĠĠ Ġabstract Ġfun Ġcreate ( test Instance : ĠMulti Class Inspector Test ): ĠClass Inspector ĊĠ Ġ} ĊĊĠ Ġ@ Retention ( RUNTIME ) ĊĠ Ġ@ Target ( Annotation Target . FUNCTION ) ĊĠ Ġ@ Inherited ĊĠ Ġannotation Ġclass ĠIgnore For Handler Type ( ĊĠĠĠ Ġval Ġreason : ĠString , ĊĠĠĠ Ġval Ġhandler Type : ĠClass Inspector Type ĊĠ Ġ) ĊĊĠ Ġ@ Jvm Field ĊĠ Ġ@ Parameter ĊĠ Ġvar Ġclass Inspector Type : ĠClass Inspector Type Ġ= ĠClass Inspector Type . NONE ĊĊĠ Ġ@ Rule ĊĠ Ġ@ Jvm Field ĊĠ Ġval Ġcompilation Ġ= ĠCompilation Rule () ĊĊĠ Ġ@ Rule ĊĠ Ġ@ Jvm Field ĊĠ Ġval Ġignore For Elements Rule Ġ= ĠTest Rule Ġ{ Ġbase , Ġdescription Ġ-> ĊĠĠĠ Ġobject Ġ: ĠStatement () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġevaluate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġannotation Ġ= Ġdescription . getAnnotation ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIgnore For Handler Type :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġshould Ignore Ġ= Ġannotation ?. handler Type Ġ== Ġclass Inspector Type ĊĠĠĠĠĠĠĠ ĠAssume . assume True ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ign oring Ġ${ description . methodName }: Ġ${ annotation ?. reason }", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ! should Ignore ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbase . evaluate () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprotected Ġfun ĠK Class <* >. to Type Spec With Test Handler (): ĠType Spec Ġ{ ĊĠĠĠ Ġreturn Ġto Type Spec ( class Inspector Type . create ( this @ Multi Class Inspector Test )) ĊĠ Ġ} Ċ } Ċ