package Ġio . sentry . android . core Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . util . S parseInt Array Ċ import Ġandroidx . core . app . Frame Metrics Aggregator Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġio . sentry . protocol . S entry Id Ċ import Ġorg . junit . runner . RunWith Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNull Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠActivity Frames Tracker Test Ġ{ ĊĊĠĠĠ Ġprivate Ġclass ĠFix ture Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġag gregator Ġ= Ġmock < Frame Metrics Aggregator >() ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġmock < Activity >() ĊĠĠĠĠĠĠĠ Ġval Ġs entry Id Ġ= ĠS entry Id () ĊĠĠĠĠĠĠĠ Ġval Ġload Class Ġ= Ġmock < Load Class >() ĊĊĠĠĠĠĠĠĠ Ġfun ĠgetS ut (): ĠActivity Frames Tracker Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠActivity Frames Tracker ( ag gregator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval Ġfixture Ġ= ĠFix ture () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sets Ġtotal Ġframes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsut Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġget Array () ĊĊĠĠĠĠĠĠĠ Ġwhenever ( fixture . ag gregator . remove ( any ())). thenReturn ( array ) ĊĊĠĠĠĠĠĠĠ Ġsut . set Metrics ( fixture . activity , Ġfixture . sentry Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= Ġsut . take Metrics ( fixture . sentry Id ) ĊĠĠĠĠĠĠĠ Ġval Ġtotal Frames Ġ= Ġmetrics !! [" frames _ total "] ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( total Frames !!. value , Ġ 1 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sets Ġfrozen Ġframes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsut Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġget Array ( frame Time Ġ= Ġ 7 0 5 , Ġnum Frames Ġ= Ġ 5 ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( fixture . ag gregator . remove ( any ())). thenReturn ( array ) ĊĊĠĠĠĠĠĠĠ Ġsut . set Metrics ( fixture . activity , Ġfixture . sentry Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= Ġsut . take Metrics ( fixture . sentry Id ) ĊĠĠĠĠĠĠĠ Ġval Ġfrozen Frames Ġ= Ġmetrics !! [" frames _ frozen "] ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( frozen Frames !!. value , Ġ 5 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sets Ġslow Ġframes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsut Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= Ġget Array ( frame Time Ġ= Ġ 2 0 , Ġnum Frames Ġ= Ġ 5 ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( fixture . ag gregator . remove ( any ())). thenReturn ( array ) ĊĊĠĠĠĠĠĠĠ Ġsut . set Metrics ( fixture . activity , Ġfixture . sentry Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= Ġsut . take Metrics ( fixture . sentry Id ) ĊĠĠĠĠĠĠĠ Ġval Ġslow Frames Ġ= Ġmetrics !! [" frames _ slow "] ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( slow Frames !!. value , Ġ 5 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` sets Ġslow Ġand Ġfrozen Ġframes `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsut Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġarray All Ġ= ĠS parseInt Array () ĊĠĠĠĠĠĠĠ Ġarray All . put ( 1 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġarray All . put ( 2 0 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġarray All . put ( 7 0 5 , Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠarrayOf ( array All ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( fixture . ag gregator . remove ( any ())). thenReturn ( array ) ĊĊĠĠĠĠĠĠĠ Ġsut . set Metrics ( fixture . activity , Ġfixture . sentry Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= Ġsut . take Metrics ( fixture . sentry Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtotal Frames Ġ= Ġmetrics !! [" frames _ total "] ĊĠĠĠĠĠĠĠ ĠassertEquals ( total Frames !!. value , Ġ 1 1 1 f ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfrozen Frames Ġ= Ġmetrics [" frames _ frozen "] ĊĠĠĠĠĠĠĠ ĠassertEquals ( frozen Frames !!. value , Ġ 6 f ) ĊĊĠĠĠĠĠĠĠ Ġval Ġslow Frames Ġ= Ġmetrics [" frames _ slow "] ĊĠĠĠĠĠĠĠ ĠassertEquals ( slow Frames !!. value , Ġ 5 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` do Ġnot Ġset Ġmetrics Ġif Ġvalues Ġare Ġzero es `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsut Ġ= Ġfixture . getS ut () ĊĠĠĠĠĠĠĠ Ġval Ġarray All Ġ= ĠS parseInt Array () ĊĠĠĠĠĠĠĠ Ġarray All . put ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġarray Ġ= ĠarrayOf ( array All ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( fixture . ag gregator . remove ( any ())). thenReturn ( array ) ĊĊĠĠĠĠĠĠĠ Ġsut . set Metrics ( fixture . activity , Ġfixture . sentry Id ) ĊĊĠĠĠĠĠĠĠ Ġval Ġmetrics Ġ= Ġsut . take Metrics ( fixture . sentry Id ) ĊĊĠĠĠĠĠĠĠ ĠassertNull ( metrics ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` add Activity Ġdoes Ġnot Ġthrow Ġif Ġno ĠAndroid X `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( fixture . load Class . load Class ( any ())). then Throw ( Class NotFoundException ()) ĊĠĠĠĠĠĠĠ Ġval Ġsut Ġ= ĠActivity Frames Tracker ( fixture . load Class ) ĊĊĠĠĠĠĠĠĠ Ġsut . add Activity ( fixture . activity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` set Metrics Ġdoes Ġnot Ġthrow Ġif Ġno ĠAndroid X `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( fixture . load Class . load Class ( any ())). then Throw ( Class NotFoundException ()) ĊĠĠĠĠĠĠĠ Ġval Ġsut Ġ= ĠActivity Frames Tracker ( fixture . load Class ) ĊĊĠĠĠĠĠĠĠ Ġsut . set Metrics ( fixture . activity , Ġfixture . sentry Id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` stop Ġdoes Ġnot Ġthrow Ġif Ġno ĠAndroid X `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( fixture . load Class . load Class ( any ())). then Throw ( Class NotFoundException ()) ĊĠĠĠĠĠĠĠ Ġval Ġsut Ġ= ĠActivity Frames Tracker ( fixture . load Class ) ĊĊĠĠĠĠĠĠĠ Ġsut . stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` take Metrics Ġreturns Ġnull Ġif Ġno ĠAndroid X `() Ġ{ ĊĠĠĠĠĠĠĠ Ġwhenever ( fixture . load Class . load Class ( any ())). then Throw ( Class NotFoundException ()) ĊĠĠĠĠĠĠĠ Ġval Ġsut Ġ= ĠActivity Frames Tracker ( fixture . load Class ) ĊĊĠĠĠĠĠĠĠ ĠassertNull ( sut . take Metrics ( fixture . sentry Id )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Array ( frame Time : ĠInt Ġ= Ġ 1 , Ġnum Frames : ĠInt Ġ= Ġ 1 ): ĠArray < S parseInt Array ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtotal Array Ġ= ĠS parseInt Array () ĊĠĠĠĠĠĠĠ Ġtotal Array . put ( frame Time , Ġnum Frames ) ĊĠĠĠĠĠĠĠ Ġreturn ĠarrayOf ( total Array ) ĊĠĠĠ Ġ} Ċ } Ċ