package Ġorg . od k . collect . android . projects Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . core . view . children Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . test . espress o . Esp ress o . on View Ċ import Ġandroidx . test . espress o . action . View Actions . press Back Ċ import Ġandroidx . test . espress o . intent . Intent s Ċ import Ġandroidx . test . espress o . intent . matcher . Intent Matchers . has Component Ċ import Ġandroidx . test . espress o . matcher . View Matchers . assertThat Ċ import Ġandroidx . test . espress o . matcher . View Matchers . is Root Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġcom . google . gson . Gson Ċ import Ġorg . hamcrest . Core Matchers .` is ` Ċ import Ġorg . hamcrest . Core Matchers . null Value Ċ import Ġorg . hamcrest . Matchers . notNull Value Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . kotlin . do Return Ċ import Ġorg . mockito . kotlin . mock Ċ import Ġorg . mockito . kotlin . verify Ċ import Ġorg . mockito . kotlin . wh enever Ċ import Ġorg . od k . collect . android . activities . About Activity Ċ import Ġorg . od k . collect . android . activities . view models . Current Project ViewModel Ċ import Ġorg . od k . collect . android . fragments . dialogs . Progress Dialog Fragment Ċ import Ġorg . od k . collect . android . injection . config . App Dependency Module Ċ import Ġorg . od k . collect . android . preferences . dialogs . Admin Password Dialog Fragment Ċ import Ġorg . od k . collect . android . preferences . screens . Admin Preferences Activity Ċ import Ġorg . od k . collect . android . preferences . screens . General Preferences Activity Ċ import Ġorg . od k . collect . android . preferences . source . Settings Provider Ċ import Ġorg . od k . collect . android . support . Collect Helpers Ċ import Ġorg . od k . collect . android . utilities . Admin Password Provider Ċ import Ġorg . od k . collect . android shared . li ved ata . Mutable NonNull LiveData Ċ import Ġorg . od k . collect . fragment st est . Dialog Fragment Test Ċ import Ġorg . od k . collect . projects . In Mem Projects Repository Ċ import Ġorg . od k . collect . projects . Project Ċ import Ġorg . od k . collect . projects . Projects Repository Ċ import Ġorg . od k . collect . shared . strings . UUID Generator Ċ import Ġorg . od k . collect . test shared . Ro bo lectric Helpers Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠProject Settings Dialog Test Ġ{ ĊĊĠĠĠ Ġval Ġcurrent Project ViewModel : ĠCurrent Project ViewModel Ġ= Ġmock Ġ{ ĊĠĠĠĠĠĠĠ Ġon Ġ{ Ġcurrent Project Ġ} Ġdo Return ĠMutable NonNull LiveData ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠProject . Saved ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" x ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Project ĠX ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" X ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"# ffffff " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġprojects Repository Ġ= ĠIn Mem Projects Repository ( UUID Generator ()) ĊĊĠĠĠ Ġval Ġadmin Password Provider : ĠAdmin Password Provider Ġ= Ġmock Ġ{} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ ĠCollect Helpers . override App Dependency Module ( object Ġ: ĠApp Dependency Module () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprovides Current Project ViewModel ( current Project Provider : ĠCurrent Project Provider ): ĠCurrent Project ViewModel . Factory Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġobject Ġ: ĠCurrent Project ViewModel . Factory ( current Project Provider ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T Ġ: ĠViewModel ?> Ġcreate ( model Class : ĠClass < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcurrent Project ViewModel Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprovides Projects Repository ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Generator : ĠUUID Generator ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgson : ĠGson ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Provider : ĠSettings Provider ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ): ĠProjects Repository Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprojects Repository ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġprovides Admin Password Provider ( settings Provider : ĠSettings Provider ?): ĠAdmin Password Provider Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġadmin Password Provider ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` The Ġdialog Ġshould Ġbe Ġdis missed Ġafter Ġclicking Ġon Ġthe Ġ' X ' Ġbutton `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscenario Ġ= ĠDialog Fragment Test . launch Dialog Fragment ( Project Settings Dialog :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġscenario . on Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . dialog !!. is Showing , Ġ` is `( true )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . binding . close Icon . perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRo bo lectric Helpers . run Looper () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . dialog , Ġ` is `( null Value ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` The Ġdialog Ġshould Ġbe Ġdis missed Ġafter Ġclicking Ġon Ġa Ġdevice Ġback Ġbutton `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscenario Ġ= ĠDialog Fragment Test . launch Dialog Fragment ( Project Settings Dialog :: class . java ) ĊĠĠĠĠĠĠĠ Ġscenario . on Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . dialog !!. is Showing , Ġ` is `( true )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon View ( is Root ()). perform ( press Back ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRo bo lectric Helpers . run Looper () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . dialog , Ġ` is `( null Value ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` General Ġsettings Ġshould Ġbe Ġstarted Ġafter Ġclicking Ġon Ġthe Ġ' General ĠSettings ' Ġbutton `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscenario Ġ= ĠDialog Fragment Test . launch Dialog Fragment ( Project Settings Dialog :: class . java ) ĊĠĠĠĠĠĠĠ Ġscenario . on Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . init () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . dialog !!. is Showing , Ġ` is `( true )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . binding . general Settings Button . perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRo bo lectric Helpers . run Looper () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . dialog , Ġ` is `( null Value ())) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . get Intent s ()[ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Component ( General Preferences Activity :: class . java . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Admin Ġsettings Ġshould Ġbe Ġstarted Ġafter Ġclicking Ġon Ġthe Ġ' Admin ĠSettings ' Ġbutton `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscenario Ġ= ĠDialog Fragment Test . launch Dialog Fragment ( Project Settings Dialog :: class . java ) ĊĠĠĠĠĠĠĠ Ġscenario . on Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . init () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . dialog !!. is Showing , Ġ` is `( true )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . binding . admin Settings Button . perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRo bo lectric Helpers . run Looper () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . dialog , Ġ` is `( null Value ())) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . get Intent s ()[ 0 ], ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Component ( Admin Preferences Activity :: class . java . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` A Ġuser Ġshould Ġbe Ġasked Ġfor Ġpassword Ġif Ġset Ġwhen Ġopening ĠAdmin Ġsettings `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠBundle () ĊĠĠĠĠĠĠĠ Ġargs . put Boolean ( Progress Dialog Fragment . CANCEL ABLE , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġwhenever ( admin Password Provider . isAdmin Password Set ). thenReturn ( true ) ĊĊĠĠĠĠĠĠĠ Ġval Ġscenario Ġ= ĠDialog Fragment Test . launch Dialog Fragment ( Project Settings Dialog :: class . java ) ĊĠĠĠĠĠĠĠ Ġscenario . on Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . binding . admin Settings Button . perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . activity !!. support FragmentManager . find Fragment By Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAdmin Password Dialog Fragment :: class . java . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` is `( notNull Value ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` About Ġsection Ġshould Ġbe Ġstarted Ġafter Ġclicking Ġon Ġthe Ġ' About ' Ġbutton `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscenario Ġ= ĠDialog Fragment Test . launch Dialog Fragment ( Project Settings Dialog :: class . java ) ĊĠĠĠĠĠĠĠ Ġscenario . on Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . init () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . dialog !!. is Showing , Ġ` is `( true )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . binding . about Button . perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRo bo lectric Helpers . run Looper () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( it . dialog , Ġ` is `( null Value ())) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( Intent s . get Intent s ()[ 0 ], Ġhas Component ( About Activity :: class . java . name )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInt ents . release () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Qr Code Project Creator Dialog Ġshould Ġbe Ġdisplayed Ġafter Ġclicking Ġon Ġthe Ġ' Add Ġproject ' Ġbutton `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġscenario Ġ= ĠDialog Fragment Test . launch Dialog Fragment ( Project Settings Dialog :: class . java ) ĊĠĠĠĠĠĠĠ Ġscenario . on Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . binding . add Project Button . perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . activity !!. support FragmentManager . find Fragment By Tag ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQ r Code Project Creator Dialog :: class . java . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ` is `( notNull Value ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` current Project ViewModel Ġshould Ġbe Ġnotified Ġwhen Ġproject Ġswitched `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġproject Y Ġ= Ġprojects Repository . save ( Project . New (" Project ĠY ", Ġ" Y ", Ġ"# ffffff ")) ĊĊĠĠĠĠĠĠĠ Ġval Ġscenario Ġ= ĠDialog Fragment Test . launch Dialog Fragment ( Project Settings Dialog :: class . java ) ĊĠĠĠĠĠĠĠ Ġscenario . on Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . binding . project List . children . iterator (). as Sequence (). first (). perform Click () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( current Project ViewModel ). setCurrent Project ( project Y ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ