package Ġcom . mo ka . utils Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . util . Log Ċ import Ġandroidx . test . espress o . Esp ress o Ċ import Ġandroidx . test . espress o . base . Default Failure Handler Ċ import Ġandroidx . test . platform . app . Instrumentation Registry Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . Description Ċ import Ġorg . junit . runners . model . Statement Ċ Ċ /** Ċ Ġ* ĠIt Ġcaptures Ġon Ġerror Ġcase Ġa Ġscreenshot Ċ Ġ*/ Ċ open Ġclass ĠScreen shot Activity Rule < T Ġ: ĠActivity >( activity Class : ĠClass < T >) Ġ: ĠNo Animation Activity Rule < T >( activity Class ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġscreenshot Rule Ġ= ĠScreen shot Rule () ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( base : ĠStatement , Ġdescription : ĠDescription ?): ĠStatement Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( description Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontext Ġ= ĠInstrument ation Registry . get Instrumentation (). context ĊĠĠĠĠĠĠĠĠĠĠĠ ĠE sp ress o . set Failure Handler Ġ{ Ġthrowable , Ġmatcher Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Suppress (" Constant Condition If ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( DUMP _ THREADS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ Screenshot Activity Rule . dump Threads () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( description . getAnnotation ( Test :: class . java ). expected Ġ!= Ġthrowable . java Class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Rule . take ( this @ Screenshot Activity Rule . activity , Ġ" failed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Failure Handler ( context ). handle ( throwable , Ġmatcher ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscreenshot Rule . apply ( base , Ġdescription ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . apply ( base , Ġdescription ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Log Not Tim ber ") ĊĠĠĠ Ġprivate Ġfun Ġdump Threads () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactive Count Ġ= ĠThread . active Count () ĊĠĠĠĠĠĠĠ Ġval Ġthreads Ġ= ĠarrayOf Null s < Thread >( active Count ) ĊĠĠĠĠĠĠĠ ĠThread . enumerate ( threads ) ĊĠĠĠĠĠĠĠ Ġthreads . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" dump Threads ", Ġit . name Ġ+ Ġ": Ġ" Ġ+ Ġit . state ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( stack Trace Element Ġin Ġit . stack Trace ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" dump Threads ", Ġ"\ t " Ġ+ Ġstack Trace Element ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠD UMP _ THREADS Ġ= Ġfalse ĊĠĠĠ Ġ} Ċ } Ċ