/* Ċ Ġ* ĠCopyright Ġ 2 0 1 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 / LICENSE . txt Ġfile . Ċ Ġ*/ Ċ Ċ package Ġorg . jetbrains . kotlin . js . test Ċ Ċ import Ġorg . jetbrains . kotlin . ir . backend . js . Compilation Mode Ċ import Ġorg . jetbrains . kotlin . ir . backend . js . Compiled Module Ċ import Ġorg . jetbrains . kotlin . ir . backend . js . compile Ċ import Ġorg . jetbrains . kotlin . js . config . JS Configuration Keys Ċ import Ġorg . jetbrains . kotlin . js . config . Js Config Ċ import Ġorg . jetbrains . kotlin . js . facade . Main Call Parameters Ċ import Ġorg . jetbrains . kotlin . js . facade . Translation Unit Ċ import Ġorg . jetbrains . kotlin . name . Fq Name Ċ import Ġorg . jetbrains . kotlin . test . Target Backend Ċ import Ġjava . io . File Ċ Ċ private Ġval Ġfull Runtime K lib Path Ġ= Ġ" js / js . translator / testData / out / k libs / runtime Full /" Ċ private Ġval Ġdefault Runtime K lib Path Ġ= Ġ" js / js . translator / testData / out / k libs / runtime Default /" Ċ Ċ private Ġval ĠJS _ IR _ RUNTIME _ MODULE _ NAME Ġ= Ġ" JS _ IR _ RUNTIME " Ċ Ċ private Ġval Ġfull Runtime K lib Ġ= ĠComp iled Module ( JS _ IR _ RUNTIME _ MODULE _ NAME , Ġnull , Ġnull , Ġfull Runtime K lib Path , Ġempty List (), Ġtrue ) Ċ private Ġval Ġdefault Runtime K lib Ġ= ĠComp iled Module ( JS _ IR _ RUNTIME _ MODULE _ NAME , Ġnull , Ġnull , Ġdefault Runtime K lib Path , Ġempty List (), Ġtrue ) Ċ Ċ abstract Ġclass ĠBasic Ir Box Test ( ĊĠĠĠ Ġpath To Test Dir : ĠString , ĊĠĠĠ Ġtest Group Output Dir Prefix : ĠString , ĊĠĠĠ Ġpath To Root Output Dir : ĠString Ġ= ĠBasic Box Test . TEST _ DATA _ DIR _ PATH , ĊĠĠĠ Ġgenerate Source Map : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġgenerate Node Js Runner : ĠBoolean Ġ= Ġfalse Ċ ) Ġ: ĠBasic Box Test ( ĊĠĠĠ Ġpath To Test Dir , ĊĠĠĠ Ġtest Group Output Dir Prefix , ĊĠĠĠ Ġpath To Root Output Dir Ġ= Ġpath To Root Output Dir , ĊĠĠĠ Ġtyped Arrays Enabled Ġ= Ġtrue , ĊĠĠĠ Ġgenerate Source Map Ġ= Ġgenerate Source Map , ĊĠĠĠ Ġgenerate Node Js Runner Ġ= Ġgenerate Node Js Runner , ĊĠĠĠ Ġtarget Backend Ġ= ĠTarget Backend . JS _ IR Ċ ) Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġskip Min ification Ġ= Ġtrue ĊĊĠĠĠ Ġ// ĠTODO ĠDesign Ġincremental Ġcompilation Ġfor ĠIR Ġand Ġadd Ġtest Ġsupport ĊĠĠĠ Ġoverride Ġval Ġincremental Compilation Checks Enabled Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġcompilation Cache Ġ= Ġmutable Map Of < String , ĠComp iled Module >() ĊĊĠĠĠ Ġoverride Ġfun Ġdo Test ( filePath : ĠString , Ġexpected Result : ĠString , Ġmain Call Parameters : ĠMain Call Parameters , Ġcor outines Package : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcompilation Cache . clear () ĊĠĠĠĠĠĠĠ Ġsuper . do Test ( filePath , Ġexpected Result , Ġmain Call Parameters , Ġcor outines Package ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġruntime s Ġ= Ġmap Of ( Js Ir Test Runtime . DEFAULT Ġto Ġdefault Runtime K lib , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJs Ir Test Runtime . FULL Ġto Ġfull Runtime K lib ) ĊĊĠĠĠ Ġoverride Ġfun Ġtranslate Files ( ĊĠĠĠĠĠĠĠ Ġunits : ĠList < Translation Unit >, ĊĠĠĠĠĠĠĠ ĠoutputFile : ĠFile , ĊĠĠĠĠĠĠĠ Ġconfig : ĠJs Config , ĊĠĠĠĠĠĠĠ Ġoutput Prefix File : ĠFile ?, ĊĠĠĠĠĠĠĠ Ġoutput Post fix File : ĠFile ?, ĊĠĠĠĠĠĠĠ Ġmain Call Parameters : ĠMain Call Parameters , ĊĠĠĠĠĠĠĠ Ġincremental Data : ĠIncrement al Data , ĊĠĠĠĠĠĠĠ Ġremap : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġtest Package : ĠString ?, ĊĠĠĠĠĠĠĠ Ġtest Function : ĠString , ĊĠĠĠĠĠĠĠ Ġruntime : ĠJs Ir Test Runtime , ĊĠĠĠĠĠĠĠ Ġis Main Module : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfiles To Compile Ġ= Ġunits ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( it Ġas ĠTranslation Unit . SourceFile ). file Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġsplit Ġinput Ġfiles Ġto Ġsome Ġparts Ġ( global Ġcommon , Ġlocal Ġcommon , Ġtest ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Not Ġ{ Ġit . virtual FilePath . contains ( Basic Box Test . COMMON _ FILES _ DIR _ PATH ) Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġconfig . configuration . put ( Common Configuration Keys . EXCL UDE D _ ELEMENT S _ FROM _ DUMP ING , Ġset Of ("< JS _ IR _ RUNTIME > ")) Ċ // ĠĠĠĠĠĠĠ Ġconfig . configuration . put ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Configuration Keys . PHASE S _ TO _ VALIDATE _ AFTER , Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġset Of ( Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Remove Inline Function sWith Re ified Type Parameters Lower ing ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Inner Class Constructor Calls Lower ing ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Inline Class Lower ing ", Ġ" Const Lower ing " Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ċ // ĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġruntime K lib Ġ= Ġruntime s [ runtime ] ĊĊĠĠĠĠĠĠĠ Ġval Ġdependency Names Ġ= Ġconfig . configuration [ JS Configuration Keys . LIBRARIES ] !!. map Ġ{ ĠFile ( it ). name Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdependencies Ġ= ĠlistOf NotNull ( runtime K lib ) Ġ+ Ġdependency Names . map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompilation Cache [ it ] ĊĠĠĠĠĠĠĠ Ġ} Ċ Ċ // ĠĠĠĠĠĠĠ Ġconfig . configuration . put ( Common Configuration Keys . PHASE S _ TO _ DUMP _ STATE , Ġset Of (" Unit Material ization Lower ing ")) Ċ // ĠĠĠĠĠĠĠ Ġconfig . configuration . put ( Common Configuration Keys . PHASE S _ TO _ DUMP _ STATE _ BEFORE , Ġset Of (" Return able Block Lower ing ")) Ċ // ĠĠĠĠĠĠĠ Ġconfig . configuration . put ( Common Configuration Keys . PHASE S _ TO _ DUMP _ STATE _ AFTER , Ġset Of (" Multiple Cat ches Lower ing ")) Ċ // ĠĠĠĠĠĠĠ Ġconfig . configuration . put ( Common Configuration Keys . PHASE S _ TO _ VALIDATE , Ġset Of (" ALL ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġactual OutputFile Ġ= ĠoutputFile . absolute Path . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Main Module ) Ġit . replace ("_ v 5 . js ", Ġ"/") Ġelse Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . project , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles To Compile , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . configuration , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Fq Name (( test Package ?. let Ġ{ Ġ"$ it ." Ġ} Ġ?: Ġ"") Ġ+ Ġtest Function )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Main Module ) ĠCompilation Mode . JS _ AG A INST _ K LIB Ġelse ĠCompilation Mode . K LIB , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdependencies , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactual OutputFile ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcompilation Cache [ outputFile . name . replace (". js ", Ġ". meta . js ")] Ġ= Ġresult ĊĊĠĠĠĠĠĠĠ Ġval Ġgenerated Code Ġ= Ġresult . generated Code ĊĠĠĠĠĠĠĠ Ġif Ġ( generated Code Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwrapped Code Ġ= Ġwrap With Module Em ulation Markers ( generated Code , Ġmodule Id Ġ= Ġconfig . module Id , Ġmodule Kind Ġ= Ġconfig . module Kind ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputFile . write ( wrapped Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrun GeneratedCode ( ĊĠĠĠĠĠĠĠ Ġjs Files : ĠList < String >, ĊĠĠĠĠĠĠĠ Ġtest ModuleName : ĠString ?, ĊĠĠĠĠĠĠĠ Ġtest Package : ĠString ?, ĊĠĠĠĠĠĠĠ Ġtest Function : ĠString , ĊĠĠĠĠĠĠĠ Ġexpected Result : ĠString , ĊĠĠĠĠĠĠĠ Ġwith Module System : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġruntime : ĠJs Ir Test Runtime ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġshould Ġwe Ġdo Ġanything Ġspecial Ġfor Ġmodule Ġsystems ? ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġreturn Ġlist Ġof Ġjs Ġfrom Ġtranslate Files Ġand Ġprovide Ġthen Ġto Ġthis Ġfunction Ġwith Ġother Ġjs Ġfiles ĊĊĠĠĠĠĠĠĠ ĠV 8 Ir Js Test Checker . check ( js Files , Ġtest ModuleName , Ġnull , Ġtest Function , Ġexpected Result , Ġwith Module System ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ private Ġfun ĠFile . write ( text : ĠString ) Ġ{ ĊĠĠĠ Ġparent File . mkdir s () ĊĠĠĠ Ġwrite Text ( text ) Ċ } Ċ