/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 Ġ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 . tools . build . jet ifier . processor . map Ċ Ċ import Ġcom . android . tools . build . jet ifier . core . config . Config Ċ import Ġcom . android . tools . build . jet ifier . core . rule . Rewrite Rule Ċ import Ġcom . android . tools . build . jet ifier . core . rule . Rewrite Rules Map Ċ import Ġcom . android . tools . build . jet ifier . core . type . Java Type Ċ import Ġcom . android . tools . build . jet ifier . processor . type . Map Generator Rem apper Ċ import Ġcom . google . common . truth . Truth Ċ import Ġorg . junit . Test Ċ Ċ class ĠMap Generation Test Ġ{ ĊĊĠĠĠ Ġ@ Test Ġfun Ġfrom One Type _ to One Type () Ġ{ ĊĠĠĠĠĠĠĠ ĠScan Tester ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test That Rules ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Rule (" android / support / v 7 /( .* )", Ġ" android / test /{ 0 }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Allowed Prefixes (" android / support /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. for Given Types ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Type (" android / support / v 7 / pref / Preference ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Into ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtypes Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android / support / v 7 / pref / Preference " Ġto Ġ" android / test / pref / Preference " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Is Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġfrom Two Types _ to One Type _ prefix Res pect ed () Ġ{ ĊĠĠĠĠĠĠĠ ĠScan Tester ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test That Rules ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Rule (" android / support / v 7 /( .* )", Ġ" android / test /{ 0 } "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Rule (" android / support / v 1 4 /( .* )", Ġ" android / test /{ 0 }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Allowed Prefixes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android / support / v 7 /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. for Given Types ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Type (" android / support / v 7 / pref / Preference "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Type (" android / support / v 1 4 / pref / Preference Dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Into ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtypes Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android / support / v 7 / pref / Preference " Ġto Ġ" android / test / pref / Preference " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Is Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġfrom Two Types _ to Two Types _ distinct Rules () Ġ{ ĊĠĠĠĠĠĠĠ ĠScan Tester ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test That Rules ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Rule (" android / support / v 7 /( .* )", Ġ" android / test /{ 0 } "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Rule (" android / support / v 1 4 /( .* )", Ġ" android / test /{ 0 }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Allowed Prefixes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android / support / v 7 /", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android / support / v 1 4 /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. for Given Types ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Type (" android / support / v 7 / pref / Preference "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Type (" android / support / v 1 4 / pref / Preference Dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Into ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtypes Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android / support / v 7 / pref / Preference " Ġto Ġ" android / test / pref / Preference ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android / support / v 1 4 / pref / Preference Dialog " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġ" android / test / pref / Preference Dialog " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Is Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġfrom Two Types _ to Two Types _ res pect s Order () Ġ{ ĊĠĠĠĠĠĠĠ ĠScan Tester ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test That Rules ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Rule (" android / support / v 1 4 /( .* )", Ġ" android / test /{ 0 } "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Rule (" android / support /( .* )", Ġ" android / fallback /{ 0 }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Allowed Prefixes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android / support /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. for Given Types ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Type (" android / support / v 7 / pref / Preference "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Type (" android / support / v 1 4 / pref / Preference Dialog ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Into ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtypes Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android / support / v 7 / pref / Preference " Ġto Ġ" android / fallback / v 7 / pref / Preference ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android / support / v 1 4 / pref / Preference Dialog " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Ġ" android / test / pref / Preference Dialog " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Is Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġfun Ġmap Two Types _ should Ignore First Two () Ġ{ ĊĠĠĠĠĠĠĠ ĠScan Tester ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. test That Rules ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Rule (" android / support / v 7 /( .* )", Ġ" ignore "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Rule (" android / support / v 8 /( .* )", Ġ" ignore In Pre processor Only "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRewrite Rule (" android / support / v 1 4 /( .* )", Ġ" android / test /{ 0 }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Allowed Prefixes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android / support /" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. for Given Types ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Type (" android / support / v 7 / pref / Preference "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Type (" android / support / v 8 / pref / Preference "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠJava Type (" android / support / v 1 4 / pref / Preference ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Into ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtypes Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" android / support / v 1 4 / pref / Preference " Ġto Ġ" android / test / pref / Preference " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. and Is Complete () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġobject ĠScan Tester Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġtest That Rules ( var arg Ġrules : ĠRewrite Rule ) Ġ= ĠStep 1 ( rules . toList ()) ĊĊĠĠĠĠĠĠĠ Ġclass ĠStep 1 ( private Ġval Ġrules : ĠList < Rewrite Rule >) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġwith Allowed Prefixes ( var arg Ġprefixes : ĠString ) Ġ= ĠStep 2 ( rules , Ġprefixes . toSet ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠStep 2 ( private Ġval Ġrules : ĠList < Rewrite Rule >, Ġprivate Ġval Ġprefixes : ĠSet < String >) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġall Types : ĠMutable List < Java Type > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġvar Ġwas Map Incomplete Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġfor Given Types ( var arg Ġtypes : ĠJava Type ): ĠStep 2 Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Types . addAll ( types ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġmap Into ( types : ĠMap < String , ĠString >): ĠStep 2 Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠConfig . from Optional ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrestrict To Package Prefixes Ġ= Ġprefixes , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrules Map Ġ= ĠRewrite Rules Map ( rules )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscanner Ġ= ĠMap Generator Rem apper ( config ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġall Types . forEach Ġ{ Ġscanner . rewrite Type ( it ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtypes Map Ġ= Ġscanner . create Types Map (). toJson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwas Map Incomplete Ġ= Ġscanner . is Map Not Complete ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( types Map . types ). contains Exactly Entries In ( types ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġand IsNot Complete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( was Map Incomplete ). isTrue () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġand Is Complete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTr uth . assertThat ( was Map Incomplete ). isFalse () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ