// ĠCopyright Ġ 2 0 1 8 ĠAmazon . com , ĠInc . Ġor Ġits Ġaffiliates . ĠAll ĠRights ĠReserved . Ċ // ĠSPDX - License - Identifier : ĠApache - 2 . 0 Ċ Ċ package Ġsoftware . aws . tool k its . jetbrains . services . lambda . execution . sam Ċ Ċ import Ġcom . intellij . execution . exec utors . Default Debug Executor Ċ import Ġcom . intellij . test Framework . run In Ed t And Wait Ċ import Ġcom . intellij . x debugger . X Debugger Util Ċ import Ġcom . jetbrains . python . psi . Py File Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . Parameterized Ċ import Ġsoftware . amazon . aw ssdk . services . lambda . model . Runtime Ċ import Ġsoftware . aws . tool k its . jetbrains . settings . Sam Settings Ċ import Ġsoftware . aws . tool k its . jetbrains . utils . rules . Python Code Insight TestFixture Rule Ċ Ċ @ RunWith ( Parameterized :: class ) Ċ class ĠPython Sam Run Configuration IntegrationTest ( private Ġval Ġruntime : ĠRuntime ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġ@ Parameterized . Parameters ( name Ġ= Ġ"{ 0 }") ĊĠĠĠĠĠĠĠ Ġfun Ġdata (): ĠCollection < Array < Runtime >> Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Runtime . PYTHON 2 _ 7 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Runtime . PYTHON 3 _ 6 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Rule ĊĠĠĠ Ġ@ Jvm Field ĊĠĠĠ Ġval Ġproject Rule Ġ= ĠPython Code Insight TestFixture Rule () ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ ĠSam Settings . getInstance (). saved Executable Path Ġ= ĠSystem . getenv (). get OrDefault (" SAM _ CLI _ EXEC ", Ġ" sam ") ĊĊĠĠĠĠĠĠĠ Ġval Ġfixture Ġ= Ġproject Rule . fixture ĊĠĠĠĠĠĠĠ Ġfixture . add File To Project ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" hello _ world /__ init __. py ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġpsi Class Ġ= Ġfixture . add File To Project ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" hello _ world / app . py ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdef Ġlambda _ handler ( event , Ġcontext ): ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Hello Ġworld " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrun In Ed t And Wait Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixture . open File In Editor ( psi Class . containing File . virtual File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsam Is Executed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrun Configuration Ġ= Ġrun Configuration () ĊĠĠĠĠĠĠĠ ĠassertThat ( run Configuration ). isNotNull ĊĊĠĠĠĠĠĠĠ Ġval Ġexecute Lambda Ġ= Ġexecute Lambda ( run Configuration ) ĊĠĠĠĠĠĠĠ ĠassertThat ( execute Lambda . exit Code ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( execute Lambda . stdout ). contains (" Hello Ġworld ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsam Is Executed With Debugger () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun In Ed t And Wait Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= Ġproject Rule . fixture . editor . document ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlambda Class Ġ= Ġproject Rule . fixture . file Ġas ĠPy File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlambda Body Ġ= Ġlambda Class . top Level Functions [ 0 ]. statement List . statements [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠlineNumber Ġ= Ġdocument . get LineNumber ( lambda Body . text Offset ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠX Debugger Util . getInstance (). toggle Line Breakpoint ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Rule . project , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Rule . fixture . file . virtual File , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlineNumber ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrun Configuration Ġ= Ġrun Configuration () ĊĠĠĠĠĠĠĠ ĠassertThat ( run Configuration ). isNotNull ĊĊĠĠĠĠĠĠĠ Ġval Ġdebugger Is Hit Ġ= Ġcheck Break Point Hit ( project Rule . project ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexecute Lambda Ġ= Ġexecute Lambda ( run Configuration , ĠDefault Debug Executor . EXECUT OR _ ID ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠassertThat ( execute Lambda . exit Code ). isEqualTo ( 0 ) ĠTODO : ĠWhen Ġdebugging , Ġalways Ġexits Ġwith Ġ 1 3 7 ĊĠĠĠĠĠĠĠ ĠassertThat ( execute Lambda . stdout ). contains (" Hello Ġworld ") ĊĊĠĠĠĠĠĠĠ ĠassertThat ( debugger Is Hit . get ()). isTrue () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Configuration (): ĠSam Run Configuration Ġ= Ġcreate Run Configuration ( ĊĠĠĠĠĠĠĠ Ġproject Ġ= Ġproject Rule . project , ĊĠĠĠĠĠĠĠ Ġinput Ġ= Ġ"\" Hello ĠWorld \"", ĊĠĠĠĠĠĠĠ Ġhandler Ġ= Ġ" hello _ world . app . lambda _ handler ", ĊĠĠĠĠĠĠĠ Ġruntime Ġ= Ġruntime ĊĠĠĠ Ġ) Ċ }