package Ġcom . av ito . runner . service . worker . device . adb . instrumentation Ċ Ċ import Ġcom . av ito . runner . Process Notification Ċ import Ġcom . av ito . runner . service . model . TestCase Run . Result . Failed Ċ import Ġcom . av ito . runner . service . model . TestCase Run . Result . Ignored Ċ import Ġcom . av ito . runner . service . model . TestCase Run . Result . Passed Ċ import Ġcom . av ito . runner . service . worker . device . adb . instrumentation . Instrumentation Entry . Instrumentation Result Entry Ċ import Ġcom . av ito . runner . service . worker . device . adb . instrumentation . Instrumentation Entry . Instrumentation Test Entry Ċ import Ġcom . av ito . runner . service . worker . model . Instrumentation TestCase Run Ċ import Ġrx . Observable Ċ Ċ fun ĠObservable < Process Notification . Output >. read Instrumentation Output (): ĠObservable < Instrumentation Entry > Ġ{ ĊĠĠĠ Ġdata Ġclass ĠResult ( val Ġbuffer : ĠString Ġ= Ġ"", Ġval Ġready For Processing : ĠBoolean Ġ= Ġfalse ) ĊĊĠĠĠ Ġreturn Ġmap Ġ{ Ġit . line Ġ} ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . trim () Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ` INSTR UMENT ATION _ CODE : Ġ- 1 ` Ġis Ġlast Ġline Ġprinted Ġby Ġinstrument ation , Ġeven Ġif Ġ 0 Ġtests Ġwere Ġrun . ĊĠĠĠĠĠĠĠ Ġ. take Until Ġ{ Ġit . startsWith (" INSTR UMENT ATION _ CODE ") Ġ} ĊĠĠĠĠĠĠĠ Ġ. scan ( Result ()) Ġ{ Ġprevious Result , Ġnew Line Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġwhen Ġ( previous Result . ready For Processing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġnew Line ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ"${ previous Result . buffer }${ System . line Separator ()} $ new Line " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Entry End Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Line . startsWith (" INSTR UMENT ATION _ STATUS _ CODE ") Ġ|| Ġnew Line . startsWith (" INSTR UMENT ATION _ CODE ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult ( buffer Ġ= Ġbuffer , Ġready For Processing Ġ= Ġis Entry End ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . ready For Processing Ġ} ĊĠĠĠĠĠĠĠ Ġ. scan < Instrumentation Entry ? >( null ) Ġ{ Ġprevious , Ġnew Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġparse Instrumentation Entry ( new . buffer ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġcurrent Ġtest Ġdoesn 't Ġhave Ġtest Ġfield ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry Ġis ĠInstrument ation Test Entry Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . test . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCheck Ġprevious Ġtest Ġentry Ġis ĠStart Ġand Ġhas Ġtest Ġname ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( previous Ġis ĠInstrument ation Test Entry Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious . statusCode Ġ== ĠInstrument ation Test Entry . StatusCode . Start Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious . test . isNotEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCopy Ġtest Ġfield Ġfrom Ġprevious ĠStart Ġentry ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry . copy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġprevious . id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtest Ġ= Ġprevious . test , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclazz Ġ= Ġprevious . clazz ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Something Ġwrong Ġwith Ġinstrument ation Ġoutput :" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Current Ġentry Ġdoesn 't Ġhave Ġtest Ġfield Ġand Ġprevious Ġentry Ġis Ġnot Ġrun " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" or Ġdoesn 't Ġhave Ġtest Ġfield Ġtoo ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter NotNull () Ċ } Ċ Ċ fun ĠObservable < Instrumentation Entry >. as Tests (): ĠObservable < Instrumentation TestCase Run > Ġ{ ĊĠĠĠ Ġdata Ġclass ĠResult ( ĊĠĠĠĠĠĠĠ Ġval Ġentries : ĠList < Instrumentation Test Entry > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġval Ġtests : ĠList < Instrumentation TestCase Run > Ġ= Ġempty List (), ĊĠĠĠĠĠĠĠ Ġval Ġtotal Tests Count : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġreturn Ġthis ĊĠĠĠĠĠĠĠ Ġ. scan ( Result ()) Ġ{ Ġprevious Result , Ġnew Entry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentries Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Entry Ġis ĠInstrument ation Test Entry ) Ġprevious Result . entries Ġ+ Ġnew Entry Ġelse Ġprevious Result . entries ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtests : ĠList < Instrumentation TestCase Run > Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Entry Ġis ĠInstrument ation Result Entry Ġ&& Ġnew Entry . statusCode Ġ== ĠInstrument ation Result Entry . StatusCode . Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entries . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation TestCase Run . Failed On Start TestCase Run ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Ġ= Ġnew Entry . getError () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation TestCase Run . Completed TestCase Run ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName Ġ= Ġit . clazz , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġit . test , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠFailed ( stack trace Ġ= Ġnew Entry . getError ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Started Milliseconds Ġ= Ġnow , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Completed Milliseconds Ġ= Ġnow ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries . find Tests () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠResult ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġpass Ġall Ġunused Ġentries Ġto Ġfurther Ġprocessing ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries Ġ= Ġentries ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. as Sequence () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < Instrumentation TestCase Run . Completed TestCase Run >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ Ġit . className Ġ== Ġentry . clazz Ġ&& Ġit . name Ġ== Ġentry . test Ġ} Ġ== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtests Ġ= Ġtests , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal Tests Count Ġ= Ġprevious Result . total Tests Count Ġ+ Ġtests . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. take Until Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . entries . count Ġ{ Ġit . current Ġ== Ġit . num Tests Ġ} Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . total Tests Count Ġ< Ġit . entries . first (). num Tests ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Less Ġtests Ġwere Ġemitted Ġthan ĠInstrument ation Ġreported : Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . tests . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĠObservable . from ( it . tests ) Ġ} Ċ } Ċ Ċ private Ġfun ĠList < Instrumentation Test Entry >. find Tests (): ĠList < Instrumentation TestCase Run > Ġ{ ĊĠĠĠ Ġreturn Ġmap Indexed Ġ{ Ġindex , Ġfirst Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġsecond Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. sub List ( index Ġ+ Ġ 1 , Ġthis . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. first OrNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst . clazz Ġ== Ġit . clazz ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst . test Ġ== Ġit . test ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst . current Ġ== Ġit . current ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirst . statusCode Ġ!= Ġit . statusCode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( second Ġ== Ġnull ) Ġnull Ġelse Ġfirst Ġto Ġsecond ĊĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter NotNull () ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( first , Ġsecond ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation TestCase Run . Completed TestCase Run ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠclassName Ġ= Ġfirst . clazz , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġfirst . test , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġwhen Ġ( second . statusCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation Test Entry . StatusCode . Ok Ġ-> ĠP assed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation Test Entry . StatusCode . Ignored Ġ-> ĠIgnore d ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation Test Entry . StatusCode . Failure , ĠInstrument ation Test Entry . StatusCode . Ass umption Failure Ġ-> ĠFailed ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstack trace Ġ= Ġsecond . stack ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation Test Entry . StatusCode . Start Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unexpected Ġstatus Ġcode Ġ[ ${ second . statusCode }] Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" in Ġsecond Ġentry , Ġ($ first , Ġ$ second )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Started Milliseconds Ġ= Ġfirst . timestamp Milliseconds , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Completed Milliseconds Ġ= Ġsecond . timestamp Milliseconds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun ĠString . substring Between ( first : ĠString , Ġvar arg Ġsecond : ĠString ): ĠString Ġ{ ĊĠĠĠ Ġval ĠindexOf First Ġ= ĠindexOf ( first ) ĊĊĠĠĠ Ġif Ġ( indexOf First Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġ"" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠstartIndex Ġ= ĠindexOf First Ġ+ Ġfirst . length ĊĊĠĠĠ Ġval Ġsecond Index Ġ= Ġsecond . as Sequence (). map Ġ{ ĊĠĠĠĠĠĠĠ ĠindexOf ( it , ĠstartIndex ) ĊĠĠĠ Ġ}. find Ġ{ Ġit Ġ!= Ġ- 1 Ġ} ĊĊĠĠĠ Ġval Ġend Index Ġ= Ġsecond Index Ġ?: Ġlength ĊĊĠĠĠ Ġreturn Ġsubstring ( startIndex , Ġend Index ) Ċ } Ċ Ċ private Ġfun ĠString . parse Instrumentation Status Value ( key : ĠString ): ĠString Ġ= ĊĠĠĠ Ġsubstring Between (" INSTR UMENT ATION _ STATUS : Ġ$ key =", Ġ" INSTR UMENT ATION _ STATUS ", Ġ" INSTR UMENT ATION _ STATUS _ CODE ") ĊĠĠĠĠĠĠĠ Ġ. trim () Ċ Ċ private Ġfun ĠString . parse Instrumentation Result Value ( key : ĠString ): ĠString Ġ= ĊĠĠĠ Ġsubstring Between (" INSTR UMENT ATION _ RESULT : Ġ$ key =", Ġ" INSTR UMENT ATION _ RESULT ", Ġ" INSTR UMENT ATION _ CODE ") ĊĠĠĠĠĠĠĠ Ġ. trim () Ċ Ċ private Ġfun ĠString . is Test Entry (): ĠBoolean Ġ= Ġcontains (" INSTR UMENT ATION _ STATUS _ CODE ") Ċ Ċ private Ġfun Ġparse Instrumentation Entry ( str : ĠString ): ĠInstrument ation Entry Ġ{ ĊĠĠĠ Ġif Ġ( str . is Test Entry ()) Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠInstrument ation Test Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnum Tests Ġ= Ġstr . parse Instrumentation Status Value (" num tests "). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstream Ġ= Ġstr . parse Instrumentation Status Value (" stream "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstack Ġ= Ġstr . parse Instrumentation Status Value (" stack "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġstr . parse Instrumentation Status Value (" id "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Ġ= Ġstr . parse Instrumentation Status Value (" test "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclazz Ġ= Ġstr . parse Instrumentation Status Value (" class "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Ġ= Ġstr . parse Instrumentation Status Value (" current "). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode Ġ= Ġstr . substring Between (" INSTR UMENT ATION _ STATUS _ CODE : Ġ", Ġ" INSTR UMENT ATION _ STATUS ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġcode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation Test Entry . StatusCode . values (). first OrNull Ġ{ Ġit . code Ġ== Ġcode Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠstatusCode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( statusCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unknown Ġtest Ġresult Ġstatus Ġcode Ġ[$ statusCode ] Ġ($ str )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠstatusCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Milliseconds Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠInstrument ation Result Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshort Message Ġ= Ġstr . parse Instrumentation Result Value (" short Msg "), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlong Message Ġ= Ġstr . parse Instrumentation Result Value (" long Msg "), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode Ġ= Ġstr . substring Between (" INSTR UMENT ATION _ CODE : Ġ", Ġ"\ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. trim () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ Ġcode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstrument ation Result Entry . StatusCode . values (). first OrNull Ġ{ Ġit . code Ġ== Ġcode Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. let Ġ{ ĠstatusCode Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( statusCode ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġthrow ĠIllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Unknown Ġinstrument ation Ġresult Ġstatus Ġcode Ġ[$ statusCode ] Ġ($ str )" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠstatusCode ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Milliseconds Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠReturns Ġ[ Observable ] Ġwith Ġnon - null Ġgeneric Ġtype ĠT . ĠReturned Ġobservable Ġfilter Ġout Ġnull Ġvalues Ċ Ġ*/ Ċ @ Suppress (" UN CHECK ED _ CAST ") Ċ private Ġfun Ġ< T Ġ: ĠAny > ĠObservable < T ?> . filter NotNull (): ĠObservable < T > Ġ= Ġfilter Ġ{ Ġit Ġ!= Ġnull Ġ} Ġas ĠObservable < T > Ċ