/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 0 ĠJetBrains Ġs . r . o . Ġand ĠKotlin ĠProgramming ĠLanguage Ġcontributors . Ċ Ġ* ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe Ġlicense / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . idea . script Ċ Ċ import Ġcom . intellij . ide . project View . actions . Mark Root Action Base Ċ import Ġcom . intellij . openapi . module . Java Module Type Ċ import Ġcom . intellij . openapi . module . Module Ċ import Ġcom . intellij . openapi . module . Module Manager Ċ import Ġcom . intellij . openapi . project . guess Project Dir Ċ import Ġcom . intellij . openapi . roots .* Ċ import Ġcom . intellij . openapi . util . io . File Util Ċ import Ġcom . intellij . openapi . vfs . Local FileSystem Ċ import Ġcom . intellij . openapi . vfs . V fs Util Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . psi . search . Global Search Scope Ċ import Ġcom . intellij . test Framework . He avy Platform TestCase Ċ import Ġcom . intellij . test Framework . Psi TestUtil Ċ import Ġcom . intellij . util . indexing . File Based Index Ċ import Ġorg . jetbrains . j ps . model . java . Java Resource Root Type Ċ import Ġorg . jetbrains . kotlin . idea . core . script . Script Definition Contributor Ċ import Ġorg . jetbrains . kotlin . idea . util . application . run Write Action Ċ import Ġorg . jetbrains . kotlin . test . In Text Directives Utils Ċ import Ġorg . jetbrains . kotlin . test . JUnit 3 Runner With In ners For J PS Ċ import Ġorg . jetbrains . kotlin . test . Mock Library Util Ċ import Ġorg . jetbrains . kotlin . test . util . Kt TestUtil Ċ import Ġorg . jetbrains . kotlin . test . util . add Dependency Ċ import Ġorg . jetbrains . kotlin . test . util . jar Root Ċ import Ġorg . jetbrains . kotlin . test . util . project Library Ċ import Ġorg . junit . runner . RunWith Ċ import Ġjava . io . File Ċ Ċ @ RunWith ( JUnit 3 Runner With In ners For J PS :: class ) Ċ abstract Ġclass ĠAbstract Script Templates From Dependencies Test Ġ: ĠHe avy Platform TestCase () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval Ġtest FileName Ġ= Ġ" test . k ts " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdo Test ( path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Root Ġ= Ġproject . guess Project Dir () Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġval ĠtestData Dir Ġ= ĠFile ( path ) ĊĊĠĠĠĠĠĠĠ Ġcopy Dir Contents To ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLocal FileSystem . getInstance (). find File By Io File ( testData Dir ) !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Root ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠtestData Dir ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. list Files Ġ{ Ġf Ġ-> Ġf . name . startsWith (" module ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . filter Ġ{ Ġit . exists () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Test Module ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠModule Manager . getInstance ( project ). modules . forEach Ġ{ Ġmodule Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtestData Dir ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. list Files Ġ{ Ġf Ġ-> Ġf . name . startsWith (" jar ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . map Ġ{ Ġfolder Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModule Root Manager . getInstance ( module ). modifiable Model . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv File Ġ= ĠV fs Util . find File By Io File ( folder , Ġtrue ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMark Root Action Base . find Content Entry ( this , Ġv File )?. add Exclude Folder ( v File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Write Action Ġ{ Ġthis @ apply . commit () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpack Jar ( folder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . forEach Ġ{ Ġjar Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodule . add Dependency ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Library ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlibrary Name Ġ= Ġ" script - library ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclasses Root Ġ= Ġjar . jar Root ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġroots : ĠCollection < Virtual File > Ġ= ĠFile Based Index . getInstance (). get Containing Files ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠScript Templates Class Roots Index . NAME , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUnit , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGlobal Search Scope . all Scope ( project ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtest File Ġ= ĠFile ( path , Ġtest FileName ) ĊĠĠĠĠĠĠĠ Ġval Ġfile Text Ġ= Ġtest File . read Text () ĊĊĠĠĠĠĠĠĠ Ġcheck Roots ( file Text , Ġroots ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprovider Ġ= ĠScript Definition Contributor . find < Script Templates From Dependencies Provider >( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Cannot Ġfind ĠScript Templates From Dependencies Provider ") ĊĊĠĠĠĠĠĠĠ Ġval Ġ( templates , Ġclasspath ) Ġ= Ġprovider . get Template Class Path ( roots . toList ()) ĊĊĠĠĠĠĠĠĠ Ġcheck Template Names ( file Text , Ġtemplates ) ĊĠĠĠĠĠĠĠ Ġcheck Template Classpath ( file Text , Ġclasspath ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . remove Test Dir Prefix (): ĠString Ġ= Ġthis . substring After Last ( getTest Name ( true )) ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Roots ( file Text : ĠString , Ġroots : ĠCollection < Virtual File >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġroots . map Ġ{ Ġit . path . remove Test Dir Prefix () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠIn Text Directives Utils . find List With Prefixes ( file Text , Ġ"// ĠROOT :") ĊĊĠĠĠĠĠĠĠ Ġassert Ordered Equals (" Roots Ġare Ġdifferent ", Ġactual . sorted (), Ġexpected . sorted ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Template Names ( file Text : ĠString , Ġnames : ĠCollection < String >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠIn Text Directives Utils . find List With Prefixes ( file Text , Ġ"// ĠNAME :") ĊĊĠĠĠĠĠĠĠ Ġassert Ordered Equals (" Template Ġnames Ġare Ġdifferent ", Ġnames . sorted (), Ġexpected . sorted ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Template Classpath ( file Text : ĠString , Ġclasspath : ĠCollection < File >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġclasspath . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Util . to System In dependent Name ( it . path ). remove Test Dir Prefix () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠIn Text Directives Utils . find List With Prefixes ( file Text , Ġ"// ĠCL AS SPATH :") ĊĊĠĠĠĠĠĠĠ Ġassert Ordered Equals (" Roots Ġare Ġdifferent ", Ġactual . sorted (), Ġexpected . sorted ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Test Module ( dir : ĠFile ): ĠModule Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Module Ġ= Ġcreate Module At ( name , Ġproject , ĠJava Module Type . getModule Type (), Ġdir . path ) ĊĊĠĠĠĠĠĠĠ Ġdir . list Files ()?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠV fs Util . find File By Io File ( it , Ġtrue ) Ġ?: Ġreturn @ forEach ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" src " Ġ-> ĠPsi TestUtil . add Source Root ( new Module , Ġroot ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" test " Ġ-> ĠPsi TestUtil . add Source Root ( new Module , Ġroot , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" resources " Ġ-> ĠPsi TestUtil . add Source Root ( new Module , Ġroot , ĠJava Resource Root Type . RESOURCE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Module ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpack Jar ( dir : ĠFile ): ĠFile Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontent Dir Ġ= ĠK t TestUtil . tmp Dir For Re usable Folder (" folder For Library -${ getTest Name ( true )} ") ĊĠĠĠĠĠĠĠ Ġreturn ĠMock Library Util . create Jar File ( content Dir , Ġdir , Ġ" templates ") ĊĠĠĠ Ġ} Ċ } Ċ