/* Ċ Ġ* ĠCopyright Ġ 2 0 1 0 - 2 0 2 1 Ġ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 . Ċ Ġ*/ Ċ Ċ /* ĠAssoci ate Ġcompil ations Ġare Ġnot Ġyet Ġsupported Ġby Ġthe ĠIDE . ĠK T - 3 4 1 0 2 Ġ*/ Ċ @ file : Suppress (" invisible _ reference ", Ġ" invisible _ member ", Ġ" FunctionName ", Ġ" D uplicated Code ") Ċ Ċ package Ġorg . jetbrains . kotlin . gradle Ċ Ċ import Ġcom . android . build . gradle . Base Extension Ċ import Ġorg . gradle . api . Java Version Ċ import Ġorg . gradle . api . internal . project . Project Internal Ċ import Ġorg . gradle . api . plugins . Extra Properties Extension Ċ import Ġorg . gradle . test fixtures . Project Builder Ċ import Ġorg . jetbrains . kotlin . compiler Runner . kon an Version Ċ import Ġorg . jetbrains . kotlin . gradle . dsl . Kotlin Js Project Extension Ċ import Ġorg . jetbrains . kotlin . gradle . dsl . Kotlin Multi platform Extension Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . Kotlin Compilation Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . Kotlin Multi platform Plugin Wrapper Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . Kotlin Platform Type Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . Kotlin Platform Type .* Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . get Kotlin Plugin Version Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . Kotlin Android Target Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . Kotlin Metadata Target Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . Kotlin Native Target Ċ import Ġorg . jetbrains . kotlin . gradle . plugin . mpp . Kotlin Native Target With Host Tests Ċ import Ġorg . jetbrains . kotlin . gradle . targets . js . Kotlin Js Target Ċ import Ġorg . jetbrains . kotlin . gradle . targets . jvm . Kotlin Jvm Target Ċ import Ġorg . jetbrains . kotlin . gradle . tool ing . Build Kotlin Tool ing Metadata Task Ċ import Ġorg . jetbrains . kotlin . gradle . tool ing . build Kotlin Tool ing Metadata Task Ċ import Ġorg . jetbrains . kotlin . kon an . target . Kon an Target Ċ import Ġorg . jetbrains . kotlin . library . Kotlin Ab i Version Ċ import Ġorg . jetbrains . kotlin . tool ing . Kotlin Tool ing Metadata Ċ import Ġorg . jetbrains . kotlin . tool ing . toJson String Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertFalse Ċ import Ġkotlin . test . assertTrue Ċ Ċ class ĠBuild Kotlin Tool ing Metadata Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġproject Ġ= ĠProject Builder . builder (). build (). also { Ġadd Build Events Listener Registry Mock ( it ) Ġ} Ġas ĠProject Internal ĊĠĠĠ Ġprivate Ġval Ġmulti platform Extension Ġget () Ġ= Ġproject . extensions . getBy Type ( Kotlin Multi platform Extension :: class . java ) ĊĠĠĠ Ġprivate Ġval Ġjs Extension Ġget () Ġ= Ġproject . extensions . getBy Type ( Kotlin Js Project Extension :: class . java ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . extensions . getBy Type ( Extra Properties Extension :: class . java ). set (" kotlin . mpp . enable Kotlin Tool ing Metadata Artifact ", Ġ" true ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` multi platform Ġempty Ġsetup `() Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . plugins . apply (" kotlin - multi platform ") ĊĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġget Kotlin Tool ing Metadata () ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" Gradle ", Ġmetadata . build System ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( project . gradle . gradle Version , Ġmetadata . build System Version ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Kotlin Multi platform Plugin Wrapper :: class . java . canonical Name , Ġmetadata . build Plugin ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( project . get Kotlin Plugin Version (), Ġmetadata . build Plugin Version ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmetadata . project Targets . size , Ġ" Expected Ġone Ġtarget Ġ( metadata )") ĊĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKotlin Metadata Target :: class . java . isAssignableFrom ( Class . forName ( metadata . project Targets . single (). target )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expect Ġtarget Ġto Ġbe Ġimplement Ġ${ Kotlin Metadata Target :: class . simple Name }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( common . name , Ġmetadata . project Targets . single (). platform Type ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( metadata . toJson String (). isNotBlank (), Ġ" Expected Ġnon Ġblank Ġjson Ġrepresentation ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` multi platform ĠJS ĠJVM ĠAndroid Ġlinux X 6 4 Ġsetup `() Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . plugins . apply (" com . android . application ") ĊĠĠĠĠĠĠĠ Ġproject . plugins . apply (" kotlin - multi platform ") ĊĊĠĠĠĠĠĠĠ Ġval Ġandroid Ġ= Ġproject . extensions . getBy Type ( Base Extension :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Ġ= Ġmulti platform Extension ĊĊĠĠĠĠĠĠĠ Ġandroid . compile Sdk Version ( 2 8 ) ĊĠĠĠĠĠĠĠ Ġkotlin . android () ĊĠĠĠĠĠĠĠ Ġkotlin . jvm () ĊĠĠĠĠĠĠĠ Ġkotlin . js Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnodejs () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbrowser () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġkotlin . linux X 6 4 () ĊĊĠĠĠĠĠĠĠ Ġproject . evaluate () ĊĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġget Kotlin Tool ing Metadata () ĊĠĠĠĠĠĠĠ ĠassertEquals ( Kotlin Multi platform Plugin Wrapper :: class . java . canonical Name , Ġmetadata . build Plugin ) ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Targets Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommon Ġto ĠKotlin Metadata Target :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid Jvm Ġto ĠKotlin Android Target :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġj vm Ġto ĠKotlin Jvm Target :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs Ġto ĠKotlin Js Target :: class , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnative Ġto ĠKotlin Native Target With Host Tests :: class ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpected Targets . keys . map Ġ{ Ġit . name Ġ}. sorted (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata . project Targets . map Ġ{ Ġit . platform Type Ġ}. sorted () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġexpected Targets . forEach Ġ{ Ġ( platform Type , Ġtarget Class ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Class . java . canonical Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmetadata . project Targets . single Ġ{ Ġit . platform Type Ġ== Ġplatform Type . name Ġ}. target , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Platform Ġ'$ platform Type ' Ġhas Ġdifferent Ġtarget Ġclass " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertFalse ( metadata . project Settings . is K PM Enabled , Ġ" project Settings . is K PM Enabled Ġmust Ġnot Ġbe Ġset ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` multi platform ĠAndroid Ġtarget Ġwith Ġdifferent Ġsource Ġand Ġtarget Ġcompatibility `() Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . plugins . apply (" kotlin - multi platform ") ĊĠĠĠĠĠĠĠ Ġproject . plugins . apply (" com . android . application ") ĊĠĠĠĠĠĠĠ Ġval Ġandroid Ġ= Ġproject . extensions . getBy Type ( Base Extension :: class . java ) ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Ġ= Ġmulti platform Extension ĊĠĠĠĠĠĠĠ Ġandroid . compile Sdk Version ( 2 8 ) ĊĠĠĠĠĠĠĠ Ġkotlin . android () ĊĠĠĠĠĠĠĠ Ġandroid . compile Options . set Source Compatibility ( Java Version . VERSION _ 1 _ 6 ) ĊĠĠĠĠĠĠĠ Ġandroid . compile Options . setTarget Compatibility ( Java Version . VERSION _ 1 _ 8 ) ĊĠĠĠĠĠĠĠ Ġproject . evaluate () ĊĊĠĠĠĠĠĠĠ Ġval Ġandroid Target Metadata Ġ= Ġget Kotlin Tool ing Metadata () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. project Targets . single Ġ{ Ġit . platform Type Ġ== Ġandroid Jvm . name Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 . 6 ", Ġandroid Target Metadata . extras . android ?. source Compatibility ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" 1 . 8 ", Ġandroid Target Metadata . extras . android ?. target Compatibility ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` multi platform ĠJVM Ġwith Ġdifferent Ġtargets `() Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . plugins . apply (" kotlin - multi platform ") ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Ġ= Ġmulti platform Extension ĊĠĠĠĠĠĠĠ Ġval Ġj vm Ġ= Ġkotlin . jvm () ĊĠĠĠĠĠĠĠ Ġj vm . comp il ations . get ByName ( Kotlin Compilation . MAIN _ COMPI L ATION _ NAME ). kotlin Options . jvm Target Ġ= Ġ" 1 2 " ĊĠĠĠĠĠĠĠ Ġj vm . comp il ations . get ByName ( Kotlin Compilation . TEST _ COMPI L ATION _ NAME ). kotlin Options . jvm Target Ġ= Ġ" 1 0 " ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 2 ", Ġget Kotlin Tool ing Metadata (). project Targets ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. single Ġ{ Ġit . platform Type Ġ== ĠKotlin Platform Type . jvm . name Ġ}. extras . jvm ?. jvm Target , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Expected Ġj vm Target Ġof Ġmain Ġcompilation " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` multi platform Ġwith Ġnative Ġtarget `() Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . plugins . apply (" kotlin - multi platform ") ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Ġ= Ġmulti platform Extension ĊĠĠĠĠĠĠĠ Ġkotlin . linux X 6 4 () ĊĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġget Kotlin Tool ing Metadata () ĊĠĠĠĠĠĠĠ Ġval Ġlinux Target Ġ= Ġmetadata . project Targets . single Ġ{ Ġit . platform Type Ġ== Ġnative . name Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( Kon an Target . LINUX _ X 6 4 . name , Ġlinux Target . extras . native ?. kon an Target ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( project . kon an Version . toString (), Ġlinux Target . extras . native ?. kon an Version ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Kotlin Ab i Version . CURRENT . toString (), Ġlinux Target . extras . native ?. kon an Ab i Version ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġjs () Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . plugins . apply (" org . jetbrains . kotlin . js ") ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Ġ= Ġjs Extension ĊĠĠĠĠĠĠĠ Ġkotlin . js Ġ{ Ġnodejs () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġget Kotlin Tool ing Metadata () ĊĠĠĠĠĠĠĠ ĠassertEquals ( org . jetbrains . kotlin . gradle . plugin . Kotlin Js Plugin Wrapper :: class . java . canonical Name , Ġmetadata . build Plugin ) ĊĊĠĠĠĠĠĠĠ Ġval Ġjs Target Ġ= Ġmetadata . project Targets . single Ġ{ Ġit . platform Type Ġ== Ġjs . name Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġjs Target . extras . js ?. is Node js Configured ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġjs Target . extras . js ?. is Browser Configured ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġj vm () Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . plugins . apply (" org . jetbrains . kotlin . jvm ") ĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġget Kotlin Tool ing Metadata () ĊĠĠĠĠĠĠĠ ĠassertEquals ( org . jetbrains . kotlin . gradle . plugin . Kotlin Plugin Wrapper :: class . java . canonical Name , Ġmetadata . build Plugin ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` multiple Ġnative Ġtargets `() Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . plugins . apply (" kotlin - multi platform ") ĊĠĠĠĠĠĠĠ Ġval Ġkotlin Ġ= Ġmulti platform Extension ĊĠĠĠĠĠĠĠ Ġkotlin . linux X 6 4 () ĊĠĠĠĠĠĠĠ Ġkotlin . linux Arm 6 4 () ĊĊĠĠĠĠĠĠĠ Ġval Ġmetadata Ġ= Ġget Kotlin Tool ing Metadata () ĊĠĠĠĠĠĠĠ Ġval Ġnative Targets Ġ= Ġmetadata . project Targets . filter Ġ{ Ġit . platform Type Ġ== Ġnative . name Ġ}. sorted By Ġ{ Ġit . extras . native ?. kon an Target Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġnative Targets . size , Ġ" Expected Ġonly Ġtwo Ġnative Ġtargets ") ĊĠĠĠĠĠĠĠ Ġval Ġ( linux Arm 6 4 , Ġlinux X 6 4 ) Ġ= Ġnative Targets ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" linux _ arm 6 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinux Arm 6 4 . extras . native ?. kon an Target ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" linux _ x 6 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinux X 6 4 . extras . native ?. kon an Target ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Kotlin Native Target :: class . java . canonical Name , Ġlinux Arm 6 4 . target ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Kotlin Native Target With Host Tests :: class . java . canonical Name , Ġlinux X 6 4 . target ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Kotlin Tool ing Metadata (): ĠKotlin Tool ing Metadata Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġproject . build Kotlin Tool ing Metadata Task ?. get () Ġ?: Ġerror (" No Ġ${ Build Kotlin Tool ing Metadata Task . default Task Name } Ġtask ") ĊĠĠĠĠĠĠĠ Ġreturn Ġtask . kotlin Tool ing Metadata ĊĠĠĠ Ġ} Ċ } Ċ