/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 1 7 ĠJetBrains Ġs . r . o . Ċ Ġ* Ċ Ġ* Ġ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 Ġorg . jetbrains . kotlin . codegen Ċ Ċ import Ġorg . jetbrains . kotlin . cli . Abstract Cli Test Ċ import Ġorg . jetbrains . kotlin . cli . common . ExitCode Ċ import Ġorg . jetbrains . kotlin . cli . jvm . K 2 JVM Compiler Ċ import Ġorg . jetbrains . kotlin . config . ApiVersion Ċ import Ġorg . jetbrains . kotlin . config . Language Version Ċ import Ġorg . jetbrains . kotlin . config . Language Version Settings Impl Ċ import Ġorg . jetbrains . kotlin . load . kotlin . Module Mapping Ċ import Ġorg . jetbrains . kotlin . resolve . Compiler Deserialization Configuration Ċ import Ġorg . jetbrains . kotlin . test . Kotlin TestUtils Ċ import Ġorg . jetbrains . kotlin . test . test Framework . Kt Use ful TestCase Ċ import Ġjava . io . File Ċ Ċ class ĠJ vm Package Table Test Ġ: ĠK t Use ful TestCase () Ġ{ ĊĠĠĠ Ġprivate Ġfun Ġdo Test ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Directory : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompile With : ĠLanguage Version Ġ= ĠLanguage Version . LATE ST _ ST ABLE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload With : ĠLanguage Version Ġ= ĠLanguage Version . LATE ST _ ST ABLE ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= ĠKotlin TestUtils . get TestData Path Base () Ġ+ Ġrelative Directory ĊĠĠĠĠĠĠĠ Ġval Ġtmp dir Ġ= ĠKotlin TestUtils . tmp Dir ( this :: class . simple Name ) ĊĊĠĠĠĠĠĠĠ Ġval ĠmoduleName Ġ= Ġ" main " ĊĠĠĠĠĠĠĠ Ġval Ġ( output , Ġexit Code ) Ġ= ĠAbstract Cli Test . execute Compiler Grab Output ( K 2 JVM Compiler (), ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirectory , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- d ", Ġtmp dir . path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- module - name ", ĠmoduleName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"- language - version ", Ġcompile With . version String ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ ĠSystem . err . println ( output ) Ġ// Ġnormally Ġoutput Ġis Ġempty ĊĠĠĠĠĠĠĠ ĠassertEquals (" Compilation Ġshould Ġcomplete Ġsuccessfully ", ĠExit Code . OK , Ġexit Code ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmapping Ġ= ĠModule Mapping . create ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( tmpdir , Ġ" META - INF /$ moduleName .${ Module Mapping . MAPPING _ FILE _ EXT } "). read Bytes (), Ġ" test ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCompiler Deserialization Configuration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLanguage Version Settings Impl ( load With , ĠApi Version . create By Language Version ( load With )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ(( fq Name , Ġpackage Parts ) Ġin Ġmapping . package Fq Name 2 Parts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln ( fq Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( part Ġin Ġpackage Parts . parts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( part ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfac ade Name Ġ= Ġpackage Parts . get Mult if ile Facade Name ( part ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( facade Name Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ( ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( facade Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" )") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ln () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠKotlin TestUtils . assertEquals ToFile ( File ( directory , Ġ" jvm - package - table . txt "), Ġresult ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Simple () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test ("/ jvm Package Table / simple ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Jvm PackageName () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test ("/ jvm Package Table / jvm PackageName ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompile With Ġ= ĠLanguage Version . K OT LIN _ 1 _ 2 , Ġload With Ġ= ĠLanguage Version . K OT LIN _ 1 _ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Jvm PackageName Many Parts () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test ("/ jvm Package Table / jvm PackageName Many Parts ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompile With Ġ= ĠLanguage Version . K OT LIN _ 1 _ 2 , Ġload With Ġ= ĠLanguage Version . K OT LIN _ 1 _ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġtest Jvm PackageName Language Version 1 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo Test ("/ jvm Package Table / jvm PackageName Language Version 1 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompile With Ġ= ĠLanguage Version . K OT LIN _ 1 _ 2 , Ġload With Ġ= ĠLanguage Version . K OT LIN _ 1 _ 1 ) ĊĠĠĠ Ġ} Ċ } Ċ