/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . android . build . gradle . internal . manifest Ċ Ċ import Ġcom . android . build . gradle . internal . services . create Project Services Ċ import Ġcom . android . builder . model . Sync Issue Ċ import Ġcom . android . test utils . Abstract Build Given Build Expect Test Ċ import Ġcom . google . common . truth . Truth Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . rules . Temporary Folder Ċ import Ġjava . io . File Ċ import Ġjava . util . function . Boolean Supplier Ċ Ċ /** Ċ Ġ* ĠBasic Ġtests Ġfor Ġ[ Lazy Manifest Parser ] Ċ Ġ*/ Ċ internal Ġabstract Ġclass ĠLazy Manifest Parser Base Test Ġ: ĊĠĠĠ ĠAbstract Build Given Build Expect Test < ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Manifest Parser Base Test . Given Builder , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Manifest Parser Base Test . Result >() Ġ{ ĊĊĠĠĠ Ġ// Ġno Ġtests Ġhere ĊĊĠĠĠ Ġ// Ġ-------------------------------------------------------------------------------- ------------- ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġtemporary Folder Ġ= ĠTemporary Folder () ĊĊĠĠĠ Ġprivate Ġval Ġproject Services Ġ= Ġcreate Project Services () ĊĠĠĠ Ġprivate Ġvar Ġissue Checker : Ġ(( List < Sync Issue >) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠĠĠ Ġfun Ġwith Issue Checker ( action : Ġ( List < Sync Issue >) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcheck State ( Test State . G IV EN ) ĊĠĠĠĠĠĠĠ Ġissue Checker Ġ= Ġaction ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinstantiate Given () Ġ= ĠGiven Builder () ĊĠĠĠ Ġoverride Ġfun Ġinstantiate Result () Ġ= ĠResult () ĊĊĠĠĠ Ġoverride Ġfun Ġdefault When ( given : ĠGiven Builder ): ĠResult ? Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġmanifest Value Ġ= Ġgiven . manifest ĊĊĠĠĠĠĠĠĠ Ġval Ġmanifest File Ġ= Ġgiven . manifest File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġif Ġ( manifest Value Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtemporary Folder . new File (" Android Manifest . xml "). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . write Text ( manifest Value ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ("/ path / to / no / manifest ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġmanifest File Property Ġ= Ġproject Services . object Factory . file Property (). file Value ( manifest File ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmanifest Parser Ġ= ĠLazy Manifest Parser ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest File Ġ= Ġmanifest File Property , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest File Required Ġ= Ġgiven . manifest File IsRequired , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Services Ġ= Ġproject Services , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest Parsing Allowed Ġ= ĠBoolean Supplier { Ġ! given . early Manifest Parsing Check Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResult ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanifest Parser . manifest Data . get (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject Services . issue Reporter . sync Issues ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcompare Result ( ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" PARAMETER _ NAME _ CHANGED _ ON _ OVERRIDE ") Ġexpected Maybe : ĠResult ?, ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" PARAMETER _ NAME _ CHANGED _ ON _ OVERRIDE ") Ġactual Maybe : ĠResult ?, ĊĠĠĠĠĠĠĠ Ġgiven : ĠGiven Builder ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġexpected Maybe ?. data Ġ?: Ġthrow ĠRuntimeException (" expected Ġis Ġnull ") ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġactual Maybe ?. data Ġ?: Ġthrow ĠRuntimeException (" actual Ġis Ġnull ") ĊĊĠĠĠĠĠĠĠ Ġ// Ġonly Ġcheck Ġthe Ġcases Ġwhere Ġexpected Ġvalue Ġis Ġnot Ġnull ĊĊĠĠĠĠĠĠĠ Ġexpected . packageName ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( actual . packageName ). named (" packageName "). isEqualTo ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpected . split ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( actual . split ). named (" split "). isEqualTo ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpected . min Sdk Version ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( actual . min Sdk Version ). named (" min Sdk Version "). isEqualTo ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpected . target Sdk Version ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( actual . target Sdk Version ). named (" target Sdk Version "). isEqualTo ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpected . instrumentation Runner ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( actual . instrumentation Runner ). named (" instrumentation Runner "). isEqualTo ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpected . test Label ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( actual . test Label ). named (" test Label "). isEqualTo ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpected . functional Test ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( actual . functional Test ). named (" functional Test "). isEqualTo ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpected . handle Profiling ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( actual . handle Profiling ). named (" handle Profiling "). isEqualTo ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpected . extract Native Lib s ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( actual . extract Native Lib s ). named (" extract Native Lib s "). isEqualTo ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpected . use Embedded Dex ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( actual . use Embedded Dex ). named (" use Embedded Dex "). isEqualTo ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġfinally Ġcheck Ġfor Ġerrors ĊĠĠĠĠĠĠĠ Ġissue Checker ?. invoke ( actual Maybe . issues ) Ġ?: Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġconver Ġthe Ġnormal ĠSync Issue Ġreturned Ġinto Ġfake Ġones Ġin Ġorder Ġto Ġcompare Ġthem . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( actual Maybe . issues . map Ġ{ Ġit . to Fake () Ġ}). isEqualTo ( expected Maybe . issues ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠGiven Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmanifest : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġmanifest File : ĠFile ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġmanifest File IsRequired Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġvar Ġearly Manifest Parsing Check Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġdata Ġclass ĠFake Sync Issue ( ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġseverity : ĠInt Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtype : ĠInt Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġdata : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmessage : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġmulti Line Message : ĠList < String >? Ġ= Ġnull ĊĠĠĠ Ġ): ĠSync Issue ĊĊĠĠĠ Ġprivate Ġfun ĠSync Issue . to Fake (): ĠSync Issue Ġ= ĠFake Sync Issue ( ĊĠĠĠĠĠĠĠ Ġthis . severity , ĊĠĠĠĠĠĠĠ Ġthis . type , ĊĠĠĠĠĠĠĠ Ġthis . data , ĊĠĠĠĠĠĠĠ Ġthis . message , ĊĠĠĠĠĠĠĠ Ġthis . multi Line Message ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġinternal Ġclass ĠSync Issue Builder ( ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġseverity : ĠInt Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġtype : ĠInt Ġ= Ġ- 1 , ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġdata : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġmessage : ĠString Ġ= Ġ"", ĊĠĠĠĠĠĠĠ Ġoverride Ġvar Ġmulti Line Message : ĠList < String >? Ġ= Ġnull ĊĠĠĠ Ġ): ĠSync Issue Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġto Fake (): ĠSync Issue Ġ= ĠFake Sync Issue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . severity , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . data , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . message , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . multi Line Message ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠResult ( ĊĠĠĠĠĠĠĠ Ġval Ġdata : ĠManifest Data Ġ= ĠManifest Data (), ĊĠĠĠĠĠĠĠ Ġval Ġissues : ĠMutable List < Sync Issue > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġdata ( action : ĠManifest Data . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġissue ( action : ĠSync Issue Builder . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠSync Issue Builder (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġissues . add ( builder . to Fake ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ" Result ( data =$ data , Ġissues =$ issues )" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ