// ĠCopyright Ġ 2 0 0 0 - 2 0 1 9 ĠJetBrains Ġs . r . o . ĠUse Ġof Ġthis Ġsource Ġcode Ġis Ġgoverned Ġby Ġthe ĠApache Ġ 2 . 0 Ġlicense Ġthat Ġcan Ġbe Ġfound Ġin Ġthe ĠLICENSE Ġfile . Ċ package Ġcom . jetbrains . python . code Insight . test Integration Ċ Ċ import Ġcom . intellij . openapi . module . Module Util Ċ import Ġcom . intellij . openapi . vfs . Virtual File Ċ import Ġcom . intellij . psi . Psi Element Ċ import Ġcom . intellij . psi . Psi Named Element Ċ import Ġcom . intellij . psi . search . Filename Index Ċ import Ġcom . intellij . psi . util . Psi Tree Util Ċ import Ġcom . jetbrains . python . code Insight . test Integration . Py Test Creation Model . Companion . create By Element Ċ import Ġcom . jetbrains . python . psi . Py Class Ċ import Ġcom . jetbrains . python . psi . Py File Ċ import Ġcom . jetbrains . python . psi . Py Function Ċ import Ġcom . jetbrains . python . testing . Python UnitTest Util Ċ Ċ /** Ċ Ġ* ĠCreated Ġwith Ġ[ create By Element ], Ġthen Ġmodified Ġmy Ġuser Ġand Ġprovided Ġto Ġ[ Py Test Creator . create Test ] Ġto Ġcreate Ġtest Ċ Ġ*/ Ċ class ĠPy Test Creation Model ( var ĠfileName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtarget Dir : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠclassName : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmethods : ĠList < String >) Ġ{ ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġassert ( methods . isNotEmpty ()) Ġ{ Ġ" Provide Ġat Ġleast Ġone Ġmethod " Ġ} ĊĠ Ġ} ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ return Ġmodel Ġof Ġnull Ġif Ġno Ġtest Ġcould Ġbe Ġcreated Ġfor Ġthis Ġelement ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate By Element ( element : ĠPsi Element ): ĠPy Test Creation Model ? Ġ{ ĊĠĠĠĠĠ Ġif Ġ( Python UnitTest Util . is Test Element ( element , Ġnull )) Ġreturn Ġnull Ġ// Can 't Ġcreate Ġtests Ġfor Ġtests ĊĠĠĠĠĠ Ġval Ġfile Ġ= Ġelement . containing File Ġas ? ĠPy File Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠ Ġval Ġpy Class Ġ= ĠPsi Tree Util . getParent OfType ( element , ĠPy Class :: class . java , Ġfalse ) ĊĠĠĠĠĠ Ġval Ġfunction Ġ= ĠPsi Tree Util . getParent OfType ( element , ĠPy Function :: class . java , Ġfalse ) ĊĠĠĠĠĠ Ġval Ġelements To Test : ĠSequence < Psi Named Element > Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġfunction Ġ!= Ġnull Ġ-> ĠlistOf ( function ) ĊĠĠĠĠĠĠĠ Ġpy Class Ġ!= Ġnull Ġ-> Ġpy Class . methods . asList () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ( file . top Level Functions Ġ+ Ġfile . top Level Classes ) Ġas ĠList < Psi Named Element > ĊĠĠĠĠĠ Ġ}. as Sequence (). filter Not Ġ{ ĠPython UnitTest Util . is Test Element ( it , Ġnull ) Ġ} ĊĊĠĠĠĠĠ Ġval Ġfunction Names Ġ= Ġelements To Test ĊĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . name ?. startsWith ("__ ") Ġ== Ġtrue Ġ} ĊĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġit . name Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ" test _${ it . toLowerCase () }" Ġ}. toList () ĊĊĠĠĠĠĠ Ġreturn Ġif Ġ( function Names . isEmpty ()) Ġnull ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠclassName Ġ= Ġif Ġ( Python UnitTest Util . is TestCase Class Required ( file )) Ġ" Test ${ py Class ?. name Ġ?: Ġ"" }" Ġelse Ġ"" ĊĠĠĠĠĠĠĠ ĠPy Test Creation Model ( fileName Ġ= Ġ" test _${ file . name }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Dir Ġ= Ġget Test Folder ( element ). path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName Ġ= ĠclassName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethods Ġ= Ġfunction Names ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Test Folder ( element : ĠPsi Element ): ĠVirtual File Ġ= ĊĠĠĠĠĠ ĠModule Util . find Module For Psi Element ( element )?. let Ġ{ Ġmodule Ġ-> ĊĠĠĠĠĠĠĠ ĠFilename Index . get Virtual Files ByName ( element . project , Ġ" tests ", Ġmodule . module Content Scope ). first OrNull () ĊĠĠĠĠĠ Ġ} Ġ?: Ġelement . containing File . containing Directory . virtual File ĊĊĠ Ġ} Ċ Ċ } Ċ