package Ġio . github . ch ao 2 zhang Ċ Ċ import Ġcom . tsch uch ort . compile testing . Kotlin Compilation Ċ import Ġcom . tsch uch ort . compile testing . SourceFile Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . Test Ċ Ċ class ĠR na Gradle Plugin Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfail To Compile () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmain Ġ= ĠSource File . kotlin (" main . kt ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġio . github . ch ao 2 zhang . Require Named Argument ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Require Named Argument ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġadd ( a : ĠInt , Ġb : ĠInt ): ĠInt Ġ= Ġa Ġ+ Ġb ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcall Add () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( 2 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile ( listOf ( REQUIRE _ NAMED _ ARGUMENT , Ġmain )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Kotlin Compilation . ExitCode . COMPI L ATION _ ERROR , Ġresult . exit Code ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . messages . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Argument Ġ' 2 ' Ġshould Ġhave Ġname Ġ' a ' Ġbecause Ġthe Ġtarget Ġfunction Ġis Ġ@ Require Named Argument ." ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ ĠassertTrue ( result . messages . contains ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Argument Ġ' 3 ' Ġshould Ġhave Ġname Ġ' b ' Ġbecause Ġthe Ġtarget Ġfunction Ġis Ġ@ Require Named Argument ." ĊĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġsucceed To Compile () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmain Ġ= ĠSource File . kotlin (" main . kt ", Ġ""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimport Ġio . github . ch ao 2 zhang . Require Named Argument ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Require Named Argument ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġadd ( a : ĠInt , Ġb : ĠInt ): ĠInt Ġ= Ġa Ġ+ Ġb ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcall Add () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( a Ġ= Ġ 2 , Ġb Ġ= Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent ()) ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġcompile ( listOf ( REQUIRE _ NAMED _ ARGUMENT , Ġmain )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Kotlin Compilation . ExitCode . OK , Ġresult . exit Code ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġcompile ( ĊĠĠĠ Ġsource Files : ĠList < SourceFile >, Ċ ): ĠKotlin Compilation . Result Ġ{ ĊĠĠĠ Ġval Ġplugins Ġ= ĠlistOf ( R na Component Registrar ()) ĊĠĠĠ Ġval Ġcompilation Ġ= ĠKotlin Compilation (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġsources Ġ= Ġsource Files ĊĠĠĠĠĠĠĠ Ġcompiler Plugins Ġ= Ġplugins ĊĠĠĠĠĠĠĠ Ġinherit Class Path Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġcompilation . compile () Ċ } Ċ Ċ private Ġval ĠREQUIRE _ NAMED _ ARGUMENT Ġ= ĠSource File . kotlin (" Require Named Argument . kt ", Ġ""" ĊĠĠĠĠĠĠĠ Ġpackage Ġio . github . ch ao 2 zhang ĊĊĠĠĠĠĠĠĠ Ġ@ Retention ( Annotation Retention . BINARY ) ĊĠĠĠĠĠĠĠ Ġ@ Target ( Annotation Target . FUNCTION , ĠAnnotation Target . CON STRUCTOR ) ĊĠĠĠĠĠĠĠ Ġannotation Ġclass ĠRequire Named Argument ĊĠĠĠ Ġ""" . trim Indent () Ċ ) Ċ