package Ġorg . opp ia . app . options Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroid . app . Instrumentation . Activity Result Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . test . core . app . Activity Scenario . launch Ċ import Ġandroidx . test . core . app . Application Provider Ċ import Ġandroidx . test . espress o . Esp ress o . on View Ċ import Ġandroidx . test . espress o . action . View Actions . click Ċ import Ġandroidx . test . espress o . assertion . View Assertions . does NotExist Ċ import Ġandroidx . test . espress o . assertion . View Assertions . matches Ċ import Ġandroidx . test . espress o . contrib . Drawer Matchers Ċ import Ġandroidx . test . espress o . intent . Intent s Ċ import Ġandroidx . test . espress o . matcher . View Matchers . is Comp let ely Displayed Ċ import Ġandroidx . test . espress o . matcher . View Matchers . with Content Description Ċ import Ġandroidx . test . espress o . matcher . View Matchers . with Id Ċ import Ġandroidx . test . espress o . matcher . View Matchers . with Text Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . platform . app . Instrumentation Registry . get Instrumentation Ċ import Ġandroidx . test . rule . Activity Test Rule Ċ import Ġcom . google . firebase . Firebase App Ċ import Ġdagger . Bind s Instance Ċ import Ġdagger . Component Ċ import Ġdagger . Module Ċ import Ġdagger . Provides Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . opp ia . app . R Ċ import Ġorg . opp ia . app . recyclerview . RecyclerView Matcher . Companion . at Position On View Ċ import Ġorg . opp ia . domain . opp ialog ger . Log Storage Module Ċ import Ġorg . opp ia . testing . Test Dispatcher Module Ċ import Ġorg . opp ia . testing . Test Log Reporting Module Ċ import Ġorg . opp ia . testing . profile . Profile TestHelper Ċ import Ġorg . opp ia . util . logging . Enable Console Log Ċ import Ġorg . opp ia . util . logging . Enable File Log Ċ import Ġorg . opp ia . util . logging . Global LogLevel Ċ import Ġorg . opp ia . util . logging . LogLevel Ċ import Ġorg . ro bo lectric . annotation . Looper Mode Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ /** ĠTests Ġfor Ġ[ Options Fragment ]. Ġ*/ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ @ Looper Mode ( Looper Mode . Mode . PA USED ) Ċ class ĠOptions Fragment Test Ġ{ ĊĊĠ Ġ@ Inject ĊĠ Ġlateinit Ġvar Ġprofile TestHelper : ĠProfile TestHelper ĊĊĠ Ġ@ Inject ĊĠ Ġlateinit Ġvar Ġcontext : ĠContext ĊĊĠ Ġ@ Before ĊĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠ ĠInt ents . init () ĊĠĠĠ ĠsetUp Test Application Component () ĊĠĠĠ Ġprofile TestHelper . initialize Profiles () ĊĠĠĠ ĠFirebase App . initialize App ( context ) ĊĠ Ġ} ĊĊĠ Ġ@ After ĊĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠ ĠInt ents . release () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun ĠsetUp Test Application Component () Ġ{ ĊĠĠĠ ĠD agger Options Fragment Test _ Test Application Component . builder () ĊĠĠĠĠĠ Ġ. set Application ( Application Provider . getApplicationContext ()) ĊĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠ Ġ. inject ( this ) ĊĠ Ġ} ĊĊĠ Ġ@ get : Rule ĊĠ Ġvar Ġoption Activity Test Rule : ĠActivity Test Rule < Options Activity > Ġ= ĠActivity Test Rule ( ĊĠĠĠ ĠOptions Activity :: class . java , ĊĠĠĠ Ġ/* Ġinitial Touch Mode = Ġ*/ Ġtrue , ĊĠĠĠ Ġ/* Ġlaunch Activity = Ġ*/ Ġfalse ĊĠ Ġ) ĊĊĠ Ġprivate Ġfun Ġcreate Option Activity Intent ( ĊĠĠĠ Ġinternal Profile Id : ĠInt , ĊĠĠĠ Ġis From Navigation Drawer : ĠBoolean ĊĠ Ġ): ĠIntent Ġ{ ĊĠĠĠ Ġreturn ĠOptions Activity . create Options Activity ( ĊĠĠĠĠĠ ĠApplication Provider . getApplicationContext (), ĊĠĠĠĠĠ Ġinternal Profile Id , ĊĠĠĠĠĠ Ġis From Navigation Drawer ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Options Fragment _ parent Is Ex ploration _ check Back Arrow Not Visible () Ġ{ ĊĠĠĠ Ġlaunch < Options Activity >( create Option Activity Intent ( 0 , Ġfalse )). use Ġ{ ĊĠĠĠĠĠ Ġon View ( with Content Description ( R . string . abc _ action _ bar _ up _ description )) ĊĠĠĠĠĠĠĠ Ġ. check ( matches ( is Comp let ely Displayed ())) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Options Fragment _ parent IsNot Ex ploration _ check Back Arrow Not Visible () Ġ{ ĊĠĠĠ Ġlaunch < Options Activity >( create Option Activity Intent ( 0 , Ġtrue )). use Ġ{ ĊĠĠĠĠĠ Ġon View ( with Content Description ( R . string . abc _ action _ bar _ up _ description )) ĊĠĠĠĠĠĠĠ Ġ. check ( does NotExist ()) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Option Fragment _ click Navigation Drawer H amburger _ navigation Drawer Is Opened Successfully () Ġ{ ĊĠĠĠ Ġlaunch < Options Activity >( create Option Activity Intent ( 0 , Ġtrue )). use Ġ{ ĊĠĠĠĠĠ Ġon View ( with Content Description ( R . string . drawer _ open _ content _ description )). check ( ĊĠĠĠĠĠĠĠ Ġmatches ( is Comp let ely Displayed ()) ĊĠĠĠĠĠ Ġ). perform ( click ()) ĊĠĠĠĠĠ Ġon View ( with Id ( R . id . options _ fragment _ placeholder )) ĊĠĠĠĠĠĠĠ Ġ. check ( matches ( is Comp let ely Displayed ())) ĊĠĠĠĠĠ Ġon View ( with Id ( R . id . options _ activity _ drawer _ layout )). check ( matches ( Drawer Matchers . isOpen ())) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Options Fragment _ reading Text Size _ test On Activity Result () Ġ{ ĊĠĠĠ Ġlaunch < Options Activity >( create Option Activity Intent ( 0 , Ġtrue )). use Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Data Intent Ġ= ĠIntent () ĊĠĠĠĠĠ Ġresult Data Intent . putExtra ( KEY _ MESSAGE _ READ ING _ TEXT _ SIZE , Ġ" Large ") ĊĠĠĠĠĠ Ġval Ġactivity Result Ġ= ĠActivity Result ( Activity . RESULT _ OK , Ġresult Data Intent ) ĊĊĠĠĠĠĠ Ġval Ġactivity Monitor Ġ= Ġget Instrumentation (). add Monitor ( ĊĠĠĠĠĠĠĠ ĠReading Text Size Activity :: class . java . name , ĊĠĠĠĠĠĠĠ Ġactivity Result , ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġit . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠ Ġcreate Reading Text Size Activity Intent (" Small "), ĊĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ TEXT _ SIZE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġget Instrumentation (). waitFor Monitor WithTimeout ( activity Monitor , Ġ 3 ) ĊĊĠĠĠĠĠ Ġon View ( ĊĠĠĠĠĠĠĠ Ġat Position On View ( ĊĠĠĠĠĠĠĠĠĠ ĠR . id . options _ recyclerview , ĊĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠ ĠR . id . reading _ text _ size _ text _ view ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ). check ( ĊĠĠĠĠĠĠĠ Ġmatches ( with Text (" Large ")) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Options Fragment _ audio Language _ test On Activity Result () Ġ{ ĊĠĠĠ Ġlaunch < Options Activity >( create Option Activity Intent ( 0 , Ġtrue )). use Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Data Intent Ġ= ĠIntent () ĊĠĠĠĠĠ Ġresult Data Intent . putExtra ( KEY _ MESSAGE _ AUDIO _ LANGUAGE , Ġ" F rench ") ĊĠĠĠĠĠ Ġval Ġactivity Result Ġ= ĠActivity Result ( Activity . RESULT _ OK , Ġresult Data Intent ) ĊĊĠĠĠĠĠ Ġval Ġactivity Monitor Ġ= Ġget Instrumentation (). add Monitor ( ĊĠĠĠĠĠĠĠ ĠDefault Audio Activity :: class . java . name , ĊĠĠĠĠĠĠĠ Ġactivity Result , ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġit . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠ Ġcreate Default Audio Activity Intent (" H indi "), ĊĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ AUDIO _ LANGUAGE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġget Instrumentation (). waitFor Monitor WithTimeout ( activity Monitor , Ġ 3 ) ĊĊĠĠĠĠĠ Ġon View ( ĊĠĠĠĠĠĠĠ Ġat Position On View ( ĊĠĠĠĠĠĠĠĠĠ ĠR . id . options _ recyclerview , ĊĠĠĠĠĠĠĠĠĠĠ 2 , ĊĠĠĠĠĠĠĠĠĠ ĠR . id . audio _ language _ text _ view ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ). check ( ĊĠĠĠĠĠĠĠ Ġmatches ( with Text (" F rench ")) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġ@ Test ĊĠ Ġfun Ġtest Options Fragment _ app Language _ test On Activity Result () Ġ{ ĊĠĠĠ Ġlaunch < Options Activity >( create Option Activity Intent ( 0 , Ġtrue )). use Ġ{ ĊĠĠĠĠĠ Ġval Ġresult Data Intent Ġ= ĠIntent () ĊĠĠĠĠĠ Ġresult Data Intent . putExtra ( KEY _ MESSAGE _ APP _ LANGUAGE , Ġ" F rench ") ĊĠĠĠĠĠ Ġval Ġactivity Result Ġ= ĠActivity Result ( Activity . RESULT _ OK , Ġresult Data Intent ) ĊĊĠĠĠĠĠ Ġval Ġactivity Monitor Ġ= Ġget Instrumentation (). add Monitor ( ĊĠĠĠĠĠĠĠ ĠApp Language Activity :: class . java . name , ĊĠĠĠĠĠĠĠ Ġactivity Result , ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠ Ġit . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( ĊĠĠĠĠĠĠĠĠĠ Ġcreate App Language Activity Intent (" English "), ĊĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ APP _ LANGUAGE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġget Instrumentation (). waitFor Monitor WithTimeout ( activity Monitor , Ġ 3 ) ĊĊĠĠĠĠĠ Ġon View ( ĊĠĠĠĠĠĠĠ Ġat Position On View ( ĊĠĠĠĠĠĠĠĠĠ ĠR . id . options _ recyclerview , ĊĠĠĠĠĠĠĠĠĠĠ 1 , ĠR . id . app _ language _ text _ view ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ Ġ). check ( ĊĠĠĠĠĠĠĠ Ġmatches ( with Text (" F rench ")) ĊĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Reading Text Size Activity Intent ( summary Value : ĠString ): ĠIntent Ġ{ ĊĠĠĠ Ġreturn ĠReading Text Size Activity . create Reading Text Size Activity Intent ( ĊĠĠĠĠĠ ĠApplication Provider . getApplicationContext (), ĊĠĠĠĠĠ ĠREAD ING _ TEXT _ SIZE , ĊĠĠĠĠĠ Ġsummary Value ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate App Language Activity Intent ( summary Value : ĠString ): ĠIntent Ġ{ ĊĠĠĠ Ġreturn ĠApp Language Activity . create App Language Activity Intent ( ĊĠĠĠĠĠ ĠApplication Provider . getApplicationContext (), ĊĠĠĠĠĠ ĠAPP _ LANGUAGE , ĊĠĠĠĠĠ Ġsummary Value ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Default Audio Activity Intent ( summary Value : ĠString ): ĠIntent Ġ{ ĊĠĠĠ Ġreturn ĠDefault Audio Activity . create Default Audio Activity Intent ( ĊĠĠĠĠĠ ĠApplication Provider . getApplicationContext (), ĊĠĠĠĠĠ ĠA UDIO _ LANGUAGE , ĊĠĠĠĠĠ Ġsummary Value ĊĠĠĠ Ġ) ĊĠ Ġ} ĊĊĠ Ġ@ Module ĊĠ Ġclass ĠTest Module Ġ{ ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġ@ Singleton ĊĠĠĠ Ġfun Ġprovide Context ( application : ĠApplication ): ĠContext Ġ{ ĊĠĠĠĠĠ Ġreturn Ġapplication ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTODO (# 5 9 ): ĠEither Ġisolate Ġthese Ġto Ġtheir Ġown Ġshared Ġtest Ġmodule , Ġor Ġuse Ġthe Ġreal Ġlogging ĊĠĠĠ Ġ// Ġmodule Ġin Ġtests Ġto Ġavoid Ġneeding Ġto Ġspecify Ġthese Ġsettings Ġfor Ġtests . ĊĠĠĠ Ġ@ Enable Console Log ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Enable Console Log (): ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġ@ Enable File Log ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Enable File Log (): ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġ@ Global LogLevel ĊĠĠĠ Ġ@ Provides ĊĠĠĠ Ġfun Ġprovide Global LogLevel (): ĠLogLevel Ġ= ĠLogLevel . VERBOSE ĊĠ Ġ} ĊĊĠ Ġ@ Singleton ĊĠ Ġ@ Component ( ĊĠĠĠ Ġmodules Ġ= Ġ[ ĊĠĠĠĠĠ ĠTest Module :: class , ĠTest Log Reporting Module :: class , ĠLog Storage Module :: class , ĊĠĠĠĠĠ ĠTest Dispatcher Module :: class ĊĠĠĠ Ġ] ĊĠ Ġ) ĊĠ Ġinterface ĠTest Application Component Ġ{ ĊĠĠĠ Ġ@ Component . Builder ĊĠĠĠ Ġinterface ĠBuilder Ġ{ ĊĠĠĠĠĠ Ġ@ Bind s Instance ĊĠĠĠĠĠ Ġfun Ġset Application ( application : ĠApplication ): ĠBuilder ĊĊĠĠĠĠĠ Ġfun Ġbuild (): ĠTest Application Component ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinject ( options Fragment Test : ĠOptions Fragment Test ) ĊĠ Ġ} Ċ } Ċ