package Ġcom . v ann ik tech . code . quality . tools Ċ Ċ import Ġorg . assertj . core . api . Java 6 Assertions . assertThat Ċ import Ġorg . gradle . test kit . runner . Gradle Runner Ċ import Ġorg . gradle . test kit . runner . Task Outcome Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . rules . Temporary Folder Ċ import Ġjava . io . File Ċ Ċ class ĠCode Quality Tools Plugin K tl int Test Ġ{ ĊĠ Ġ@ get : Rule Ġval Ġtest Project Dir Ġ= ĠTemporary Folder () ĊĊĠ Ġ@ Test Ġfun Ġsuccess () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir ) ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" src / main / kotlin / com / v ann ik tech / test / Foo . kt ", Ġ" fun Ġfoo ( param : ĠInt ) Ġ= Ġparam Ġ* Ġparam \ n ") ĊĠĠĠĠĠĠĠ Ġ. suc ceeds () ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġsuccess Version 0 3 2 0 () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir , Ġversion Ġ= Ġ" 0 . 3 2 . 0 ") ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" src / main / kotlin / com / v ann ik tech / test / Foo . kt ", Ġ" fun Ġfoo ( param : ĠInt ) Ġ= Ġparam Ġ* Ġparam \ n ") ĊĠĠĠĠĠĠĠ Ġ. suc ceeds () ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġconfiguration () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir ) ĊĠĠĠĠĠĠĠ Ġ. with Configuration (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|[ *. { kt , k ts }] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| insert _ final _ newline = true ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" src / main / kotlin / com / v ann ik tech / test / Foo . kt ", Ġ" fun Ġfoo ( param : ĠInt ) Ġ= Ġparam Ġ* Ġparam ") ĊĠĠĠĠĠĠĠ Ġ. fails ( contains Message Ġ= Ġ"/ src / main / kotlin / com / v ann ik tech / test / Foo . kt : 1 : 1 : ĠFile Ġmust Ġend Ġwith Ġa Ġnewline Ġ( \\ n )") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġauto Format () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir ) ĊĠĠĠĠĠĠĠ Ġ. with Configuration (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|[ *. { kt , k ts }] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| insert _ final _ newline = true ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" src / main / kotlin / com / v ann ik tech / test / Foo . kt ", Ġ" fun Ġfoo ( param : ĠInt ) Ġ= Ġparam Ġ* Ġparam ") ĊĠĠĠĠĠĠĠ Ġ. suc ceeds ( task To Run Ġ= Ġ" kt lint Format ") ĊĠĠĠĠĠĠĠ Ġ. has Kotlin File (" src / main / kotlin / com / v ann ik tech / test / Foo . kt ", Ġ" fun Ġfoo ( param : ĠInt ) Ġ= Ġparam Ġ* Ġparam \ n ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġauto Format Version 0 3 2 0 () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir , Ġversion Ġ= Ġ" 0 . 3 2 . 0 ") ĊĠĠĠĠĠĠĠ Ġ. with Configuration (""" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|[ *. { kt , k ts }] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ| insert _ final _ newline = true ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Margin ()) ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" src / main / kotlin / com / v ann ik tech / test / Foo . kt ", Ġ" fun Ġfoo ( param : ĠInt ) Ġ= Ġparam Ġ* Ġparam ") ĊĠĠĠĠĠĠĠ Ġ. suc ceeds ( task To Run Ġ= Ġ" kt lint Format ") ĊĠĠĠĠĠĠĠ Ġ. has Kotlin File (" src / main / kotlin / com / v ann ik tech / test / Foo . kt ", Ġ" fun Ġfoo ( param : ĠInt ) Ġ= Ġparam Ġ* Ġparam \ n ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġno Src Folder () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir ) ĊĠĠĠĠĠĠĠ Ġ. suc ceeds () ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġfails () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir ) ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" src / main / kotlin / com / v ann ik tech / test / Foo . kt ", Ġ" fun Ġfoo ( Ġ) Ġ= ĠUnit ") ĊĠĠĠĠĠĠĠ Ġ. fails ( contains Message Ġ= Ġ" src / main / kotlin / com / v ann ik tech / test / Foo . kt : 1 : 9 : ĠUnexpected Ġspacing Ġafter Ġ\" (\" ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġfails Version 0 3 2 0 () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir , Ġversion Ġ= Ġ" 0 . 3 2 . 0 ") ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" src / main / kotlin / com / v ann ik tech / test / Foo . kt ", Ġ" fun Ġfoo ( Ġ) Ġ= ĠUnit ") ĊĠĠĠĠĠĠĠ Ġ. fails ( contains Message Ġ= Ġ" src / main / kotlin / com / v ann ik tech / test / Foo . kt : 1 : 9 : ĠUnexpected Ġspacing Ġafter Ġ\" (\" ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġexperimental () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir , Ġexperimental Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" src / main / kotlin / com / v ann ik tech / test / Foo . kt ", Ġ" fun Ġfoo () Ġ= \ n ĠĠ ĠUnit ") ĊĠĠĠĠĠĠĠ Ġ. fails ( contains Message Ġ= Ġ" src / main / kotlin / com / v ann ik tech / test / Foo . kt : 2 : 1 : ĠUnexpected Ġindentation Ġ( 3 ) Ġ( it Ġshould Ġbe Ġ 4 ) Ġ( cannot Ġbe Ġauto - corrected )") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġignores File In Build Directory () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir ) ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" build / Foo . kt ", Ġ" fun Ġfoo ( Ġ) Ġ= ĠUnit ") ĊĠĠĠĠĠĠĠ Ġ. suc ceeds () ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġfails On Kotlin Script () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir ) ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" build . gradle . k ts ", Ġ" fun Ġfoo ( Ġ) Ġ= ĠUnit ") ĊĠĠĠĠĠĠĠ Ġ. fails ( contains Message Ġ= Ġ" build . gradle . k ts : 1 : 9 : ĠUnexpected Ġspacing Ġafter Ġ\" (\" ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġauto Correct Kotlin Script () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir ) ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" build . gradle . k ts ", Ġ" fun Ġfoo ( Ġ) Ġ= ĠUnit ") ĊĠĠĠĠĠĠĠ Ġ. suc ceeds ( task To Run Ġ= Ġ" kt lint Format ") ĊĠĠĠĠĠĠĠ Ġ. has Kotlin File (" build . gradle . k ts ", Ġ" fun Ġfoo () Ġ= ĠUnit ") ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġdisabled () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir , Ġenabled Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" src / main / kotlin / com / v ann ik tech / test / Foo . kt ", Ġ" fun Ġfoo ( Ġ) Ġ= ĠUnit ") ĊĠĠĠĠĠĠĠ Ġ. does Nothing () ĊĠ Ġ} ĊĊĠ Ġ@ Test Ġfun Ġcheck Task Runs K tl int () Ġ{ ĊĠĠĠ ĠRobot er ( test Project Dir ) ĊĠĠĠĠĠĠĠ Ġ. with Kotlin File (" src / main / kotlin / com / v ann ik tech / test / Foo . kt ", Ġ" fun Ġfoo ( Ġ) Ġ= ĠUnit ") ĊĠĠĠĠĠĠĠ Ġ. fails ( task To Run Ġ= Ġ" check ", Ġtask ToCheck Ġ= Ġ" kt lint ", Ġcontains Message Ġ= Ġ" src / main / kotlin / com / v ann ik tech / test / Foo . kt : 1 : 9 : ĠUnexpected Ġspacing Ġafter Ġ\" (\" ") ĊĠ Ġ} ĊĊĠ Ġclass ĠRobot er ( ĊĠĠĠ Ġprivate Ġval Ġdirectory : ĠTemporary Folder , ĊĠĠĠ Ġenabled : ĠBoolean Ġ= Ġtrue , ĊĠĠĠ Ġversion : ĠString Ġ= Ġ" 0 . 3 1 . 0 ", ĊĠĠĠ Ġexperimental : ĠBoolean Ġ= Ġfalse ĊĠ Ġ) Ġ{ ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠ Ġdirectory . new File (" build . gradle "). write Text (""" ĊĠĠĠĠĠĠĠĠĠ Ġ| plugins Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġid Ġ" kotlin " ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġid Ġ" com . v ann ik tech . code . quality . tools " ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| code Quality Tools Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġk tl int Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġenabled Ġ= Ġ$ enabled ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġtool Version Ġ= Ġ"$ version " ĊĠĠĠĠĠĠĠĠĠ Ġ| ĠĠĠ Ġexperimental Ġ= Ġ$ experimental ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġde te kt . enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġcheck style . enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġp md . enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġc pd . enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġerror Pr one . enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| repositories Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġmaven Central () ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| ĊĠĠĠĠĠĠĠĠĠ Ġ| dependencies Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġ| Ġ Ġimplementation Ġ' org . jetbrains . kotlin : kotlin - stdlib : 1 . 3 . 4 1 ' ĊĠĠĠĠĠĠĠĠĠ Ġ| } ĊĠĠĠĠĠĠĠĠĠ Ġ| """. trim Margin ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwith Configuration ( configuration : ĠString ) Ġ= Ġwrite (". editor config ", Ġconfiguration ) ĊĊĠĠĠ Ġfun Ġwith Kotlin File ( path : ĠString , Ġcontent : ĠString ) Ġ= Ġwrite ( path , Ġcontent ) ĊĊĠĠĠ Ġfun Ġhas Kotlin File ( path : ĠString , Ġcontent : ĠString ) Ġ{ ĊĠĠĠĠĠ ĠassertThat ( File ( directory . root , Ġpath )). has Content ( content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġwrite ( path : ĠString , Ġcontent : ĠString ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġval Ġpaths Ġ= Ġpath . split ("/ "). drop Last ( 1 ). to Typed Array () ĊĠĠĠĠĠ Ġif Ġ( paths . isNotEmpty ()) Ġdirectory . new Folder (* paths ) ĊĠĠĠĠĠ Ġdirectory . new File ( path ). write Text ( content ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsucceeds ( task To Run : ĠString Ġ= Ġ" kt lint ") Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ ĠassertThat ( run ( task To Run ). build (). task (" :$ task To Run ") ?. outcome ). isEqualTo ( Task Outcome . SUCCESS ) ĊĠĠĠĠĠ Ġassert Reports Exist () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfails ( task To Run : ĠString Ġ= Ġ" kt lint ", Ġtask ToCheck : ĠString Ġ= Ġtask To Run , Ġcontains Message : ĠString ) Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ Ġval Ġbuild Result Ġ= Ġrun ( task To Run ). build And Fail () ĊĠĠĠĠĠ ĠassertThat ( build Result . task (" :$ task ToCheck ") ?. outcome ). isEqualTo ( Task Outcome . FAILED ) ĊĠĠĠĠĠ ĠassertThat ( build Result . output ). contains ( contains Message ) ĊĠĠĠĠĠ Ġassert Reports Exist () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġassert Reports Exist () Ġ{ ĊĠĠĠĠĠ ĠassertThat ( File ( directory . root , Ġ" build / reports / kt lint / kt lint - check style - report . xml ")). exists () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdoes Nothing ( task To Run : ĠString Ġ= Ġ" kt lint ") Ġ= Ġapply Ġ{ ĊĠĠĠĠĠ ĠassertThat ( run ( task To Run ). build And Fail (). task (" :$ task To Run ")). isNull () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun ( task To Run : ĠString ) Ġ= ĠGradle Runner . create (). with Plugin Classpath (). with Project Dir ( directory . root ). with Arguments ( task To Run ) ĊĠ Ġ} Ċ } Ċ