@ file : Suppress (" Un stable Api Usage ") Ċ Ċ package Ġcom . av ito . instrumentation Ċ Ċ import Ġcom . android . build . gradle . api . A pk Variant Ċ import Ġcom . android . build . gradle . api . Application Variant Ċ import Ġcom . android . build . gradle . api . Test Variant Ċ import Ġcom . android . build . gradle . internal . dsl . Default Config Ċ import Ġcom . android . build . gradle . internal . tasks . Pro guard Configurable Task Ċ import Ġcom . av ito . android . Instrumentation Changed Tests Finder Api Ċ import Ġcom . av ito . android . Load Tests From A pk Task Ċ import Ġcom . av ito . android . apk Directory Ċ import Ġcom . av ito . android . changed Tests Finder Task Provider Ċ import Ġcom . av ito . android . runner . devices . model . DeviceType . CLOUD Ċ import Ġcom . av ito . android . stats . stats d Config Ċ import Ġcom . av ito . android . with Android App Ċ import Ġcom . av ito . android . with Android Lib Ċ import Ġcom . av ito . android . with Android Module Ċ import Ġcom . av ito . android . with Artifacts Ċ import Ġcom . av ito . git . Git State Ċ import Ġcom . av ito . git . git State Ċ import Ġcom . av ito . instrumentation . configuration . create Instrumentation Plugin Extension Ċ import Ġcom . av ito . instrumentation . configuration . with Instrumentation Extension Data Ċ import Ġcom . av ito . instrumentation . internal . exec uting . Execution Parameters Ċ import Ġcom . av ito . instrumentation . internal . test . Dump Configuration Task Ċ import Ġcom . av ito . instrumentation . service . TestRunner Service Ċ import Ġcom . av ito . kotlin . dsl . dependency On Ċ import Ġcom . av ito . kotlin . dsl . getBoolean Property Ċ import Ġcom . av ito . kotlin . dsl . with Type Ċ import Ġcom . av ito . utils . gradle . Kubernetes Credentials Ċ import Ġcom . av ito . utils . gradle . env Args Ċ import Ġcom . av ito . utils . gradle . kubernetes Credentials Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . api . file . Regular File Property Ċ import Ġorg . gradle . api . internal . provider . Providers Ċ import Ġorg . gradle . kotlin . dsl . register Ċ import Ġjava . io . File Ċ import Ġjava . time . Duration Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ public Ġclass ĠInstrument ation Tests Plugin Ġ: ĠPlugin < Project > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġci Task Group Ġ= Ġ" ci " ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġenv Ġ= Ġproject . env Args ĊĠĠĠĠĠĠĠ Ġval Ġgit State Ġ= Ġproject . git State () ĊĠĠĠĠĠĠĠ Ġproject . create Instrumentation Plugin Extension () ĊĠĠĠĠĠĠĠ Ġproject . apply Test Tasks () ĊĊĠĠĠĠĠĠĠ Ġproject . with Android Module Ġ{ Ġbase Extension Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsetup Local Instrumentation Arguments ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject Ġ= Ġproject , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgit State Ġ= Ġgit State . or Null , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfig Ġ= Ġbase Extension . default Config ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġproject . with Instrumentation Extension Data Ġ{ Ġextension Data Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest Runner ServiceProvider Ġ= Ġif Ġ( extension Data . use Service ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . gradle . shared Services . register If Absent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" test Runner Service ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Runner Service :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġspec Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( spec . parameters ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkubernetes Credentials . set ( project . kubernetes Credentials ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstats D Config . set ( project . stats d Config . get ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Id . set ( env . build . id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuild Type . set ( env . build . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPro viders . not Defined () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġload Tests Task Ġ= Ġproject . tasks . register < Load Tests From A pk Task >(" load Tests From A pk ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġci Task Group ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Parse Ġtests Ġand Ġit 's Ġannotation Ġdata Ġfrom Ġtest Ġapk Ġdex Ġfile " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġextension Data . configurations . forEach Ġ{ Ġinstrument ation Configuration Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instrumentation Configuration . requested DeviceType Ġ== ĠCLO UD ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġproject . kubernetes Credentials Ġis ĠKubernetes Credentials . Empty ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Configuration Ġ${ instrumentation Configuration . name } Ġerror : Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" has Ġkubernetes Ġdevice Ġtarget Ġwithout Ġkubernetes Ġcredentials " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfiguration Output Folder Ġ= ĠFile ( extension Data . output , Ġinstrument ation Configuration . name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instrumentation Configuration . run Only Changed Tests ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project . plugins . has Plugin ( Instrumentation Changed Tests Finder Api . plugin Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . tasks . changed Tests Finder Task Provider (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfigure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . target Commit . set ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgit State . map Ġ{ Ġgit Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire NotNull ( git . target Branch ?. commit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Target Ġcommit Ġis Ġrequired Ġto Ġfind Ġmodified Ġtests " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstrument ation Task Provider Ġ= Ġproject . tasks . register < Instrumentation Tests Task >( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation Task Name ( instrumentation Configuration . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimeout . set ( Duration . of Seconds ( instrumentation Configuration . timeout InSeconds )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġci Task Group ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . instrumentation Configuration . set ( instrumentation Configuration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . build Id . set ( env . build . id . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . build Type . set ( env . build . type ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . git Branch . set ( git State . map Ġ{ Ġit . current Branch . name Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . git Commit . set ( git State . map Ġ{ Ġit . current Branch . commit Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . test Runner Service . set ( test Runner ServiceProvider ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . output . set ( configuration Output Folder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Data . report Viewer Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . report Viewer Config . set ( extension Data . report Viewer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . kubernetes Credentials . set ( project . kubernetes Credentials ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . run Only Changed Tests . set ( instrumentation Configuration . run Only Changed Tests ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( instrumentation Configuration . run Only Changed Tests ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( project . plugins . has Plugin ( Instrumentation Changed Tests Finder Api . plugin Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimpact Task Provider Ġ= Ġproject . tasks . changed Tests Finder Task Provider () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . dependency On ( impact Task Provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . changed Tests . set ( it . changed Tests File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . with Android Lib Ġ{ Ġlib Extension Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrunner : ĠString Ġ= Ġlib Extension . default Config . getTest Instrumentation Runner OrThrow () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlib Extension . test Variants . all Ġ{ Ġtest Variant : ĠTest Variant Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest A pk Provider Ġ= Ġtest Variant . package Application Provider ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrun Functional Tests Parameters Ġ= ĠExecution Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication PackageName Ġ= Ġtest Variant . application Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Test PackageName Ġ= Ġtest Variant . application Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Runner Ġ= Ġrunner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġinstrument ation Configuration . kubernetes Namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog cat Tags Ġ= Ġextension Data . log cat Tags , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Device Debug Ġ= Ġinstrument ation Configuration . enable Device Debug ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Tests Task . configure Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Data . test Application A pk Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . test A pk . set ( test A pk Provider . get (). apk Directory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . test A pk . set ( File ( extension Data . test Application A pk )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation Task Provider . configure Ġ{ Ġinstrument ation Task Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation Task . parameters . set ( run Functional Tests Parameters ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Data . test Application A pk Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation Task . dependency On ( test A pk Provider ) Ġ{ Ġdependent Task Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation Task . test Application . set ( dependent Task . apk Directory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation Task . test Application . set ( File ( extension Data . test Application A pk )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Data . test Pro guard Mapping Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation Task . setup Pro guard Mapping ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation Task . test Pro guard Mapping , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Variant ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation Task . test Pro guard Mapping . set ( extension Data . test Pro guard Mapping ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . with Android App Ġ{ Ġapp Extension Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Extension . test Variants . all Ġ{ Ġtest Variant : ĠTest Variant Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtested Variant : ĠApplication Variant Ġ= Ġtest Variant . tested Variant Ġas ĠApplication Variant ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Variant . with Artifacts Ġ{ Ġtest Variant Package Task , Ġtested Variant Package Task Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrunner : ĠString Ġ= Ġapp Extension . default Config . getTest Instrumentation Runner OrThrow () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrun Functional Tests Parameters Ġ= ĠExecution Parameters ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication PackageName Ġ= Ġtested Variant . application Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Test PackageName Ġ= Ġtest Variant . application Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Runner Ġ= Ġrunner , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnamespace Ġ= Ġinstrument ation Configuration . kubernetes Namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog cat Tags Ġ= Ġextension Data . log cat Tags , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenable Device Debug Ġ= Ġinstrument ation Configuration . enable Device Debug ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstrument ation Task Provider . configure Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . parameters . set ( run Functional Tests Parameters ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Data . application A pk Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . dependency On ( tested Variant Package Task ) Ġ{ Ġdependent Task Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . application . set ( dependent Task . apk Directory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . application . set ( File ( extension Data . application A pk )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Data . test Application A pk Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . dependency On ( test Variant Package Task ) Ġ{ Ġdependent Task Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . test Application . set ( dependent Task . apk Directory ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . test Application . set ( File ( extension Data . test Application A pk )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Data . application Pro guard Mapping Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . setup Pro guard Mapping ( task . application Pro guard Mapping , Ġtested Variant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . application Pro guard Mapping . set ( extension Data . application Pro guard Mapping ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( extension Data . test Pro guard Mapping Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . setup Pro guard Mapping ( task . test Pro guard Mapping , Ġtest Variant ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtask . test Pro guard Mapping . set ( extension Data . test Pro guard Mapping ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO : ĠMake Ġstrong er Ġcontract : ĠMB S - 7 8 9 0 ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠNB : Ġsync Ġproject Ġin ĠIDE Ġafter Ġchanges Ġin ĠInstrument ation Runner Arguments ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġsetup Local Instrumentation Arguments ( ĊĠĠĠĠĠĠĠ Ġproject : ĠProject , ĊĠĠĠĠĠĠĠ Ġgit State : ĠGit State ?, ĊĠĠĠĠĠĠĠ Ġconfig : ĠDefault Config ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= Ġmutable Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠ Ġargs [" job Slug "] Ġ= Ġ" Local Tests " ĊĠĠĠĠĠĠĠ Ġargs [" run Id "] Ġ= Ġresolve Local Instrumentation Run Id () ĊĠĠĠĠĠĠĠ Ġargs [" device Name "] Ġ= Ġ" local " ĊĠĠĠĠĠĠĠ Ġargs [" build Branch "] Ġ= Ġgit State ?. current Branch ?. name Ġ?: Ġ" local " ĊĠĠĠĠĠĠĠ Ġargs [" build Commit "] Ġ= Ġgit State ?. current Branch ?. commit Ġ?: Ġ" local " ĊĠĠĠĠĠĠĠ Ġargs [" slack Token "] Ġ= Ġ" stub " ĊĠĠĠĠĠĠĠ Ġargs [" sentry D sn "] Ġ= Ġ" http :// stub - project @ stub - host / 0 " ĊĠĠĠĠĠĠĠ Ġargs [" file Storage Url "] Ġ= Ġ" http :// stub " ĊĠĠĠĠĠĠĠ Ġargs [" team city Build Id "] Ġ= Ġ"- 1 " ĊĠĠĠĠĠĠĠ Ġargs [" av ito . report . enabled "] Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject . getBoolean Property (" av ito . report . enabled ", Ġdefault Ġ= Ġfalse ). toString () ĊĊĠĠĠĠĠĠĠ Ġ// ĠTODO ĠNeed Ġto Ġbe Ġset Ġbefore Ġ` after Evaluate ` ĊĠĠĠĠĠĠĠ Ġconfig . test Instrumentation Runner Arguments ( filter NotBlank Values ( args )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠInstrument ation Tests Task . setup Pro guard Mapping ( ĊĠĠĠĠĠĠĠ Ġmapping Property : ĠRegular File Property , ĊĠĠĠĠĠĠĠ Ġvariant : ĠA pk Variant ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġproject . tasks . with Type < Pro guard Configurable Task >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. matching Ġ{ Ġit . variant Name Ġ== Ġvariant . name Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . let Ġ{ Ġpro guard Task Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdependency On ( pro guard Task ) Ġ{ Ġdependent Task Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmapping Property . set ( dependent Task . mapping File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠÐĹ Ð´ ÐµÑģ ÑĮ ĠÐ±ÑĥÐ´ ÑĥÑĤ ĠÑģ Ð¾Ñģ ÑĢÐµÐ´ Ð¾ÑĤ Ð¾Ñĩ ÐµÐ½ Ñĭ ĠÑĤ Ð°Ñģ ÐºÐ¸ , ĠÐºÐ¾ÑĤÐ¾ÑĢÑĭÐµ ĠÐ¸ÑģÐ¿Ð¾Ð»ÑĮÐ· ÑĥÑİ ÑĤ ÑģÑı ĠÐ¢ Ðŀ ÐĽ Ð ¬ Ðļ Ðŀ ĠÐ´Ð»Ñı ĠÐ¸Ð½ ÑĤ ÐµÐ³ ÑĢÐ° ÑĨÐ¸ Ð¾Ð½ Ð½Ð¾Ð³Ð¾ ĊĠĠĠĠ Ġ* ĠÑĤ ÐµÑģÑĤ Ð¸ÑĢÐ¾Ð² Ð°Ð½Ð¸Ñı ĠÐ¿Ð» Ð°Ð³ Ð¸ Ð½Ð° . ĠÐĶ Ð¾Ð±Ð°Ð² Ð»Ñı ÐµÐ¼ ĠÑģ Ñİ Ð´Ð° ĠÐ¸ Ñħ ĠÐ° Ðº ÐºÑĥ ÑĢÐ°ÑĤ Ð½Ð¾ ĠÑĤÐ¾Ð»ÑĮÐºÐ¾ ĠÐ´Ð»Ñı ĠÐº ÑĢ Ð¸ÑĤ Ð¸Ñĩ Ð½ÑĭÑħ ĠÐº ÐµÐ¹ Ñģ Ð¾Ð² . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠProject . apply Test Tasks () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith Instrumentation Extension Data Ġ{ Ġextension Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfiguration Dump File Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġroot Project . file ( instrumentation Dump Path ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . register < Dump Configuration Task >(" instrumentation Dump Configuration ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= Ġci Task Group ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Dump Ġinstrument ation Ġextension Ġas Ġjson " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . configuration . set ( extension ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . output . set ( configuration Dump File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ private Ġfun Ġfilter NotBlank Values ( map : ĠMap < String , ĠAny ?> ) Ġ= ĊĠĠĠ Ġmap . filter Values Ġ{ Ġvalue : ĠAny ? Ġ-> ĊĠĠĠĠĠĠĠ Ġvalue ?. toString (). isNull Or Blank (). not () ĊĠĠĠ Ġ} Ġas ĠMap < String , ĠString > Ċ Ċ private Ġfun Ġresolve Local Instrumentation Run Id (): ĠString Ġ= ĊĠĠĠ Ġ" LOCAL -${ TimeUnit . MILLISECONDS . to Days ( System . currentTimeMillis ()) }" Ċ Ċ private Ġfun ĠDefault Config . getTest Instrumentation Runner OrThrow (): ĠString Ġ{ ĊĠĠĠ Ġval Ġrunner : ĠString Ġ= Ġrequire NotNull ( test Instrumentation Runner ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" test Instrumentation Runner Ġmust Ġbe Ġset " ĊĠĠĠ Ġ} ĊĠĠĠ Ġrequire ( runner . isNotBlank ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" test Instrumentation Runner Ġmust Ġbe Ġset . ĠCurrent Ġvalue : Ġ$ runner " ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn Ġrunner Ċ } Ċ