package Ġio . cl app r . player . playback Ċ Ċ import Ġcom . google . android . ex op layer 2 . C Ċ import Ġcom . google . android . ex op layer 2 . Format Ċ import Ġcom . google . android . ex op layer 2 . source . Media Source EventListener Ċ import Ġio . cl app r . player . bit rate . Bit rate History Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġkotlin . test . assertEquals Ċ Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ class ĠEx o Player Bit rate Handler Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbit rate History : ĠBit rate History ĊĠĠĠ Ġprivate Ġvar Ġtime In Nano : ĠLong Ġ= Ġ 0 L ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbit rate Handler : ĠEx o Player Bit rate Handler ĊĊĠĠĠ Ġprivate Ġvar Ġactual Bit rate Ġ= Ġ 0 L ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġactual Bit rate Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġtime In Nano Ġ= ĠSystem . nano Time () ĊĠĠĠĠĠĠĠ Ġbit rate History Ġ= ĠBit rate History Ġ{ Ġtime In Nano Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġreturn Ġlast Ġreported Ġbit rate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Bit rate Ġ= Ġ 4 0 L ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 1 0 )) ĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 2 0 )) ĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( expected Bit rate )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Bit rate , Ġbit rate Handler . current Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġtrigger ĠD ID _ UPDATE _ BIT RATE Ġfor Ġdefault Ġtrack `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Bit rate Ġ= Ġ 4 0 L ĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( expected Bit rate , ĠC . TRACK _ TYPE _ DEFAULT )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Bit rate , Ġactual Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġtrigger ĠD ID _ UPDATE _ BIT RATE Ġwhen ĠTR ACK _ TYPE _ VIDEO `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbit rate Ġ= Ġ 4 0 L ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( bit rate , ĠC . TRACK _ TYPE _ VIDEO )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( bit rate , Ġactual Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġtrigger ĠD ID _ UPDATE _ BIT RATE Ġwhen ĠTR ACK _ TYPE _ AUDIO `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Bit rate Ġ= Ġ 1 2 8 _ 0 0 0 L ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( expected Bit rate , ĠC . TRACK _ TYPE _ AUDIO )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Bit rate , Ġactual Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġadd Ġvideo Ġand Ġaudio Ġbit rates Ġwhen Ġboth Ġare Ġknown `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 3 _ 0 0 0 _ 0 0 0 , ĠC . TRACK _ TYPE _ VIDEO )) ĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 1 2 8 _ 0 0 0 , ĠC . TRACK _ TYPE _ AUDIO )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 _ 1 2 8 _ 0 0 0 , Ġbit rate Handler . current Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġnot Ġaccept Ġaudio Ġbit rate Ġless Ġthan Ġ 0 Ġ` () Ġ{ ĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 3 _ 0 0 0 _ 0 0 0 , ĠC . TRACK _ TYPE _ VIDEO )) ĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data (- 1 , ĠC . TRACK _ TYPE _ AUDIO )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 _ 0 0 0 _ 0 0 0 , Ġbit rate Handler . current Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġtrigger ĠD ID _ UPDATE _ BIT RATE Ġwith Ġnew Ġsum Ġof Ġaudio Ġand Ġvideo Ġbit rate Ġwhenever Ġvideo Ġbit rate Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 3 _ 0 0 0 _ 0 0 0 , ĠC . TRACK _ TYPE _ VIDEO )) ĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 1 2 8 _ 0 0 0 , ĠC . TRACK _ TYPE _ AUDIO )) ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 2 _ 0 0 0 _ 0 0 0 , ĠC . TRACK _ TYPE _ VIDEO )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 _ 1 2 8 _ 0 0 0 , Ġactual Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġtrigger ĠD ID _ UPDATE _ BIT RATE Ġwith Ġnew Ġsum Ġof Ġaudio Ġand Ġvideo Ġbit rate Ġwhenever Ġaudio Ġbit rate Ġchanges `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġactual Bit rate Ġ= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 3 _ 0 0 0 _ 0 0 0 , ĠC . TRACK _ TYPE _ VIDEO )) ĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 1 2 8 _ 0 0 0 , ĠC . TRACK _ TYPE _ AUDIO )) ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 3 2 0 _ 0 0 0 , ĠC . TRACK _ TYPE _ AUDIO )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 _ 3 2 0 _ 0 0 0 , Ġactual Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġlistening ĠD ID _ UPDATE _ BIT RATE Ġon Ġdifferent Ġbit rates `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠnumberOf Triggers Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ ĠnumberOf Triggers ++ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 1 0 )) ĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 4 0 )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , ĠnumberOf Triggers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġtrigger ĠD ID _ UPDATE _ BIT RATE Ġonly Ġfor Ġdifferent Ġbit rate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠnumberOf Triggers Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ ĠnumberOf Triggers ++ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 1 0 L )) ĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 1 0 L )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , ĠnumberOf Triggers ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġnot Ġtrigger ĠD ID _ UPDATE _ BIT RATE Ġwhen Ġtrack Ġtype Ġis Ġdifferent Ġfrom ĠTR ACK _ TYPE _ DEFAULT Ġor ĠTR ACK _ TYPE _ VIDEO `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbit rate Ġ= Ġ 4 0 L ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( bit rate , ĠC . TRACK _ TYPE _ UNKNOWN )) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġactual Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġhandle Ġwrong Ġtime Ġinterval Ġexception Ġon Ġadd Ġbit rate Ġon Ġhistory `() Ġ{ ĊĠĠĠĠĠĠĠ Ġtime In Nano Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 2 0 L )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġnot Ġtrigger ĠD ID _ UPDATE _ BIT RATE Ġwhen Ġvideo Ġformat Ġis Ġnull `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvideo Format Mock Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġmedia Load Data Ġ= ĠMedia Source EventListener . Media Load Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĠC . TRACK _ TYPE _ DEFAULT , Ġvideo Format Mock , Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġ 0 L , Ġ 0 L ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġactual Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġclear Ġaverage Bit rate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 3 _ 0 0 0 _ 0 0 0 , ĠC . TRACK _ TYPE _ VIDEO )) ĊĠĠĠĠĠĠĠ Ġbit rate Handler . analytics Listener . on Load Completed ( null , Ġnull , Ġmedia Load Data ( 1 2 8 _ 0 0 0 , ĠC . TRACK _ TYPE _ AUDIO )) ĊĊĠĠĠĠĠĠĠ Ġbit rate Handler . reset () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġbit rate Handler . average Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġreturn Ġaverage Ġbit rate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexpected Average Bit rate Ġ= Ġ 1 0 9 L ĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠ Ġbit rate History . add Bit rate ( 9 0 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġbit rate History . add Bit rate ( 1 0 0 , Ġ 1 7 ) ĊĠĠĠĠĠĠĠ Ġbit rate History . add Bit rate ( 1 1 0 , Ġ 3 1 ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Average Bit rate , Ġbit rate Handler . average Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġreturn Ġzero Ġbit rate Ġwhen Ġhistory Ġis Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġbit rate Handler . current Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Should Ġreturn Ġzero Ġaverage Ġbit rate Ġwhen Ġhistory Ġis Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġbit rate Handler Ġ= ĠEx o Player Bit rate Handler ( bit rate History ) Ġ{ Ġactual Bit rate Ġ= Ġit Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġbit rate Handler . average Bit rate ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmedia Load Data ( bit rate : ĠLong , Ġtrack Type : ĠInt Ġ= ĠC . TRACK _ TYPE _ DEFAULT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠMedia Source EventListener . Media Load Data Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġformat Ġ= ĠFormat . create Video Sample Format ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġnull , Ġnull , Ġbit rate . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ 0 , Ġ 0 , Ġ 0 f , ĠlistOf < ByteArray >(), Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn ĠMedia Source EventListener . Media Load Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġtrack Type , Ġformat , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġnull , Ġ 0 L , Ġ 0 L ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }