/* Ċ Ġ* ĠCopyright Ġ 2 0 0 0 - 2 0 1 8 ĠJetBrains Ġs . r . o . Ġ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 . live Templates Ċ Ċ import Ġcom . intellij . code Insight . lookup . Lookup Manager Ċ import Ġcom . intellij . code Insight . template . impl . Template ManagerImpl Ċ import Ġcom . intellij . code Insight . template . impl . Template State Ċ import Ġcom . intellij . ide . DataManager Ċ import Ġcom . intellij . openapi . command . Command Processor Ċ import Ġcom . intellij . openapi . editor . action System . Editor Action Manager Ċ import Ġcom . intellij . test Framework . Light Project Descriptor Ċ import Ġcom . intellij . util . Array Util Ċ import Ġcom . intellij . util . ui . UI Util Ċ import Ġjunit . framework . TestCase Ċ import Ġorg . jetbrains . annotations . Non N ls Ċ import Ġorg . jetbrains . kotlin . idea . test . Kotlin Light Code Insight Fixture TestCase Ċ import Ġorg . jetbrains . kotlin . idea . test . Kotlin With J dk And Runtime Light Project Descriptor Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ class ĠLive Templates Test Ġ: ĠKotlin Light Code Insight Fixture TestCase () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . setUp () ĊĠĠĠĠĠĠĠ Ġmy Fixture . testData Path Ġ= ĠFile ( TEST _ DATA _ BASE _ PATH ). path Ġ+ ĠFile . separator ĊĠĠĠĠĠĠĠ ĠTemplate ManagerImpl . set Template Testing ( my Module . project , Ġtest Root Disposable ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest S out () Ġ{ ĊĠĠĠĠĠĠĠ Ġpare meter less () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest S out _ Before Call () Ġ{ ĊĠĠĠĠĠĠĠ Ġpare meter less () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest S out _ Before Call Space () Ġ{ ĊĠĠĠĠĠĠĠ Ġpare meter less () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest S out _ Before Binary () Ġ{ ĊĠĠĠĠĠĠĠ Ġpare meter less () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest S out _ In Call Arguments () Ġ{ ĊĠĠĠĠĠĠĠ Ġpare meter less () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest S out _ Before Qualified Call () Ġ{ ĊĠĠĠĠĠĠĠ Ġpare meter less () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest S out _ After Sem icolon () Ġ{ ĊĠĠĠĠĠĠĠ Ġpare meter less () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest S out f () Ġ{ ĊĠĠĠĠĠĠĠ Ġpare meter less () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest S out f _ In Companion () Ġ{ ĊĠĠĠĠĠĠĠ Ġpare meter less () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest S err () Ġ{ ĊĠĠĠĠĠĠĠ Ġpare meter less () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Main () Ġ{ ĊĠĠĠĠĠĠĠ Ġpare meter less () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest S out v () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġassert String Items (" DEFAULT _ BUFFER _ SIZE ", Ġ" args ", Ġ" x ", Ġ" y ") ĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" y ") ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest S out p () Ġ{ ĊĠĠĠĠĠĠĠ Ġpare meter less () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Fun 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype (" foo ") ĊĠĠĠĠĠĠĠ Ġnext Tab ( 2 ) ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Fun 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype (" foo ") ĊĠĠĠĠĠĠĠ Ġnext Tab ( 4 ) ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Fun 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype (" foo ") ĊĠĠĠĠĠĠĠ Ġnext Tab ( 6 ) ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Ex fun () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" Int ") ĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" foo ") ĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" arg Ġ: ĠInt ") ĊĠĠĠĠĠĠĠ Ġnext Tab () ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Ex val () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" Int ") ĊĠĠĠĠĠĠĠ Ġnext Tab () ĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" Int ") ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Ex var () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" Int ") ĊĠĠĠĠĠĠĠ Ġnext Tab () ĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" Int ") ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Closure () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" param ") ĊĠĠĠĠĠĠĠ Ġnext Tab () ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Interface () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" Some Trait ") ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Singleton () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" My Singleton ") ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Void () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" foo ") ĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" x Ġ: ĠInt ") ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Iter () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġassert String Items (" args ", Ġ" my List ", Ġ" o ", Ġ" str ") ĊĠĠĠĠĠĠĠ Ġtype (" args ") ĊĠĠĠĠĠĠĠ Ġnext Tab ( 2 ) ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Anonymous _ 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" Runnable ") ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Anonymous _ 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" Thread ") ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Object _ For Class () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" A ") ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Test If n In n () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġassert String Items (" b ", Ġ" t ", Ġ" y ") ĊĠĠĠĠĠĠĠ Ġtype And Next Tab (" b ") ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest If n () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test If n In n () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest In n () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test If n In n () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpare meter less () Ġ{ ĊĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠ Ġcheck After () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart () Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Fixture . configure By File ( getTest Name ( true ) Ġ+ Ġ". kt ") ĊĠĠĠĠĠĠĠ Ġmy Fixture . type ( template Name ) ĊĊĠĠĠĠĠĠĠ Ġdo Action (" Expand Live Template By Tab ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtemplate Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Name Ġ= Ġget Test Name ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( test Name . contains ("_ ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtest Name . substring ( 0 , Ġtest Name . indexOf ("_ ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtest Name ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck After () Ġ{ ĊĠĠĠĠĠĠĠ ĠTestCase . assertNull ( template State ) ĊĠĠĠĠĠĠĠ Ġmy Fixture . check Result By File ( getTest Name ( true ) Ġ+ Ġ". exp . kt ", Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtype And Next Tab ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtype ( s ) ĊĠĠĠĠĠĠĠ Ġnext Tab () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtype ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmy Fixture . type ( s ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnext Tab () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Ġ= Ġproject ĊĠĠĠĠĠĠĠ ĠUI Util . invoke And Wait IfNeeded ( Runnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCommand Processor . getInstance (). execute Command ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemplate State !!. next Tab () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" next Tab ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnext Tab ( times : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. times Ġ- Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Tab () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġtemplate State : ĠTemplate State ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠTemplate ManagerImpl . get Template State ( my Fixture . editor ) ĊĊĠĠĠ Ġoverride Ġfun Ġget Project Descriptor (): ĠLight Project Descriptor Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠKotlin With J dk And Runtime Light Project Descriptor . INSTANCE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Action ( action Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Manager Ġ= ĠEditor Action Manager . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġaction Handler Ġ= Ġaction Manager . getAction Handler ( action Id ) ĊĠĠĠĠĠĠĠ Ġaction Handler . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmy Fixture . editor , Ġmy Fixture . editor . caret Model . current Caret , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Manager . getInstance (). getData Context ( my Fixture . editor . component ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert String Items (@ Non N ls Ġvar arg Ġitems : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTestCase . assertEquals ( Arrays . asList (* items ), ĠArrays . asList (* item Strings Sorted )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġitem Strings : ĠArray < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlookup Ġ= ĠLookup Manager . getActive Lookup ( my Fixture . editor ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( element Ġin Ġlookup . items ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( element . lookup String ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠArray Util . toString Array ( result ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġitem Strings Sorted : ĠArray < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġitems Ġ= Ġitem Strings ĊĠĠĠĠĠĠĠĠĠĠĠ ĠArrays . sort ( items ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġitems ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ