/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 ĠB rian ĠNorm an Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . bn orm . power Ċ Ċ import Ġcom . tsch uch ort . compile testing . Kotlin Compilation Ċ import Ġcom . tsch uch ort . compile testing . SourceFile Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . junit . Test Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . Print Stream Ċ import Ġjava . lang . reflect . Invocation TargetException Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠDebug Function Test Ġ{ ĊĠ Ġ@ Test ĊĠ Ġfun Ġ` debug Ġfunction Ġtransformation `() Ġ{ ĊĠĠĠ Ġval Ġactual Ġ= Ġexecute Main Debug ( ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġdbg ( 1 Ġ+ Ġ 2 Ġ+ Ġ 3 ) ĊĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġ) ĊĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġdbg ( 1 Ġ+ Ġ 2 Ġ+ Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 ĊĠĠĠĠĠ Ġ""" . trim Indent (), ĊĠĠĠĠĠ Ġactual . trim () ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġ` debug Ġfunction Ġtransformation Ġwith Ġmessage `() Ġ{ ĊĠĠĠ Ġval Ġactual Ġ= Ġexecute Main Debug ( ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠ Ġdbg ( 1 Ġ+ Ġ 2 Ġ+ Ġ 3 , Ġ" Message :") ĊĠĠĠĠĠ Ġ""" . trim Indent () ĊĠĠĠ Ġ) ĊĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠ Ġ""" ĊĠĠĠĠĠ ĠMessage : ĊĠĠĠĠĠ Ġdbg ( 1 Ġ+ Ġ 2 Ġ+ Ġ 3 , Ġ" Message :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 ĊĠĠĠĠĠ Ġ""" . trim Indent (), ĊĠĠĠĠĠ Ġactual . trim () ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġexecute Main Debug ( main Body : ĠString ): ĠString Ġ{ ĊĠ Ġval Ġfile Ġ= ĠSource File . kotlin ( ĊĠĠĠ Ġname Ġ= Ġ" main . kt ", ĊĠĠĠ Ġcontents Ġ= Ġ""" Ċ fun Ġ< T > Ġdbg ( value : ĠT ): ĠT Ġ= Ġvalue Ċ Ċ fun Ġ< T > Ġdbg ( value : ĠT , Ġmsg : ĠString ): ĠT Ġ{ ĊĠĠĠ Ġprintln ( msg ) ĊĠĠĠ Ġreturn Ġvalue Ċ } Ċ Ċ fun Ġmain () Ġ{ ĊĠ Ġ$ main Body Ċ } Ċ """, ĊĠĠĠ Ġtrim Indent Ġ= Ġfalse ĊĠ Ġ) ĊĊĠ Ġval Ġresult Ġ= Ġcompile ( listOf ( file ), ĠPower Assert Component Registrar ( set Of ( Fq Name (" dbg ")) )) ĊĠ ĠassertEquals ( Kotlin Compilation . ExitCode . OK , Ġresult . exit Code ) ĊĊĠ Ġval Ġk Clazz Ġ= Ġresult . class Loader . load Class (" Main Kt ") ĊĠ Ġval Ġmain Ġ= Ġk Clazz . declared Methods . single Ġ{ Ġit . name Ġ== Ġ" main " Ġ&& Ġit . parameter Count Ġ== Ġ 0 Ġ} ĊĠ Ġval Ġprev Out Ġ= ĠSystem . out ĊĠ Ġtry Ġ{ ĊĠĠĠ Ġval Ġout Ġ= ĠByteArrayOutputStream () ĊĠĠĠ ĠSystem . set Out ( Print Stream ( out )) ĊĠĠĠ Ġmain . invoke ( null ) ĊĠĠĠ Ġreturn Ġout . toString (" UTF - 8 ") ĊĠ Ġ} Ġcatch Ġ( t : ĠInvocation TargetException ) Ġ{ ĊĠĠĠ Ġthrow Ġt . cause !! ĊĠ Ġ} Ġfinally Ġ{ ĊĠĠĠ ĠSystem . set Out ( prev Out ) ĊĠ Ġ} Ċ } Ċ