/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 1 Ġj im 1 0 8 dev Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 9 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . github . j im 1 0 8 dev . simple _ task _ count . tasks Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . fragment . app . testing . launch Fragment In Container Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . Navigation Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . test . core . app . Activity Scenario Ċ import Ġandroidx . test . core . app . Activity Scenario . launch Ċ import Ġandroidx . test . core . app . Application Provider . getApplicationContext Ċ import Ġandroidx . test . espress o . Esp ress o . on View Ċ import Ġandroidx . test . espress o . Esp ress o . open ActionBar Overflow Or Options Menu Ċ 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 . matcher . View Matchers . has Sibling Ċ import Ġandroidx . test . espress o . matcher . View Matchers . is Displayed Ċ 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 . filters . Medium Test Ċ import Ġcom . github . j im 1 0 8 dev . simple _ task _ count . R Ċ import Ġcom . github . j im 1 0 8 dev . simple _ task _ count . Service Locator Ċ import Ġcom . github . j im 1 0 8 dev . simple _ task _ count . data . Task Ċ import Ġcom . github . j im 1 0 8 dev . simple _ task _ count . data . source . Fake Repository Ċ import Ġcom . github . j im 1 0 8 dev . simple _ task _ count . data . source . Tasks Repository Ċ import Ġcom . github . j im 1 0 8 dev . simple _ task _ count . util . Date Util Ċ import Ġcom . github . j im 1 0 8 dev . simple _ task _ count . util . save Task Blocking Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġkotlinx . coroutines . test . run Blocking Test Ċ import Ġorg . hamcrest . Core Matchers . all Of Ċ import Ġorg . hamcrest . Matcher Ċ import Ġorg . hamcrest . core . IsNot . not Ċ import Ġorg . junit . After Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . mockito . Mockito . mock Ċ import Ġorg . mockito . Mockito . verify Ċ import Ġorg . ro bo lectric . annotation . Looper Mode Ċ import Ġorg . ro bo lectric . annotation . Text Layout Mode Ċ Ċ /** Ċ Ġ* ĠIntegration Ġtest Ġfor Ġthe ĠTask ĠList Ġscreen . Ċ Ġ*/ Ċ // ĠTODO Ġ- ĠUse ĠFragment Scenario , Ġsee : Ġhttps :// github . com / android / android - test / issues / 2 9 1 Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ @ Medium Test Ċ @ Looper Mode ( Looper Mode . Mode . PA USED ) Ċ @ Text Layout Mode ( Text Layout Mode . Mode . RE ALIST IC ) Ċ @ Experimental Cor outines Api Ċ class ĠTasks Fragment Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrepository : ĠTasks Repository ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġinit Repository () Ġ{ ĊĠĠĠĠĠĠĠ Ġrepository Ġ= ĠFake Repository () ĊĠĠĠĠĠĠĠ ĠService Locator . tasks Repository Ġ= Ġrepository ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After ĊĠĠĠ Ġfun Ġcleanup Db () Ġ= Ġrun Blocking Test Ġ{ ĊĠĠĠĠĠĠĠ ĠService Locator . reset Repository () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdisplay Task _ when Repository Has Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠG IV EN Ġ- ĠOne Ġtask Ġalready Ġin Ġthe Ġrepository ĊĠĠĠĠĠĠĠ Ġrepository . save Task Blocking ( Task ( Date Util . convert StringTo Date (" 0 2 / 0 1 / 2 1 "), " title ", Ġ 1 5 )) ĊĊĠĠĠĠĠĠĠ Ġ// ĠWHEN Ġ- ĠOn Ġstartup ĊĠĠĠĠĠĠĠ Ġlaunch Activity () ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN Ġ- ĠVerify Ġtask Ġis Ġdisplayed Ġon Ġscreen ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" title ")). check ( matches ( is Displayed ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġno Tasks _ All Tasks Filter _ Add Task View Visible () Ġ{ ĊĠĠĠĠĠĠĠ Ġlaunch Activity () ĊĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . menu _ filter )). perform ( click ()) ĊĠĠĠĠĠĠĠ Ġon View ( with Text ( R . string . nav _ all )). perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠVerify Ġthe Ġ" You Ġhave Ġno Ġtasks !" Ġtext Ġis Ġshown ĊĠĠĠĠĠĠĠ Ġon View ( with Text (" You Ġhave Ġno Ġtasks ! ")). check ( matches ( is Displayed ())) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġclick Add Task Button _ navigate ToAdd Edit Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠG IV EN Ġ- ĠOn Ġthe Ġhome Ġscreen ĊĠĠĠĠĠĠĠ Ġval Ġscenario Ġ= Ġlaunch Fragment In Container < Tasks Fragment >( Bundle (), ĠR . style . App Theme ) ĊĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= Ġmock ( Nav Controller :: class . java ) ĊĠĠĠĠĠĠĠ Ġscenario . on Fragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation . setView Nav Controller ( it . view !! , Ġnav Controller ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWHEN Ġ- ĠClick Ġon Ġthe Ġ" +" Ġbutton ĊĠĠĠĠĠĠĠ Ġon View ( with Id ( R . id . add _ task _ fab )). perform ( click ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠTHEN Ġ- ĠVerify Ġthat Ġwe Ġnavigate Ġto Ġthe Ġadd Ġscreen ĊĠĠĠĠĠĠĠ Ġverify ( nav Controller ). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTasks Fragment Directions . action Tasks Fragment ToAdd Edit Task Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , Ġget ApplicationContext < Context >(). getString ( R . string . add _ task ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlaunch Activity (): ĠActivity Scenario < Tasks Activity >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Scenario Ġ= Ġlaunch ( Tasks Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġactivity Scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisable Ġanimations Ġin ĠRecyclerView ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity . findViewById ( R . id . tasks _ list ) Ġas ĠRecyclerView ). item Animator Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġactivity Scenario ĊĠĠĠ Ġ} Ċ Ċ } Ċ