/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 Ġ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 . ut p Ċ Ċ import Ġcom . android . tools . ut p . plugins . result . listener . gradle . proto . Gradle Android TestResult Listener Proto . TestResult Event Ċ import Ġcom . google . testing . platform . proto . api . core . TestCase Proto Ċ import Ġcom . google . testing . platform . proto . api . core . TestResult Proto Ċ import Ġcom . google . testing . platform . proto . api . core . TestSuite Result Proto Ċ import Ġjava . util . Base 6 4 Ċ Ċ /** Ċ Ġ* ĠPro cesses ĠU TP Ġtest Ġresults ĠXML Ġtags Ġin Ġstdout Ġtext Ġfrom ĠGradle Ġtask . Ċ Ġ* Ċ Ġ* Ġ@ param Ġlisteners Ġa Ġmap Ġfrom Ġdevice ĠID Ġto Ġlistener Ġto Ġbe Ġnotified Ġof Ġtest Ġevents Ċ Ġ*/ Ċ class ĠTask Output Processor ( val Ġlisteners : ĠMap < String , ĠTask Output Processor Listener >) Ġ{ ĊĊĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠ Ġconst Ġval ĠON _ RESULT _ OPEN ING _ TAG Ġ= Ġ"< UT P _ TEST _ RESULT _ ON _ TEST _ RESULT _ EVENT >" ĊĠĠĠ Ġconst Ġval ĠON _ RESULT _ CLO SING _ TAG Ġ= Ġ"</ UT P _ TEST _ RESULT _ ON _ TEST _ RESULT _ EVENT >" ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠPro cesses Ġstdout Ġtext Ġfrom Ġthe ĠGradle Ġtask Ġoutput . ĠThe Ġinput Ġstring Ġcan Ġbe ĊĠĠ Ġ* Ġmulti - line Ġstring . ĠThe ĠU TP Ġtest Ġresults ĠXML Ġtags Ġare Ġremoved Ġfrom Ġthe ĊĠĠ Ġ* Ġreturning Ġstring . ĊĠĠ Ġ* ĊĠĠ Ġ* Ġ@ param Ġstdout Ġa Ġstdout Ġtext Ġfrom Ġthe ĠA GP Ġtask Ġto Ġbe Ġprocessed ĊĠĠ Ġ*/ ĊĠ Ġfun Ġprocess ( stdout : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġreturn Ġstdout . line Sequence (). filter Not ( this :: process Line ). join ToString ("\ n ") ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess Line ( line : ĠString ): ĠBoolean Ġ{ ĊĠĠĠ Ġval Ġtrimmed Line Ġ= Ġline . trim () ĊĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠ Ġtrimmed Line . startsWith ( ON _ RESULT _ OPEN ING _ TAG ) Ġ&& Ġline . endsWith ( ON _ RESULT _ CLO SING _ TAG ) Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbase 6 4 Encoded Proto Ġ= Ġtrimmed Line . remove Sur rounding ( ON _ RESULT _ OPEN ING _ TAG , ĠON _ RESULT _ CLO SING _ TAG ) ĊĠĠĠĠĠĠĠ Ġval Ġevent Proto Ġ= Ġdecode Base 6 4 Encoded Proto ( base 6 4 Encoded Proto ) ĊĠĠĠĠĠĠĠ Ġprocess Event ( event Proto ) ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess Event ( event : ĠTest Result Event ) Ġ{ ĊĠĠĠ Ġwhen ( event . state Case ) Ġ{ ĊĠĠĠĠĠ ĠTest Result Event . State Case . TEST _ SUITE _ STARTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess TestSuite Started ( event ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠTest Result Event . State Case . TEST _ CASE _ STARTED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess TestCase Started ( event ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠTest Result Event . State Case . TEST _ CASE _ FINISHED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess TestCase Finished ( event ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ ĠTest Result Event . State Case . TEST _ SUITE _ FINISHED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠ Ġprocess TestSuite Finished ( event ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess TestSuite Started ( event : ĠTest Result Event ) Ġ{ ĊĠĠĠ Ġval Ġtest Suite Started Ġ= Ġevent . test Suite Started ĊĠĠĠ Ġval Ġtest Suite Ġ= Ġtest Suite Started . test Suite Metadata . unpack ( TestSuite Result Proto . TestSuite MetaData :: class . java ) ĊĠĠĠ Ġlisteners [ event . deviceId ]?. on TestSuite Started ( test Suite ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess TestCase Started ( event : ĠTest Result Event ) Ġ{ ĊĠĠĠ Ġval ĠtestCase Started Ġ= Ġevent . testCase Started ĊĠĠĠ Ġval ĠtestCase Ġ= ĠtestCase Started . testCase . unpack ( TestCase Proto . TestCase :: class . java ) ĊĠĠĠ Ġlisteners [ event . deviceId ]?. on TestCase Started ( testCase ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess TestCase Finished ( event : ĠTest Result Event ) Ġ{ ĊĠĠĠ Ġval ĠtestCase Finished Ġ= Ġevent . testCase Finished ĊĠĠĠ Ġval ĠtestCase Result Ġ= ĠtestCase Finished . testCase Result . unpack ( TestResult Proto . TestResult :: class . java ) ĊĠĠĠ Ġlisteners [ event . deviceId ]?. on TestCase Finished ( testCase Result ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġprocess TestSuite Finished ( event : ĠTest Result Event ) Ġ{ ĊĠĠĠ Ġval Ġtest Suite Finished Ġ= Ġevent . test Suite Finished ĊĠĠĠ Ġval Ġtest Suite Result Ġ= Ġtest Suite Finished . test Suite Result . unpack ( TestSuite Result Proto . TestSuite Result :: class . java ) ĊĠĠĠ Ġlisteners [ event . deviceId ]?. on TestSuite Finished ( test Suite Result ) ĊĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠDe codes Ġbase 6 4 Ġencoded Ġtext Ġproto Ġmessage Ġinto Ġ[ TestResult Event ]. Ċ Ġ*/ Ċ private Ġfun Ġdecode Base 6 4 Encoded Proto ( base 6 4 Encoded Proto : ĠString ): ĠTest Result Event Ġ{ ĊĠ Ġreturn ĠTest Result Event . parseFrom ( Base 6 4 . get Decoder (). decode ( base 6 4 Encoded Proto )) Ċ }