// Ġ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 Ġfile . Ċ package Ġcom . intellij . test Gui Framework . impl Ċ Ċ import Ġcom . intellij . test Gui Framework . fixtures . G utter Fixture Ċ import Ġcom . intellij . test Gui Framework . fixtures . extended . Extended J Tree Path Fixture Ċ import Ġcom . intellij . test Gui Framework . framework . Timeout s Ċ import Ġcom . intellij . test Gui Framework . util .* Ċ import Ġorg . fest . swing . timing . Condition Ċ import Ġorg . fest . swing . timing . Pause Ċ import Ġorg . hamcrest . Matcher Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . rules . Error Collector Ċ import Ġorg . junit . rules . Temporary Folder Ċ import Ġorg . junit . rules . Test Name Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Path Ċ Ċ open Ġclass ĠGui TestCase Ext Ġ: ĠGui TestCase () Ġ{ ĊĊĠ Ġ@ Rule ĊĠ Ġ@ Jvm Field ĊĠ Ġval Ġtest Method Ġ= ĠTest Name () ĊĊĠ Ġ@ Rule ĊĠ Ġ@ Jvm Field ĊĠ Ġval Ġscreenshots During Test Ġ= ĠScreenshots During Test ( 1 0 0 0 ) Ġ// Ġ= Ġ 1 Ġsec ĊĊĠ Ġ@ Rule ĊĠ Ġ@ Jvm Field ĊĠ Ġval Ġlog Actions During Test Ġ= ĠLog Actions During Test () ĊĊĠ Ġ@ get : Rule ĊĠ Ġval Ġtest RootPath : ĠTemporary Folder Ġby Ġlazy Ġ{ ĊĠĠĠ ĠTemporary Folder () ĊĠ Ġ} ĊĠ Ġval Ġproject Folder : ĠString Ġby Ġlazy Ġ{ ĊĠĠĠ Ġtest RootPath . new Folder ( test Method . methodName ). canonical Path ĊĠ Ġ} Ċ Ċ // Ġ Ġ@ Rule Ċ // Ġ Ġ@ Jvm Field Ċ // Ġ Ġval Ġcollector Ġ= Ġobject Ġ: ĠError Collector () Ġ{ Ċ // ĠĠĠ Ġoverride Ġfun Ġadd Error ( error : ĠThrowable ?) Ġ{ Ċ // ĠĠĠĠĠ Ġval Ġscreenshot Name Ġ= Ġtest Name Ġ+ Ġ"." Ġ+ Ġtest Method . methodName Ċ // ĠĠĠĠĠ Ġtake Screenshot On Failure ( error , Ġscreenshot Name ) Ċ // ĠĠĠĠĠ Ġsuper . add Error ( error ) Ċ // ĠĠĠ Ġ} Ċ // Ġ Ġ} ĊĊĠ Ġ@ Before ĊĠ Ġopen Ġfun ĠsetUp () Ġ{ ĊĠĠĠ Ġgui Test Rule . Ide Handling (). setUp () ĊĠĠĠ Ġlog Start Test ( test Method . methodName ) ĊĠ Ġ} ĊĊĠ Ġ@ After ĊĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠ Ġlog End Test ( test Method . methodName ) ĊĠĠĠ Ġgui Test Rule . Ide Handling (). te ar Down () ĊĠ Ġ} ĊĊĠ Ġopen Ġfun Ġis Ide Frame Run (): ĠBoolean Ġ= Ġtrue Ċ } Ċ Ċ fun Ġ< T > ĠError Collector . check That ( value : ĠT , Ġmatcher : ĠMatcher < T >, Ġreason : Ġ() Ġ-> ĠString ) Ġ{ ĊĠ Ġcheck That ( reason (), Ġvalue , Ġmatcher ) Ċ } Ċ Ċ /** Ċ Ġ* ĠCloses Ġthe Ġcurrent Ġproject Ċ Ġ* Ġ*/ Ċ fun ĠGui TestCase . close Project () Ġ{ ĊĠ Ġide Frame Ġ{ ĊĠĠĠ Ġlog UI Step (" Close Ġthe Ġproject ") ĊĠĠĠ Ġwait AM oment () ĊĠĠĠ Ġclose Project () ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠWrapper Ġfor Ġ[ waitFor Background Tasks To Finish ] Ċ Ġ* Ġadds Ġan Ġextra Ġpause Ċ Ġ* ĠThis Ġfunction Ġshould Ġbe Ġused Ġinstead Ġof Ġ Ġ[ waitFor Background Tasks To Finish ] Ċ Ġ* Ġbecause Ġsometimes Ġit Ġdoesn 't Ġwait Ġenough Ġtime Ċ Ġ* ĠAfter Ġ[ waitFor Background Tasks To Finish ] Ġfixing Ġthis Ġfunction Ġshould Ġbe Ġremoved Ċ Ġ* Ġ@ param Ġextra TimeOut Ġtime Ġof Ġadditional Ġwaiting Ċ Ġ* Ġ*/ Ċ fun ĠGui TestCase . wait AM oment ( extra TimeOut : ĠLong Ġ= Ġ 2 0 0 0 L ) Ġ{ ĊĠ Ġide Frame Ġ{ ĊĠĠĠ Ġthis . waitFor Background Tasks To Finish () ĊĠ Ġ} ĊĠ Ġrobot (). waitFor Idle () ĊĠ ĠPause . pause ( extra TimeOut ) Ċ } Ċ Ċ /** Ċ Ġ* ĠPerforms Ġtest Ġwhether Ġthe Ġspecified Ġitem Ġexists Ġin Ġa Ġtree Ċ Ġ* ĠNote : Ġthe Ġdialog Ġwith Ġthe Ġinvestig ated Ġtree Ġmust Ġbe Ġopen Ċ Ġ* Ġbefore Ġusing Ġthis Ġtest Ċ Ġ* Ġ@ param Ġexpected Item Ġ- Ġexpected Ġexact Ġitem Ċ Ġ* Ġ@ param Ġname Ġ- Ġname Ġof Ġitem Ġkind , Ġsuch Ġas Ġ" Library " Ġor Ġ" Facet ". ĠUsed Ġfor Ġunderstand able Ġerror Ġmessage Ċ Ġ* Ġ*/ Ċ fun ĠGui TestCase . test TreeItem Exist ( name : ĠString , Ġvar arg Ġexpected Item : ĠString ) Ġ{ ĊĠ Ġide Frame Ġ{ ĊĠĠĠ Ġlog Info (" Check Ġthat Ġ$ name Ġ-> Ġ${ expected Item . join ToString (" Ġ-> Ġ" )} Ġexists Ġin Ġa Ġtree Ġelement ") ĊĠĠĠ Ġkotlin . assert ( exists Ġ{ Ġj Tree (* expected Item ) Ġ}) Ġ{ Ġ"$ name Ġ'${ expected Item . join ToString (", Ġ" )} ' Ġnot Ġfound " Ġ} ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠSelect s Ġspecified Ġ[ path ] Ġin Ġthe Ġtree Ġby Ġkeyboard Ġsearching Ċ Ġ* Ġ@ param Ġpath Ġin Ġstring Ġform Ċ Ġ* Ġ@ param ĠtestCase Ġ- Ġtest Ġcase Ġis Ġrequired Ġonly Ġbecause Ġof Ġkeyboard Ġrelated Ġfunctions Ċ Ġ* Ċ Ġ* ĠTODO : Ġremove Ġ[ testCase ] Ġparameter Ġ( so Ġmove Ġ[ shortcut ] Ġand Ġ[ type Text ] Ġfunctions Ċ Ġ* Ġout Ġof ĠGui TestCase ) Ċ Ġ* Ġ*/ Ċ fun ĠExtended J Tree Path Fixture . select With Keyboard ( testCase : ĠGui TestCase , Ġvar arg Ġpath : ĠString ) Ġ{ ĊĠ Ġfun Ġcurrent Value (): ĠString Ġ{ ĊĠĠĠ Ġval Ġselected Row Ġ= Ġtarget (). selection Rows . first () ĊĠĠĠ Ġreturn Ġvalue At ( selected Row ) Ġ?: Ġthrow ĠIllegalStateException (" Nothing Ġis Ġselected Ġin Ġthe Ġtree ") ĊĠ Ġ} ĊĠ Ġclick () ĊĠ ĠtestCase . shortcut ( Key . HOME ) Ġ// Ġselect Ġthe Ġtop Ġrow ĊĠ Ġfor (( index , Ġstep ) Ġin Ġpath . with Index ()){ ĊĠĠĠ Ġif ( current Value () Ġ!= Ġstep ) Ġ{ ĊĠĠĠĠĠ ĠtestCase . type Text ( step ) ĊĠĠĠĠĠ Ġwhile Ġ( current Value () Ġ!= Ġstep ) ĊĠĠĠĠĠĠĠ ĠtestCase . shortcut ( Key . DOWN ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif ( index Ġ< Ġpath . size Ġ- 1 ) ĠtestCase . shortcut ( Key . RIGHT ) ĊĠ Ġ} Ċ } ĊĊ Ċ fun ĠGui TestCase . gradle Re import () Ġ{ ĊĠ Ġlog Test Step (" Re import Ġgradle Ġproject ") ĊĠ Ġide Frame Ġ{ ĊĠĠĠ Ġtool window ( id Ġ= Ġ" Gradle ") Ġ{ ĊĠĠĠĠĠ Ġcontent ( tab Name Ġ= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġwait AM oment () ĊĠĠĠĠĠĠĠ Ġaction Button (" Refresh Ġall Ġexternal Ġprojects "). click () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun ĠGui TestCase . maven Re import () Ġ{ ĊĠ Ġlog Test Step (" Re import Ġmaven Ġproject ") ĊĠ Ġide Frame Ġ{ ĊĠĠĠ Ġtool window ( id Ġ= Ġ" Maven ") Ġ{ ĊĠĠĠĠĠ Ġcontent ( tab Name Ġ= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbutton Ġ= Ġaction Button (" Re import ĠAll ĠMaven ĠProjects ") ĊĠĠĠĠĠĠĠ ĠPause . pause ( object Ġ: ĠCondition (" Wait Ġfor Ġbutton ĠRe import ĠAll ĠMaven ĠProjects Ġto Ġbe Ġenabled .") Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġtest (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġbutton . isEnabled ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}, ĠTimeout s . minutes 0 2 ) ĊĠĠĠĠĠĠĠ Ġrobot (). waitFor Idle () ĊĠĠĠĠĠĠĠ Ġbutton . click () ĊĠĠĠĠĠĠĠ Ġrobot (). waitFor Idle () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun ĠGui TestCase . check Project Is Compiled ( expected Status : ĠString ) Ġ{ ĊĠ Ġval Ġtext Event Log Ġ= Ġ" Event ĠLog " ĊĠ Ġide Frame Ġ{ ĊĠĠĠ Ġlog Test Step (" Go ing Ġto Ġcheck Ġhow Ġthe Ġproject Ġcompiles ") ĊĠĠĠ Ġinvoke MainMenu (" Compile Project ") ĊĠĠĠ Ġwait AM oment () ĊĠĠĠ Ġtool window ( id Ġ= Ġtext Event Log ) Ġ{ ĊĠĠĠĠĠ Ġcontent ( tab Name Ġ= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor { ĊĠĠĠĠĠĠĠĠĠ Ġval Ġlast Line Ġ= Ġthis . getCurrent File Contents ( false )?. lines ()?. last Ġ{ Ġit . trim (). isNotEmpty () Ġ} Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠ Ġassert ( last Line . contains ( expected Status )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Line Ġ`$ last Line ` Ġdoesn 't Ġcontain Ġexpected Ġstatus Ġ`$ expected Status `" ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun ĠGui TestCase . check Project Is Run ( configuration : ĠString , Ġmessage : ĠString ) Ġ{ ĊĠ Ġval Ġbutton Run Ġ= Ġ" Run " ĊĠ Ġlog Test Step (" Go ing Ġto Ġrun Ġconfiguration Ġ`$ configuration ` ") ĊĠ Ġide Frame Ġ{ ĊĠĠĠ Ġnavigation Bar Ġ{ ĊĠĠĠĠĠ Ġaction Button ( button Run ). click () ĊĠĠĠ Ġ} ĊĠĠĠ Ġwait AM oment () ĊĠĠĠ Ġtool window ( id Ġ= Ġbutton Run ) Ġ{ ĊĠĠĠĠĠ Ġcontent ( tab Name Ġ= Ġconfiguration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġeditor Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠGui TestUtil Kt . wait Until (" Wait Ġfor Ġ'$ message ' Ġappears ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġthis . getCurrent File Contents ( false )?. lines ()?. filter Ġ{ Ġit . trim (). isNotEmpty () Ġ} Ġ?: ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Info (" output : Ġ${ output . map Ġ{ Ġ"\ n \ t $ it " Ġ}} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Info (" expected Ġmessage Ġ= Ġ'$ message '") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput . first OrNull Ġ{ Ġit . contains ( message ) Ġ} Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun ĠGui TestCase . check Run G utter Icons ( expected NumberOf Run Icons : ĠInt , Ġexpected Run Lines : ĠList < String >) Ġ{ ĊĠ Ġide Frame Ġ{ ĊĠĠĠ Ġlog Test Step (" Go ing Ġto Ġcheck Ġwhether Ġ$ expected NumberOf Run Icons Ġ` Run ` Ġg utter Ġicons Ġare Ġpresent ") ĊĠĠĠ Ġeditor Ġ{ ĊĠĠĠĠĠ Ġwait Until File Is Loaded () ĊĠĠĠĠĠ Ġwait Until Error Analysis Fin ishes () ĊĠĠĠĠĠ Ġg utter . wait Until Icons Shown ( map Of ( G utter Fixture . G utter Icon . RUN _ SCRIPT Ġto Ġexpected NumberOf Run Icons )) ĊĠĠĠĠĠ Ġval Ġg utter Run Lines Ġ= Ġg utter . lines With G utter Icon ( G utter Fixture . G utter Icon . RUN _ SCRIPT ) ĊĠĠĠĠĠ Ġval Ġcontents Ġ= Ġthis @ editor . getCurrent File Contents ( false )?. lines () Ġ?: ĠlistOf () ĊĠĠĠĠĠ Ġfor Ġ(( index , Ġline ) Ġin Ġg utter Run Lines . with Index ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġline Ġnumbers Ġstart Ġwith Ġ 1 , Ġbut Ġindex Ġin Ġthe Ġcontents Ġlist Ġstarts Ġwith Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Line Ġ= Ġcontents [ line Ġ- Ġ 1 ] ĊĠĠĠĠĠĠĠ Ġval Ġexpected Line Ġ= Ġexpected Run Lines [ index ] ĊĠĠĠĠĠĠĠ Ġassert ( current Line . contains ( expected Line )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ" At Ġline Ġ#$ line Ġthe Ġactual Ġtext Ġis Ġ`$ current Line `, Ġbut Ġit Ġwas Ġexpected Ġ`$ expected Line `" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ