package Ġcom . av ito . ci Ċ Ċ import Ġcom . av ito . test . gradle . TestResult Ċ import Ġcom . av ito . test . gradle . gradle w Ċ import Ġcom . google . common . truth . Truth Ċ import Ġokhttp 3 . mock webserver . Re corded Request Ċ import Ġjava . io . File Ċ Ċ fun ĠTest Result . assert Affected Modules ( task Name : ĠString , Ġexpected Modules : ĠSet < String >) Ġ{ ĊĠĠĠ ĠassertThat (). build Successful () ĊĊĠĠĠ Ġ@ Suppress (" NAME _ SH ADO WING ") ĊĠĠĠ Ġval Ġexpected Modules Ġ= Ġexpected Modules ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . normalize ModuleName () Ġ} ĊĠĠĠĠĠĠĠ Ġ. toSet () ĊĊĠĠĠ Ġval Ġactual Modules Ġ= Ġoutput ĊĠĠĠĠĠĠĠ Ġ. split ("\ n ") ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . contains (" :$ task Name Ġ") Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . substring Before (" :$ task Name Ġ") Ġ} ĊĠĠĠĠĠĠĠ Ġ. toSet () ĊĊĊĠĠĠ ĠTr uth . assert With Message (" Task Ġ$ task Name Ġhas Ġexecuted Ġfor Ġmodules : Ġ$ expected Modules ") ĊĠĠĠĠĠĠĠ Ġ. that ( actual Modules ) ĊĠĠĠĠĠĠĠ Ġ. contains Exactly Elements In ( expected Modules ) Ċ } Ċ Ċ fun Ġdetect Changed Modules ( ĊĠĠĠ Ġproject Dir : ĠFile , ĊĠĠĠ Ġvar arg Ġargs : ĠString Ċ ): ĠTest Result Ġ{ ĊĠĠĠ Ġreturn Ġgradle w ( project Dir , Ġ" generate Modules Report ", Ġ* args ) Ċ } Ċ Ċ fun ĠTest Result . assert Marked Modules ( ĊĠĠĠ Ġproject Dir : ĠFile , ĊĠĠĠ Ġimplementation : ĠSet < String >, ĊĠĠĠ Ġunit Tests : ĠSet < String >, ĊĠĠĠ Ġandroid Tests : ĠSet < String > Ċ ) Ġ{ ĊĠĠĠ Ġassert Modules In Report ( File ( project Dir , ĠIMP LEMENT ATION _ MODULES _ REPORT _ PATH ), Ġimplementation ) ĊĠĠĠ Ġassert Modules In Report ( File ( project Dir , ĠUNIT _ TEST _ MODULES _ REPORT _ PATH ), Ġunit Tests ) ĊĠĠĠ Ġassert Modules In Report ( File ( project Dir , ĠAND ROID _ TEST _ MODULES _ REPORT _ PATH ), Ġandroid Tests ) Ċ } Ċ Ċ fun ĠRe corded Request . body Contains ( body : ĠCharSequence ): ĠBoolean Ġ{ ĊĠĠĠ Ġreturn Ġthis . body . toString (). contains ( body ) Ċ } Ċ Ċ @ Suppress (" NAME _ SH ADO WING ") Ċ private Ġfun ĠTest Result . assert Modules In Report ( ĊĠĠĠ Ġreport : ĠFile , ĊĠĠĠ Ġexpected Modules : ĠSet < String > Ċ ) Ġ{ ĊĠĠĠ ĠassertThat (). build Successful () ĊĊĠĠĠ Ġval Ġexpected Modules Ġ= Ġexpected Modules ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . normalize ModuleName () Ġ} ĊĠĠĠĠĠĠĠ Ġ. toSet () ĊĊĠĠĠ Ġval Ġactual Modules : ĠSet < String > Ġ= Ġreport . read Report (). toSet () ĊĊĠĠĠ ĠTr uth . assert With Message (" Changed Ġmodules Ġin Ġ${ report . name }") ĊĠĠĠĠĠĠĠ Ġ. that ( actual Modules ) ĊĠĠĠĠĠĠĠ Ġ. contains Exactly Elements In ( expected Modules ) Ċ } Ċ Ċ private Ġfun ĠString . normalize ModuleName () Ġ= Ġif Ġ( this . startsWith (': ')) Ġthis Ġelse Ġ": $ this " Ċ Ċ private Ġfun ĠFile . read Report (): ĠList < String > Ġ= Ġread Lines () ĊĠĠĠ Ġ. filter Not Ġ{ Ġit . isBlank () Ġ} ĊĠĠĠ Ġ. map Ġ{ Ġit . trim () Ġ} Ċ Ċ const Ġval ĠK OT LIN _ SOURCE _ SET Ġ= Ġ" src / main / kotlin " Ċ const Ġval ĠIMP LEMENT ATION _ MODULES _ REPORT _ PATH Ġ= Ġ" build / reports / modules / implementation - modules . txt " Ċ const Ġval ĠUNIT _ TEST _ MODULES _ REPORT _ PATH Ġ= Ġ" build / reports / modules / unit - tests - modules . txt " Ċ const Ġval ĠAND ROID _ TEST _ MODULES _ REPORT _ PATH Ġ= Ġ" build / reports / modules / android - tests - modules . txt " Ċ