package Ġcom . ud acity . project 4 Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . Application Ċ import Ġandroidx . test . core . app . Activity Scenario Ċ import Ġandroidx . test . core . app . Application Provider . getApplicationContext Ċ import Ġandroidx . test . espress o . Esp ress o . on View Ċ import Ġandroidx . test . espress o . Id ling Registry Ċ import Ġandroidx . test . espress o . action . View Actions .* Ċ import Ġandroidx . test . espress o . assertion . View Assertions . matches Ċ import Ġandroidx . test . espress o . matcher . Root Matchers . with Decor View Ċ import Ġandroidx . test . espress o . matcher . View Matchers .* Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . filters . Large Test Ċ import Ġcom . ud acity . project 4 . location rem inders . Rem inders Activity Ċ import Ġcom . ud acity . project 4 . location rem inders . data . Reminder DataSource Ċ import Ġcom . ud acity . project 4 . location rem inders . data . local . Local DB Ċ import Ġcom . ud acity . project 4 . location rem inders . data . local . Rem inders Local Repository Ċ import Ġcom . ud acity . project 4 . location rem inders . rem inders list . Rem inders List ViewModel Ċ import Ġcom . ud acity . project 4 . location rem inders . sa ver em inder . Save Reminder ViewModel Ċ import Ġcom . ud acity . project 4 . util . Data Binding Id ling Resource Ċ import Ġcom . ud acity . project 4 . util . monitor Activity Ċ import Ġkotlinx . coroutines . delay Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . hamcrest . Core Matchers .` is ` Ċ import Ġorg . hamcrest . Core Matchers . not Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . k oin . android x . view model . dsl . viewModel Ċ import Ġorg . k oin . core . context . start K oin Ċ import Ġorg . k oin . core . context . stop K oin Ċ import Ġorg . k oin . dsl . module Ċ import Ġorg . k oin . test . Auto Close K oin Test Ċ import Ġorg . k oin . test . get Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ @ Large Test Ċ // ĠEND ĠTO ĠEND Ġtest Ġto Ġblack Ġbox Ġtest Ġthe Ġapp Ċ class ĠRem inders Activity Test Ġ: ĊĠĠĠ ĠAuto Close K oin Test () Ġ{ Ġ// ĠExtended ĠK oin ĠTest Ġ- Ġembed Ġautoc lose Ġ@ after Ġmethod Ġto Ġclose ĠK oin Ġafter Ġevery Ġtest ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrepository : ĠRem inder DataSource ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapp Context : ĠApplication ĊĠĠĠ Ġprivate Ġval Ġdata Binding Id ling Resource Ġ= ĠData Binding Id ling Resource () ĊĊĠĠĠ Ġ// Ġget Ġactivity Ġcontext ĊĠĠĠ Ġprivate Ġfun ĠgetActivity ( activity Scenario : ĠActivity Scenario < Rem inders Activity >): ĠActivity ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġactivity : ĠActivity ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġactivity Scenario . on Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġactivity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAs Ġwe Ġuse ĠK oin Ġas Ġa ĠService ĠLoc ator ĠLibrary Ġto Ġdevelop Ġour Ġcode , Ġwe 'll Ġalso Ġuse ĠK oin Ġto Ġtest Ġour Ġcode . ĊĠĠĠĠ Ġ* Ġat Ġthis Ġstep Ġwe Ġwill Ġinitialize ĠK oin Ġrelated Ġcode Ġto Ġbe Ġable Ġto Ġuse Ġit Ġin Ġout Ġtesting . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġstop K oin () Ġ// Ġstop Ġthe Ġoriginal Ġapp Ġk oin ĊĠĠĠĠĠĠĠ Ġapp Context Ġ= Ġget ApplicationContext () ĊĠĠĠĠĠĠĠ Ġval Ġmy Module Ġ= Ġmodule Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRem inders List ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġas ĠRem inder DataSource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSave Reminder ViewModel ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġas ĠRem inder DataSource ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Ġ{ ĠRem inders Local Repository ( get ()) Ġas ĠRem inder DataSource Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Ġ{ ĠLocal DB . create Rem inders Dao ( app Context ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġdeclare Ġa Ġnew Ġk oin Ġmodule ĊĠĠĠĠĠĠĠ Ġstart K oin Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodules ( listOf ( my Module )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġour Ġreal Ġrepository ĊĠĠĠĠĠĠĠ Ġrepository Ġ= Ġget () ĊĊĠĠĠĠĠĠĠ Ġ// Ġclear Ġthe Ġdata Ġto Ġstart Ġfresh ĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrepository . delete All Rem inders () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġregister Id ling Resource () Ġ{ ĊĠĠĠĠĠĠĠ ĠId ling Registry . getInstance (). register ( data Binding Id ling Resource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġunregister Id ling Resource () Ġ{ ĊĠĠĠĠĠĠĠ ĠId ling Registry . getInstance (). unregister ( data Binding Id ling Resource ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġadd New Reminder _ Reminder List Shows New Reminder And Toast () Ġ= Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠG IV EN Ġ- Ġan Ġempty ĠRem inder List ĊĠĠĠĠĠĠĠ Ġval Ġactivity Scenario Ġ= ĠActivity Scenario . launch ( Rem inders Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġdata Binding Id ling Resource . monitor Activity ( activity Scenario ) ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= ĠgetActivity ( activity Scenario ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWHEN Ġ- Ġnew ĠRem inder Ġadded ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . add Reminder FAB )). perform ( click ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . reminder Title )). perform ( replace Text (" Title ")) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . reminder Description )). perform ( replace Text (" Description ")) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . select Location )). perform ( click ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . select _ map )). perform ( long Click ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . save _ button )). perform ( click ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . save Reminder )). perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN Ġ- ĠRem inder List Ġshows Ġitem Ġand Ġtoast ĊĠĠĠĠĠĠĠ Ġ// ĠToast Check Ġfrom Ġhttps :// knowledge . ud acity . com / questions / 6 6 3 6 4 7 ĊĠĠĠĠĠĠĠ Ġon View ( with Text ( R . string . reminder _ saved )). in Root ( with Decor View ( not (` is `( activity ?. window ?. decor View )))) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmatches ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Displayed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" Title ")). check ( matches ( is Displayed ())) ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 3 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġadd New Reminder Without Location _ Shows Snackbar () Ġ= Ġrun Blocking Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġactivity Scenario Ġ= ĠActivity Scenario . launch ( Rem inders Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġdata Binding Id ling Resource . monitor Activity ( activity Scenario ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠG IV EN Ġ- Ġan ĠSave Reminder ĠScreen Ġwithout ĠSelected ĠLocation ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . add Reminder FAB )). perform ( click ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . reminder Title )). perform ( replace Text (" Title ")) ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . reminder Description )). perform ( replace Text (" Description ")) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWHEN Ġ- Ġclick Ġsave Button ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . save Reminder )). perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN Ġ- Ġshows ĠSn ackbar ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( com . google . android . material . R . id . sn ackbar _ text )). check ( matches ( is Displayed ())) ĊĊĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( 3 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ