import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . test Framework . fixtures . Base Platform TestCase Ċ import Ġorg . jetbrains . kotlin . psi . Kt Function Ċ import Ġorg . junit . jupiter . api . After All Ċ import Ġorg . junit . jupiter . api . Before All Ċ import Ġorg . junit . jupiter . api . Test Instance Ċ import Ġpsi . language . Java Handler Ċ import Ġpsi . language . Kotlin Handler Ċ import Ġjava . io . File Ċ import Ġkotlin . jvm . Throws Ċ Ċ @ Test Instance ( Test Instance . Lifecycle . PER _ CLASS ) Ċ open Ġclass ĠBase Psi Required Test Ġ: ĠBase Platform TestCase () Ġ{ ĊĊĠĠĠ Ġprotected Ġval Ġjava Handler Ġ= ĠJava Handler () ĊĠĠĠ Ġprotected Ġval Ġkotlin Handler Ġ= ĠKotlin Handler () ĊĊĠĠĠ Ġprivate Ġval Ġjava Methods Ġ= Ġmutable Map Of < String ?, ĠPsi Element >() ĊĠĠĠ Ġprivate Ġval Ġkotlin Methods Ġ= Ġmutable Map Of < String ?, ĠPsi Element >() ĊĊĠĠĠ Ġprivate Ġclass ĠResource Exception ( resource Root : ĠString ) Ġ: ĠRuntimeException (" Can 't Ġfind Ġresources Ġin Ġ$ resource Root ") ĊĊĠĠĠ Ġ// ĠWe Ġshould Ġdefine Ġthe Ġroot Ġresources Ġfolder ĊĠĠĠ Ġ@ Throws ( Resource Exception :: class ) ĊĠĠĠ Ġoverride Ġfun Ġget TestData Path (): ĠString Ġ= ĊĠĠĠĠĠĠĠ ĠBase Psi Required Test :: class . java . getResource ( resources Root )?. path Ġ?: Ġthrow ĠResource Exception ( resources Root ) ĊĊĠĠĠ Ġ@ Before All ĊĠĠĠ Ġoverride Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setUp () ĊĠĠĠĠĠĠĠ Ġval Ġjava Methods File Ġ= ĠFile ( testData Path ). resolve ( java Methods FileName ) ĊĠĠĠĠĠĠĠ Ġjava Methods . put All ( getAll Methods ( java Methods File , Ġjava Handler , Ġmy Fixture )) ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Methods File Ġ= ĠFile ( testData Path ). resolve ( kotlin Methods FileName ) ĊĠĠĠĠĠĠĠ Ġkotlin Methods . put All ( getAll Methods ( kotlin Methods File , Ġkotlin Handler , Ġmy Fixture )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After All ĊĠĠĠ Ġoverride Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . te ar Down () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠUnknown Method Exception ( methodName : ĠString , ĠfileName : ĠString ) Ġ: ĊĠĠĠĠĠĠĠ ĠRuntimeException (" Can 't Ġfind Ġmethod Ġ$ methodName Ġin Ġ$ fileName ") ĊĊĠĠĠ Ġprotected Ġfun Ġget Java Method ( methodName : ĠString ): ĠPsi Element Ġ= ĊĠĠĠĠĠĠĠ Ġjava Methods [ methodName ] Ġ?: Ġthrow ĠUnknown Method Exception ( methodName , Ġjava Methods FileName ) ĊĊĠĠĠ Ġprotected Ġfun Ġget Kotlin Method ( methodName : ĠString ): ĠPsi Element Ġ= ĊĠĠĠĠĠĠĠ Ġkotlin Methods [ methodName ] Ġas ĠK t Function ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠWe Ġcan Ġnot Ġget Ġthe Ġroot Ġof Ġthe Ġclass Ġresources Ġautomatically ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġresources Root : ĠString Ġ= Ġ" data " ĊĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval Ġjava Methods FileName Ġ= Ġ" Java Methods . java " ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval Ġkotlin Methods FileName Ġ= Ġ" Kotlin Methods . kt " ĊĠĠĠ Ġ} Ċ } Ċ