package Ġfr . free . n rw . commons . custom selector . ui . selector Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Looper Ċ import Ġandroid . os . Looper . get Main Looper Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġandroidx . fragment . app . Fragment Transaction Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . facebook . draw ee . backends . pipeline . F resco Ċ import Ġcom . facebook . so loader . So Loader Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . wh enever Ċ import Ġfr . free . n rw . commons . R Ċ import Ġfr . free . n rw . commons . Test App Adapter Ċ import Ġfr . free . n rw . commons . Test Common s Application Ċ import Ġfr . free . n rw . commons . custom selector . model . Callback Status Ċ import Ġfr . free . n rw . commons . custom selector . model . Image Ċ import Ġfr . free . n rw . commons . custom selector . model . Result Ċ import Ġfr . free . n rw . commons . custom selector . ui . adapter . Image Adapter Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . jupiter . api . Assertions . assertEquals Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito Annotations Ċ import Ġorg . power mock . reflect . White box Ċ import Ġorg . ro bo lectric . Ro bo lectric Ċ import Ġorg . ro bo lectric . Ro bo lectric TestRunner Ċ import Ġorg . ro bo lectric . Runtime Environment Ċ import Ġorg . ro bo lectric . Shadow s Ċ import Ġorg . ro bo lectric . Shadow s . shadow Of Ċ import Ġorg . ro bo lectric . annotation . Config Ċ import Ġorg . ro bo lectric . annotation . Looper Mode Ċ import Ġorg . wikipedia . App Adapter Ċ import Ġjava . lang . reflect . Field Ċ Ċ /** Ċ Ġ* ĠCustom ĠSelector ĠImage ĠFragment ĠTest . Ċ Ġ*/ Ċ @ RunWith ( Ro bo lectric TestRunner :: class ) Ċ @ Config ( sdk Ġ= Ġ[ 2 1 ], Ġapplication Ġ= ĠTest Common s Application :: class ) Ċ @ Looper Mode ( Looper Mode . Mode . PA USED ) Ċ class ĠImage Fragment Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfragment : ĠImage Fragment ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġselector RV Ġ: ĠRecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġloader Ġ: ĠProgress Bar ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlayout Inflater : ĠLayoutInflater ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontext : ĠContext ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel Field : ĠField ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlayout Manager : ĠGrid LayoutManager ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġimage : ĠImage ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠImage Adapter ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠsavedInstanceState : ĠBundle ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSetup Ġthe Ġimage Ġfragment . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp (){ ĊĠĠĠĠĠĠĠ ĠMockito Annotations . init Mocks ( this ) ĊĠĠĠĠĠĠĠ Ġcontext Ġ= ĠRuntime Environment . application . application Context ĊĠĠĠĠĠĠĠ ĠApp Adapter . set ( Test App Adapter ()) ĊĠĠĠĠĠĠĠ ĠSo Loader . set In Test Mode () ĊĠĠĠĠĠĠĠ ĠF resco . initialize ( context ) ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= ĠRo bo lectric . build Activity ( Custom Selector Activity :: class . java ). create (). get () ĊĊĠĠĠĠĠĠĠ Ġfragment Ġ= ĠImage Fragment . newInstance ( 1 , 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġfragment Manager : ĠFragment Manager Ġ= Ġactivity . support FragmentManager ĊĠĠĠĠĠĠĠ Ġval Ġfragment Transaction : ĠFragment Transaction Ġ= Ġfragment Manager . beginTransaction () ĊĠĠĠĠĠĠĠ Ġfragment Transaction . add ( fragment , Ġnull ) ĊĠĠĠĠĠĠĠ Ġfragment Transaction . commit () ĊĊĠĠĠĠĠĠĠ Ġlayout Inflater Ġ= ĠLayoutInflater . from ( activity ) ĊĠĠĠĠĠĠĠ Ġview Ġ= Ġlayout Inflater . inflate ( R . layout . fragment _ custom _ selector , Ġnull , Ġfalse ) Ġas ĠView ĊĠĠĠĠĠĠĠ Ġselector RV Ġ= Ġview . findViewById ( R . id . selector _ rv ) ĊĠĠĠĠĠĠĠ Ġloader Ġ= Ġview . findViewById ( R . id . loader ) ĊĊĠĠĠĠĠĠĠ ĠWhite box . set Internal State ( fragment , Ġ" image Adapter ", Ġadapter ) ĊĠĠĠĠĠĠĠ ĠWhite box . set Internal State ( fragment , Ġ" selector RV ", Ġselector RV Ġ) ĊĠĠĠĠĠĠĠ ĠWhite box . set Internal State ( fragment , Ġ" loader ", Ġloader ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Field Ġ= Ġfragment . java Class . getDeclared Field (" viewModel ") ĊĠĠĠĠĠĠĠ ĠviewModel Field . is Accessible Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest ĠonCreate ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġtest On Create (){ ĊĠĠĠĠĠĠĠ ĠShadow s . shadow Of ( Looper . get Main Looper ()). idle () ĊĠĠĠĠĠĠĠ Ġfragment . onCreate ( savedInstanceState ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest ĠonCreate View ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Throws ( Exception :: class ) ĊĠĠĠ Ġfun Ġtest On Create View () Ġ{ ĊĠĠĠĠĠĠĠ ĠShadow s . shadow Of ( Looper . get Main Looper ()). idle () ĊĠĠĠĠĠĠĠ ĠviewModel Field . set ( fragment , Ġnull ) ĊĠĠĠĠĠĠĠ Ġfragment . onCreate View ( layout Inflater , Ġnull , ĠsavedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġhandle Result . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Handle Result (){ ĊĠĠĠĠĠĠĠ Ġval Ġfunc Ġ= Ġfragment . java Class . getDeclared Method (" handle Result ", ĠResult :: class . java ) ĊĠĠĠĠĠĠĠ Ġfunc . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfunc . invoke ( fragment , ĠResult ( Callback Status . SUCCESS , Ġarray ListOf ())) ĊĠĠĠĠĠĠĠ Ġfunc . invoke ( fragment , ĠResult ( Callback Status . SUCCESS , Ġarray ListOf ( image , image ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġget Span Count . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠtestGet Span Count () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunc Ġ= Ġfragment . java Class . getDeclared Method (" get Span Count ") ĊĠĠĠĠĠĠĠ Ġfunc . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġfunc . invoke ( fragment )) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġon Resume . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest On Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfunc Ġ= Ġfragment . java Class . getDeclared Method (" on Resume ") ĊĠĠĠĠĠĠĠ Ġfunc . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfunc . invoke ( fragment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠTest Ġon Destroy . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest On Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġshadow Of ( get Main Looper ()). idle () ĊĠĠĠĠĠĠĠ Ġselector RV . layout Manager Ġ= Ġlayout Manager ĊĠĠĠĠĠĠĠ Ġwhenever ( layout Manager . findFirst Visible Item Position ()). thenReturn ( 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġfunc Ġ= Ġfragment . java Class . getDeclared Method (" on Destroy ") ĊĠĠĠĠĠĠĠ Ġfunc . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġfunc . invoke ( fragment ) ĊĠĠĠ Ġ} Ċ Ċ }