/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 9 Ġ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 . debugger . test . util Ċ Ċ import Ġorg . jetbrains . kotlin . idea . test . Kotlin Base Test . Test File Ċ Ċ enum Ġclass ĠSte pping Instruction Kind ( val Ġdirective Name : ĠString ) Ġ{ ĊĠĠĠ ĠStep Into (" STEP _ IN TO "), ĊĠĠĠ ĠStep Out (" STEP _ OUT "), ĊĠĠĠ ĠStep Over (" STEP _ OVER "), ĊĠĠĠ ĠForce Step Over (" STEP _ OVER _ FORCE "), ĊĠĠĠ ĠSmart Step Into (" SM ART _ STEP _ IN TO "), ĊĠĠĠ ĠSmart Step Into ByIndex (" SM ART _ STEP _ IN TO _ BY _ INDEX "), ĊĠĠĠ ĠResume (" RE SU ME ") Ċ } Ċ Ċ class ĠSte pping Instruction ( val Ġkind : ĠSte pping Instruction Kind , Ġval Ġarg : ĠInt ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġparse ( file : ĠTest File ): ĠList < Ste pping Instruction > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparse ( file , ĠComp anion :: parse Line ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġparse Single ( file : ĠTest File , Ġkind : ĠSte pping Instruction Kind ): ĠSte pping Instruction ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstructions Ġ= Ġparse ( file ) Ġ{ Ġline Ġ-> Ġparse Kind ( line , Ġkind ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instructions . size Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Se veral Ġinstructions Ġfound Ġfor Ġkind Ġ$ kind ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġinstructions . single OrNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġparse ( file : ĠTest File , Ġprocessor : Ġ( String ) Ġ-> ĠSte pping Instruction ?): ĠList < Ste pping Instruction > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfile . content . line Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . trim Start () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . startsWith ("// Ġ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull To ( mutable ListOf (), Ġprocessor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġparse Line ( line : ĠString ): ĠSte pping Instruction ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( kind Ġin ĠSte pping Instruction Kind . values ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparse Kind ( line , Ġkind )?. let Ġ{ Ġreturn Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġparse Kind ( line : ĠString , Ġkind : ĠSte pping Instruction Kind ): ĠSte pping Instruction ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġ"// Ġ" Ġ+ Ġkind . directive Name Ġ+ Ġ": Ġ" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( line . startsWith ( prefix )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġraw Value Ġ= Ġline . drop ( prefix . length ). trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn Ġ= Ġraw Value . toInt OrNull () Ġ?: Ġerror (" Int Ġexpected , Ġgot Ġ$ raw Value ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠSte pping Instruction ( kind , Ġn ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }