// Ġ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 . diagnostic . Message Pool Ċ import Ġcom . intellij . openapi . progress . Progress Manager Ċ import Ġcom . intellij . openapi . util . Ref Ċ import Ġcom . intellij . test Gui Framework . framework . Gui TestUtil Ċ import Ġcom . intellij . ui . En gr aved Label Ċ import Ġorg . fest . swing . core . Component Matcher Ċ import Ġorg . fest . swing . core . GenericType Matcher Ċ import Ġorg . fest . swing . core . Robot Ċ import Ġorg . fest . swing . ed t . Gui Action Runner Ċ import Ġorg . fest . swing . ed t . Gui Query Ċ import Ġorg . fest . swing . ed t . Gui Task Ċ import Ġorg . fest . swing . exception . Component Lookup Exception Ċ import Ġorg . fest . swing . exception . Wait Timed Out Error Ċ import Ġorg . fest . swing . timing . Condition Ċ import Ġorg . fest . swing . timing . Pause Ċ import Ġorg . fest . swing . timing . Timeout Ċ import Ġorg . fest . swing . timing . Wait Ċ import Ġjava . awt . Component Ċ import Ġjava . awt . Container Ċ import Ġjava . awt . Window Ċ import Ġjava . util .* Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġjavax . swing . J Dialog Ċ import Ġjavax . swing . JLabel Ċ import Ġjavax . swing . J RadioButton Ċ import Ġkotlin . collections . ArrayList Ċ Ċ /** Ċ Ġ* Ġ@ author ĠSer ge y ĠKar as he v ich Ċ Ġ*/ Ċ object ĠGui TestUtil Kt Ġ{ ĊĊĠ Ġfun Ġcreate Tree ( string : ĠString ): ĠImmutable Tree < String > Ġ{ ĊĠĠĠ Ġval Ġcurrent Path Ġ= ĠArrayList < String >() ĊĠĠĠ Ġvar Ġlines Ġ= Ġstring . split ("\ n ") ĊĠĠĠ Ġif Ġ( lines . last (). isEmpty ()) Ġlines Ġ= Ġlines . sub List ( 0 , Ġlines . last Index Ġ- Ġ 1 ) ĊĊĠĠĠ Ġval Ġtree : ĠImmutable Tree < String > Ġ= ĠImmutable Tree () ĊĠĠĠ Ġvar Ġlast Node : ĠImmutable TreeNode < String >? Ġ= Ġnull ĊĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġfor Ġ( line Ġin Ġlines ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Path . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġcurrent Path . add ( line ) ĊĠĠĠĠĠĠĠĠĠ Ġtree . root Ġ= ĠImmutable TreeNode ( line . without Indent (), Ġnull ) ĊĠĠĠĠĠĠĠĠĠ Ġlast Node Ġ= Ġtree . root ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Path . last () Ġhas Diff Indent From Ġline ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Path . last (). get Indent () Ġ> Ġline . get Indent ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( current Path . last () Ġhas Diff Indent From Ġline ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Path . remove At ( current Path . last Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Node Ġ= Ġlast Node !!. parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Path . remove At ( current Path . last Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Path . add ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Node Ġ= Ġlast Node !!. parent !!. create Child ( line . without Indent ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Path . add ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Node Ġ= Ġlast Node !!. create Child ( line . without Indent ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Path . remove At ( current Path . last Index ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Path . add ( line ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlast Node Ġ= Ġlast Node !!. parent !!. create Child ( line . without Indent ()) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġreturn Ġtree ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch ( e : ĠException ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠException (" Unable Ġto Ġbuild Ġa Ġtree Ġfrom Ġgiven Ġdata . ĠCheck Ġindent s Ġand Ġ") ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġin fix Ġfun ĠString . has Diff Indent From ( s : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġthis . get Indent () Ġ!= Ġs . get Indent () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠString . get Indent () Ġ= Ġthis . indexOf First Ġ{ Ġit Ġ!= Ġ' Ġ' Ġ} ĊĊĠ Ġprivate Ġfun ĠString . without Indent () Ġ= Ġthis . substring ( this . get Indent ()) ĊĊĠ Ġprivate Ġoperator Ġfun ĠString . times ( n : ĠInt ): ĠString Ġ{ ĊĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder ( n ) ĊĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. n ) Ġ{ ĊĠĠĠĠĠ Ġsb . append ( this ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġsb . toString () ĊĠ Ġ} ĊĊĠ Ġclass ĠImmutable Tree < Value > Ġ{ ĊĠĠĠ Ġvar Ġroot : ĠImmutable TreeNode < Value >? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġprint () Ġ{ ĊĠĠĠĠĠ Ġif Ġ( root Ġ== Ġnull ) Ġthrow ĠException (" Unable Ġto Ġprint Ġtree Ġwithout Ġroot Ġ( or Ġif Ġroot Ġis Ġnull )") ĊĠĠĠĠĠ Ġprint Recursive ( root !! , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġprint Recursive ( root : ĠImmutable TreeNode < Value >, Ġindent : ĠInt ) Ġ{ ĊĠĠĠĠĠ Ġprintln (" Ġ" Ġ* Ġindent Ġ+ Ġroot . value ) ĊĠĠĠĠĠ Ġif Ġ(! root . is Leaf ()) Ġroot . children . forEach Ġ{ Ġprint Recursive ( it , Ġindent Ġ+ Ġ 2 ) Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġ} ĊĊĊĠ Ġdata Ġclass ĠImmutable TreeNode < Value >( val Ġvalue : ĠValue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent : ĠImmutable TreeNode < Value > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchildren : ĠLinkedList < Immutable TreeNode < Value >> Ġ= ĠLinkedList ()) Ġ{ ĊĊĠĠĠ Ġfun Ġcreate Child ( child Value : ĠValue ): ĠImmutable TreeNode < Value > Ġ{ ĊĠĠĠĠĠ Ġval Ġchild Ġ= ĠImmutable TreeNode < Value >( child Value , Ġthis ) ĊĠĠĠĠĠ Ġchildren . add ( child ) ĊĠĠĠĠĠ Ġreturn Ġchild ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcount Children (): ĠInt Ġ= Ġchildren . count () ĊĊĠĠĠ Ġfun Ġis Leaf (): ĠBoolean Ġ= Ġ( children . count () Ġ== Ġ 0 ) ĊĊĠ Ġ} ĊĊĠ Ġfun ĠComponent . is Text Component (): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġtext Components Types Ġ= ĠarrayOf ( JLabel :: class . java , ĠJ RadioButton :: class . java ) ĊĠĠĠ Ġreturn Ġtext Components Types . any Ġ{ Ġit . is Instance ( this ) Ġ} ĊĠ Ġ} ĊĊĠ Ġfun ĠComponent . getComponent Text (): ĠString ? Ġ{ ĊĠĠĠ Ġwhen Ġ( this ) Ġ{ ĊĠĠĠĠĠ Ġis ĠJLabel Ġ-> Ġreturn Ġthis . text ĊĠĠĠĠĠ Ġis ĠJ RadioButton Ġ-> Ġreturn Ġthis . text ĊĠĠĠĠĠ Ġelse Ġ-> Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġfind Component By Text ( robot : ĠRobot , Ġcontainer : ĠContainer , Ġtext : ĠString ): ĠComponent Ġ{ ĊĠĠĠ Ġreturn Ġwith Pause When Null Ġ{ Ġrobot . finder (). findAll ( container , ĠComponent Matcher Ġ{ Ġcomponent Ġ-> ĊĠĠĠĠĠ Ġcomponent !!. is Showing Ġ&& Ġcomponent . is Text Component () Ġ&& Ġcomponent . getComponent Text () Ġ== Ġtext Ġ}). first OrNull () Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġ< Bounded Component > Ġfind Bounded Component By Text ( robot : ĠRobot , Ġcontainer : ĠContainer , Ġtext : ĠString , Ġcomponent Type : ĠClass < Bounded Component >): ĠBo unded Component Ġ{ ĊĠĠĠ Ġval Ġcomponent With Text Ġ= Ġfind Component By Text ( robot , Ġcontainer , Ġtext ) ĊĠĠĠ Ġif Ġ( component With Text Ġis ĠJLabel Ġ&& Ġcomponent With Text . label For Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠ Ġval Ġlabeled Component Ġ= Ġcomponent With Text . label For ĊĠĠĠĠĠ Ġif Ġ( component Type . is Instance ( labeled Component )) Ġreturn Ġlabeled Component Ġas ĠBo unded Component ĊĠĠĠĠĠ Ġreturn Ġrobot . finder (). find ( labeled Component Ġas ĠContainer ) Ġ{ Ġcomponent Ġ-> Ġcomponent Type . is Instance ( component ) Ġ} Ġas ĠBo unded Component ĊĠĠĠ Ġ} ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġreturn Ġwith Pause When Null Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcomponents Of Instance Ġ= Ġrobot . finder (). findAll ( container , ĠComponent Matcher Ġ{ Ġcomponent Ġ-> Ġcomponent Type . is Instance ( component ) Ġ}) ĊĠĠĠĠĠĠĠ Ġcomponents Of Instance . filter Ġ{ Ġit . is Showing Ġ&& Ġit . on Height Center ( component With Text , Ġtrue ) Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. sorted By Ġ{ Ġit . bounds . x Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠ Ġ} Ġas ĠBo unded Component ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠWait Timed Out Error ) Ġ{ ĊĠĠĠĠĠ Ġthrow ĠComponent Lookup Exception (" Unable Ġto Ġfind Ġcomponent Ġof Ġtype : Ġ${ component Type . simple Name } Ġin Ġ$ container Ġby Ġtext : Ġ$ text " Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ// Does Ġthe Ġtext Component Ġintersect s Ġhorizontal Ġline Ġgoing Ġthrough Ġthe Ġcenter Ġof Ġthis Ġcomponent Ġand Ġl ays Ġle fter Ġthan Ġthis Ġcomponent ĊĠ Ġfun ĠComponent . on Height Center ( text Component : ĠComponent , Ġon Left : ĠBoolean ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġcenter X Axis Ġ= Ġthis . bounds . height Ġ/ Ġ 2 Ġ+ Ġthis . location On Screen . y ĊĠĠĠ Ġval Ġside Check Ġ= ĊĠĠĠĠĠ Ġif Ġ( on Left ) ĊĠĠĠĠĠĠĠ Ġtext Component . location On Screen . x Ġ Ġ< Ġthis . location On Screen . x ĊĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġtext Component . location On Screen . x Ġ> Ġthis . location On Screen . x ĊĠĠĠ Ġreturn Ġ( text Component . location On Screen . y Ġ<= Ġcenter X Axis ) ĊĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( text Component . location On Screen . y Ġ+ Ġtext Component . bounds . height Ġ>= Ġcenter X Axis ) ĊĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġ( side Check ) ĊĠ Ġ} ĊĊĠ Ġfun Ġrun On Ed t ( task : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ ĠGui Action Runner . execute ( object Ġ: ĠGui Task () Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġexecute In ED T () Ġ{ ĊĠĠĠĠĠĠĠ Ġtask () ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* Ġwaits Ġfor Ġ 3 0 Ġsec Ġtimeout Ġwhen Ġtest With Pause () Ġnot Ġreturn Ġnull ĊĠĠ Ġ*/ ĊĠ Ġfun Ġ< ReturnType > Ġwith Pause When Null ( timeout InSeconds : ĠInt Ġ= Ġ 3 0 , Ġtest With Pause : Ġ() Ġ-> ĠReturn Type ?): ĠReturn Type Ġ{ ĊĠĠĠ Ġval Ġref Ġ= ĠRef < ReturnType >() ĊĠĠĠ ĠPause . pause ( object : ĠCondition (" With Ġpause ...") Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġtest (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest With Pause Result Ġ= Ġtest With Pause () ĊĠĠĠĠĠĠĠ Ġif Ġ( test With Pause Result Ġ!= Ġnull ) Ġref . set ( test With Pause Result ) ĊĠĠĠĠĠĠĠ Ġreturn Ġ( test With Pause Result Ġ!= Ġnull ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}, ĠTimeout . timeout ( timeout InSeconds . to Long (), ĠTimeUnit . SECONDS )) ĊĠĠĠ Ġreturn Ġref . get () ĊĠ Ġ} ĊĊĠ Ġfun Ġwait Until ( condition : ĠString , Ġtimeout InSeconds : ĠInt Ġ= Ġ 6 0 , Ġconditional Function : Ġ() Ġ-> ĠBoolean ) Ġ{ ĊĠĠĠ ĠPause . pause ( object Ġ: ĠCondition ("$ timeout InSeconds Ġsecond ( s ) Ġuntil Ġ$ condition ") Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġtest () Ġ= Ġconditional Function () ĊĠĠĠ Ġ}, ĠTimeout . timeout ( timeout InSeconds . to Long (), ĠTimeUnit . SECONDS )) ĊĠ Ġ} ĊĊĠ Ġfun Ġ< ComponentType Ġ: ĠComponent > ĠfindAll With B FS ( container : ĠContainer , Ġclazz : ĠClass < ComponentType >): ĠList < ComponentType > Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠLinkedList < ComponentType >() ĊĠĠĠ Ġval Ġqueue : ĠQueue < Component > Ġ= ĠLinkedList () ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġcheck ( container : ĠComponent ) Ġ{ ĊĠĠĠĠĠ Ġif Ġ( clazz . is Instance ( container )) Ġresult . add ( container Ġas ĠComponent Type ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġqueue . add ( container ) ĊĠĠĠ Ġwhile ( queue . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠ Ġval Ġpol led Ġ= Ġqueue . poll () ĊĠĠĠĠĠ Ġcheck ( pol led ) ĊĠĠĠĠĠ Ġif Ġ( pol led Ġis ĠContainer ) ĊĠĠĠĠĠĠĠ Ġqueue . addAll ( pol led . components ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġresult ĊĊĠ Ġ} ĊĊĠ Ġfun Ġ< ComponentType Ġ: ĠComponent > Ġwait Until G one ( robot : ĠRobot , Ġtimeout InSeconds : ĠInt Ġ= Ġ 3 0 , Ġroot : ĠContainer ? Ġ= Ġnull , Ġmatcher : ĠGeneric Type Matcher < ComponentType >) Ġ{ ĊĠĠĠ Ġreturn ĠGui TestUtil . wait Until G one ( root , Ġtimeout InSeconds , Ġmatcher ) ĊĠ Ġ} ĊĊĠ Ġfun ĠGui TestCase . wait Progress Dialog Until G one ( dialog Title : ĠString , Ġtimeout To Ap pear InSeconds : ĠInt Ġ= Ġ 5 , Ġtimeout To G one InSeconds : ĠInt Ġ= Ġ 6 0 ) Ġ{ ĊĠĠĠ Ġwait Progress Dialog Until G one ( this . robot (), Ġdialog Title , Ġtimeout To Ap pear InSeconds , Ġtimeout To G one InSeconds ) ĊĠ Ġ} ĊĊĠ Ġfun Ġwait Progress Dialog Until G one ( robot : ĠRobot , Ġprogress Title : ĠString , Ġtimeout To Ap pear InSeconds : ĠInt Ġ= Ġ 5 , Ġtimeout To G one InSeconds : ĠInt Ġ= Ġ 6 0 ) Ġ{ ĊĠĠĠ Ġ// wait Ġdialog Ġappearance . ĠIn Ġa Ġbad Ġcase Ġwe Ġcould Ġpass Ġdialog Ġappearance . ĊĠĠĠ Ġvar Ġdialog : ĠJ Dialog ? Ġ= Ġnull ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġwait Until (" progress Ġdialog Ġwith Ġtitle Ġ$ progress Title Ġwill Ġappear ", Ġtimeout To Ap pear InSeconds ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdialog Ġ= Ġfind Progress Dialog ( robot , Ġprogress Title ) ĊĠĠĠĠĠĠĠ Ġdialog Ġ!= Ġnull ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( timeout Error : ĠWait Timed Out Error ) Ġ{ Ġreturn Ġ} ĊĠĠĠ Ġwait Until (" progress Ġdialog Ġwith Ġtitle Ġ$ progress Title Ġwill Ġgone ", Ġtimeout To G one InSeconds ) Ġ{ Ġdialog Ġ== Ġnull Ġ|| Ġ! dialog !!. is Showing Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġfind Progress Dialog ( robot : ĠRobot , Ġprogress Title : ĠString ): ĠJ Dialog ? Ġ{ ĊĠĠĠ Ġreturn Ġrobot . finder (). findAll ( type Matcher ( J Dialog :: class . java ) Ġ{ ĊĠĠĠĠĠ ĠfindAll With B FS ( it , ĠEn gr aved Label :: class . java ). filter Ġ{ Ġit . is Showing Ġ&& Ġit . text Ġ== Ġprogress Title Ġ}. any () ĊĠĠĠ Ġ} Ġ). first OrNull () ĊĠ Ġ} ĊĊĠ Ġfun Ġ< ComponentType Ġ: ĠComponent ?> Ġtype Matcher ( component Type Class : ĠClass < ComponentType >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatcher : Ġ( ComponentType ) Ġ-> ĠBoolean ): ĠGeneric Type Matcher < ComponentType > Ġ{ ĊĠĠĠ Ġreturn Ġobject Ġ: ĠGeneric Type Matcher < ComponentType >( component Type Class ) Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġis Matching ( component : ĠComponent Type ): ĠBoolean Ġ= Ġmatcher ( component ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĊĠ Ġfun Ġ< ReturnType > Ġcompute On Ed t ( query : Ġ() Ġ-> ĠReturn Type ): ĠReturn Type ? ĊĠĠĠ Ġ= ĠGui Action Runner . execute ( object Ġ: ĠGui Query < ReturnType >() Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġexecute In ED T (): ĠReturn Type Ġ= Ġquery () ĊĠ Ġ}) ĊĊĠ Ġfun Ġ< ReturnType > Ġcompute On Ed t With Try ( query : Ġ() Ġ-> ĠReturn Type ?): ĠReturn Type ? Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= ĠGui Action Runner . execute ( object Ġ: ĠGui Query < Pair < ReturnType ?, ĠThrowable ? >>() Ġ{ ĊĠĠĠĠĠ Ġoverride Ġfun Ġexecute In ED T (): Ġkotlin . Pair < ReturnType ?, ĠThrowable ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠPair ( query (), Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠPair ( null , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}) ĊĠĠĠ Ġif Ġ( result ?. second Ġ!= Ġnull ) Ġthrow Ġresult . second !! ĊĠĠĠ Ġreturn Ġresult ?. first ĊĠ Ġ} ĊĊĠ Ġfun Ġensure Create Has Done ( gui TestCase : ĠGui TestCase ) Ġ{ ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠ Ġcom . intellij . test Gui Framework . impl . Gui TestUtil Kt . wait Until G one ( robot Ġ= Ġgui TestCase . robot (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠ Ġmatcher Ġ= Ġcom . intellij . test Gui Framework . impl . Gui TestUtil Kt . type Matcher ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĠĠĠĠĠ Ġcom . intellij . openapi . wm . impl . welcome Screen . Flat Welcome Frame :: class . java ) Ġ{ Ġit . is Showing Ġ}) ĊĠĠĠ Ġ} ĊĠĠĠ Ġcatch Ġ( timeout Error : ĠWait Timed Out Error ) Ġ{ ĊĠĠĠĠĠ Ġwith ( gui TestCase ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwelcome Frame Ġ{ Ġbutton (" Create "). click When Enabled () Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġfun Ġwindows Showing (): ĠList < Window > Ġ{ ĊĠĠĠ Ġval Ġlist Builder Ġ= ĠArrayList < Window >() ĊĠĠĠ ĠWindow . get Windows (). filter To ( list Builder ) Ġ{ Ġit . is Showing Ġ} ĊĠĠĠ Ġreturn Ġlist Builder ĊĠ Ġ} ĊĊĠ Ġfun Ġfatal Errors From Ide ( after Date : ĠDate Ġ= ĠDate ( 0 )): ĠList < Error > Ġ{ ĊĠĠĠ Ġval Ġerror Messages Ġ= ĠMessage Pool . getInstance (). get Fatal Errors ( true , Ġtrue ) ĊĠĠĠ Ġval Ġfresh Error Messages Ġ= Ġerror Messages . filter Ġ{ Ġit . date Ġ> Ġafter Date Ġ} ĊĠĠĠ Ġval Ġerrors Ġ= Ġmutable ListOf < Error >() ĊĠĠĠ Ġfor Ġ( errorMessage Ġin Ġfresh Error Messages ) Ġ{ ĊĠĠĠĠĠ Ġval Ġmessage Builder Ġ= ĠStringBuilder ( errorMessage . message Ġ?: Ġ"") ĊĠĠĠĠĠ Ġval Ġadditional Info Ġ: ĠString ? Ġ= ĠerrorMessage . additional Info ĊĠĠĠĠĠ Ġif Ġ( additional Info Ġ!= Ġnull Ġ&& Ġadditional Info . isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġmessage Builder . append ( System . getProperty (" line . separator ")). append (" Additional ĠInfo : Ġ"). append ( additional Info ) ĊĠĠĠĠĠ Ġval Ġerror Ġ= ĠError ( message Builder . toString (), ĠerrorMessage . throwable ) ĊĠĠĠĠĠ Ġerrors . add ( error ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠCollections . unmodifiable List ( errors ) ĊĠ Ġ} ĊĊĠ Ġfun ĠwaitFor Background Tasks ( robot : ĠRobot , Ġtimeout InSeconds : ĠInt Ġ= Ġ 1 2 0 ) Ġ{ ĊĠĠĠ ĠWait . seconds ( timeout InSeconds . to Long ()). expect ing (" background Ġtasks Ġto Ġfinish ") ĊĠĠĠĠĠ Ġ. until Ġ{ ĊĠĠĠĠĠĠĠ Ġrobot . waitFor Idle () ĊĊĠĠĠĠĠĠĠ Ġval Ġprogress Manager Ġ= ĠProgress Manager . getInstance () ĊĠĠĠĠĠĠĠ Ġ! progress Manager . has Modal Progress Indicator () Ġ&& ĊĠĠĠĠĠĠĠ Ġ! progress Manager . has Progress Indicator () Ġ&& ĊĠĠĠĠĠĠĠ Ġ! progress Manager . has Unsafe Progress Indicator () ĊĠĠĠĠĠ Ġ} ĊĠ Ġ} ĊĊ Ċ } Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠ Ġval Ġtree Ġ= ĠGui TestUtil Kt . create Tree (" project \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ Ġsrc \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġcom . username \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠ ĠTest 1 . java \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠ ĠTest 2 . java \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ Ġlib \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġsome Lib 1 \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġsome Lib 2 ") ĊĠ Ġtree . print () Ċ } Ċ