package Ġorg . un bro k end ome . gradle . plugins . helm . spe k Ċ Ċ import Ġorg . gradle . api . Action Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . Task Ċ import Ġorg . gradle . test fixtures . Project Builder Ċ import Ġorg . spe k framework . spe k 2 . dsl . Lifecycle Aware Ċ import Ġorg . spe k framework . spe k 2 . lifecycle . Caching Mode Ċ import Ġorg . spe k framework . spe k 2 . lifecycle . Memo ized Value Ċ import Ġorg . un bro k end ome . gradle . plugins . helm . command . Helm Commands Plugin Ċ import Ġorg . un bro k end ome . gradle . plugins . helm . dsl . helm Ċ import Ġorg . un bro k end ome . gradle . plugins . helm . testutil . exec . Default Executable Gradle Exec Mock Ċ import Ġorg . un bro k end ome . gradle . plugins . helm . testutil . exec . Executable Gradle Exec Mock Ċ import Ġorg . un bro k end ome . gradle . plugins . helm . testutil . exec . Gradle Exec Mock Ċ import Ġorg . un bro k end ome . gradle . plugins . helm . testutil . exec . with State ful Verification Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Property ĊĊ Ċ interface ĠM emo ized Gradle Project Ġ: ĠM emo ized Value < Project > Ġ{ ĊĊĠĠĠ Ġvar ĠprojectName : ĠString ĊĊĠĠĠ Ġfun Ġinitializer ( initializer : ĠProject . () Ġ-> ĠUnit ) ĊĊĠĠĠ Ġfun Ġapply Plugin ( plugin Type : ĠK Class < out ĠPlugin < Project >>) Ġ= ĊĠĠĠĠĠĠĠ Ġinitializer Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplugins . apply ( plugin Type . java ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } ĊĊ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠPlugin < Project >> ĠM emo ized Gradle Project . apply Plugin () Ġ= ĊĠĠĠ Ġapply Plugin ( T :: class ) ĊĊ Ċ private Ġdata Ġclass ĠDefault Memo ized Gradle Project ( ĊĠĠĠ Ġprivate Ġval Ġlifecycle Aware : ĠLifecycle Aware Ċ ) Ġ: ĠM emo ized Gradle Project Ġ{ ĊĊĠĠĠ Ġoverride Ġvar ĠprojectName : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġprivate Ġval Ġinitial izers Ġ= Ġmutable ListOf < Project . () Ġ-> ĠUnit >() ĊĊĊĠĠĠ Ġoverride Ġfun Ġinitializer ( initializer : ĠProject . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinitial izers . add ( initializer ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġprovide Delegate ( this Ref : ĠAny ?, Ġproperty : ĠK Property < *> ): ĠReadOnly Property < Any ?, ĠProject > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmemoized Ġ= Ġlifecycle Aware . memo ized ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfactory Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProject Builder . builder (). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠprojectName . take Unless Ġ{ Ġit . isEmpty () Ġ} ?. let Ġ{ Ġwith Name ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial izers . forEach Ġ{ Ġinitializer Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitializer ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdestructor Ġ= Ġ{ Ġproject Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . project Dir . delete Re cursively () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmemoized . provide Delegate ( this Ref , Ġproperty ) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ fun ĠLifecycle Aware . gradle Project (): ĠM emo ized Gradle Project Ġ= ĊĠĠĠ ĠDefault Memo ized Gradle Project ( this ) ĊĊ Ċ fun ĠLifecycle Aware . setup Gradle Project ( block : ĠM emo ized Gradle Project . () Ġ-> ĠUnit ): ĠM emo ized Value < Project > Ġ{ ĊĠĠĠ Ġ@ Suppress (" UNUSED _ VARIABLE ") ĊĠĠĠ Ġval Ġproject : ĠProject Ġby Ġgradle Project (). also ( block ) ĊĊĠĠĠ Ġreturn Ġmemoized () Ċ } ĊĊ Ċ fun Ġ< T Ġ: ĠTask > ĠLifecycle Aware . gradle Task ( ĊĠĠĠ Ġtask Type : ĠK Class < T >, ĊĠĠĠ Ġname : ĠString ? Ġ= Ġnull , ĊĠĠĠ Ġconfig : ĠT . () Ġ-> ĠUnit Ġ= Ġ{} Ċ ): ĠM emo ized Value < T > Ġ{ ĊĠĠĠ Ġval Ġproject : ĠProject Ġby Ġmemoized () ĊĠĠĠ Ġval Ġactual Name Ġ= Ġname Ġ?: Ġtask Type . simple Name ?. de capitalize () Ġ?: Ġ" task " ĊĠĠĠ Ġreturn Ġmemoized < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . tasks . create ( actual Name , Ġtask Type . java , ĠAction ( config )) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ inline Ġfun Ġ< re ified ĠT Ġ: ĠTask > ĠLifecycle Aware . gradle Task ( name : ĠString ? Ġ= Ġnull , Ġno inline Ġconfig : ĠT . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ= ĊĠĠĠ Ġgradle Task ( T :: class , Ġname , Ġconfig ) ĊĊ Ċ /** Ċ Ġ* ĠUses Ġa Ġ[ Gradle Exec Mock ] Ġfor Ġtests Ġthat Ġinvoke Ġexternal Ġprocesses . Ċ Ġ* Ċ Ġ* Ġ@ param Ġexecutable FileName Ġthe Ġname Ġof Ġthe Ġfake Ġexecutable Ġfile . ĠThis Ġwill Ġbe Ġcreated Ġas Ġan Ġexecutable Ġshell Ġscript Ċ Ġ* ĠĠĠĠĠĠĠ Ġinside Ġthe Ġproject Ġdirectory . ĠExec Ġactions Ġmust Ġset Ġtheir Ġ` executable ` Ġproperty Ġto Ġthis Ġpath . Ċ Ġ* Ġ@ return Ġa Ġ[ Gradle Exec Mock ] Ġas Ġa ĠSpe k Ġ[ Memo ized Value ] Ċ Ġ*/ Ċ fun ĠLifecycle Aware . gradle Exec Mock ( executable FileName : ĠString Ġ= Ġ" helm "): ĠM emo ized Value < Gradle Exec Mock > Ġ{ ĊĊĠĠĠ Ġval Ġexecutable Exec Mock : ĠExec utable Gradle Exec Mock Ġby Ġmemoized ( ĊĠĠĠĠĠĠĠ Ġmode Ġ= ĠC aching Mode . SCOPE , ĊĠĠĠĠĠĠĠ Ġfactory Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexec Mock : ĠExec utable Gradle Exec Mock Ġ= ĠDefault Executable Gradle Exec Mock () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec Mock . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexec Mock ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġdestructor Ġ= Ġ{ Ġit . close () Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ ĠbeforeEach Test Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject : ĠProject Ġby Ġmemoized () ĊĠĠĠĠĠĠĠ Ġval Ġscript FilePath Ġ= Ġproject . project Dir . resolve ( executable FileName ) ĊĊĠĠĠĠĠĠĠ Ġexecutable Exec Mock . create Script File ( script FilePath ) ĊĊĠĠĠĠĠĠĠ Ġproject . plugins . with Type ( Helm Commands Plugin :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . helm . executable . set ( script FilePath . absolute Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ ĠafterEach Test Ġ{ ĊĠĠĠĠĠĠĠ Ġexecutable Exec Mock . reset () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġmemoized ( mode Ġ= ĠC aching Mode . TEST ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexecutable Exec Mock . with State ful Verification () ĊĠĠĠ Ġ} Ċ } Ċ