package Ġcom . ser ge y rod in . matches boxes . bag . added it delete Ċ Ċ import Ġandroidx . arch . core . executor . testing . Instant Task Executor Rule Ċ import Ġandroidx . compose . ui . test .* Ċ import Ġandroidx . compose . ui . test . junit 4 . create Android Compose Rule Ċ import Ġcom . google . ac comp an ist . appcompat theme . AppCompatTheme Ċ import Ġcom . ser ge y rod in . matches boxes .* Ċ import Ġcom . ser ge y rod in . matches boxes . R Ċ Ċ import Ġcom . ser ge y rod in . matches boxes . data . Bag Ċ import Ġcom . ser ge y rod in . matches boxes . data . Fake DataSource Ċ import Ġcom . ser ge y rod in . matches boxes . di . Radio Components DataSource Module Ċ import Ġcom . ser ge y rod in . matches boxes . name text field . NAME _ TEXT _ FIELD _ TAG Ċ import Ġdagger . h ilt . android . testing . H ilt Android Rule Ċ import Ġdagger . h ilt . android . testing . H ilt Android Test Ċ import Ġdagger . h ilt . android . testing . Un install Modules Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . hamcrest . Core Matchers .` is ` Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġjavax . inject . Inject Ċ Ċ @ H ilt Android Test Ċ @ Un install Modules ( Radio Components DataSource Module :: class ) Ċ class ĠBag Name Screen Test Ġ{ ĊĠĠĠ Ġ@ get : Rule ( order Ġ= Ġ 1 ) ĊĠĠĠ Ġval Ġh ilt Rule Ġ= ĠH ilt Android Rule ( this ) ĊĊĠĠĠ Ġ@ get : Rule ( order Ġ= Ġ 2 ) ĊĠĠĠ Ġval Ġcompose Test Rule Ġ= Ġcreate Android Compose Rule < MainActivity >() ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġvar Ġinstant Executor Rule Ġ= ĠInstant Task Executor Rule () ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar ĠdataSource : ĠFake DataSource ĊĊĠĠĠ Ġ@ Before ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠĊĠĠĠ Ġfun Ġinit DataSource () Ġ{ ĊĠĠĠĠĠĠĠ Ġh ilt Rule . inject () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġadd Bag _ hint Displayed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= ĠBag Manip ulator ViewModel ( dataSource ) ĊĠĠĠĠĠĠĠ ĠviewModel . start ( ADD _ NEW _ ITEM _ ID ) ĊĊĠĠĠĠĠĠĠ Ġcompose Test Rule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Theme Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBag Name Screen ( viewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompose Test Rule . on Node With Text Resource ( R . string . enter _ bag _ name ). assertIs Displayed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġedit Bag _ name Displayed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbag Ġ= ĠBag ( 1 , Ġ" Bag ") ĊĠĠĠĠĠĠĠ ĠdataSource . add B ags ( bag ) ĊĊĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= ĠBag Manip ulator ViewModel ( dataSource ) ĊĠĠĠĠĠĠĠ ĠviewModel . start ( bag . id ) ĊĊĠĠĠĠĠĠĠ Ġcompose Test Rule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Theme Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBag Name Screen ( viewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompose Test Rule . on Node With Text ( bag . name ). assertIs Displayed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġedit Bag _ new Name Displayed () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdated Bag Name Ġ= Ġ" Bag Ġupdated " ĊĊĠĠĠĠĠĠĠ Ġval Ġbag Ġ= ĠBag ( 1 , Ġ" Bag ") ĊĠĠĠĠĠĠĠ ĠdataSource . add B ags ( bag ) ĊĊĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= ĠBag Manip ulator ViewModel ( dataSource ) ĊĠĠĠĠĠĠĠ ĠviewModel . start ( bag . id ) ĊĊĠĠĠĠĠĠĠ Ġcompose Test Rule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Theme Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBag Name Screen ( viewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompose Test Rule . on Node With Text ( bag . name ). perform Text Replacement ( updated Bag Name ) ĊĊĠĠĠĠĠĠĠ Ġcompose Test Rule . on Node With Text ( updated Bag Name ). assertIs Displayed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġedit Bag _ name Equals () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdated Bag Name Ġ= Ġ" Bag Ġupdated " ĊĠĠĠĠĠĠĠ Ġval Ġbag Ġ= ĠBag ( 1 , Ġ" Bag ") ĊĠĠĠĠĠĠĠ ĠdataSource . add B ags ( bag ) ĊĊĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= ĠBag Manip ulator ViewModel ( dataSource ) ĊĠĠĠĠĠĠĠ ĠviewModel . start ( bag . id ) ĊĊĠĠĠĠĠĠĠ Ġcompose Test Rule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Theme Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBag Name Screen ( viewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompose Test Rule . on Node With Text ( bag . name ). perform Text Replacement ( updated Bag Name ) ĊĠĠĠĠĠĠĠ Ġcompose Test Rule . on Node With Content Description Resource ( R . string . save _ name ). perform Click () ĊĊĠĠĠĠĠĠĠ Ġval Ġupdated Bag Ġ= Ġrun Blocking Ġ{ ĠdataSource . getB ags ()[ 0 ] Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( updated Bag . name , Ġ` is `( updated Bag Name )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġadd Bag _ name Equals () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Bag Name Ġ= Ġ" New Ġbag " ĊĠĠĠĠĠĠĠ Ġval ĠviewModel Ġ= ĠBag Manip ulator ViewModel ( dataSource ) ĊĠĠĠĠĠĠĠ ĠviewModel . start ( ADD _ NEW _ ITEM _ ID ) ĊĊĠĠĠĠĠĠĠ Ġcompose Test Rule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAppCompat Theme Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBag Name Screen ( viewModel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcompose Test Rule . on Node With Tag ( NAME _ TEXT _ FIELD _ TAG ). perform TextInput ( new Bag Name ) ĊĠĠĠĠĠĠĠ Ġcompose Test Rule . on Node With Content Description Resource ( R . string . save _ name ). perform Click () ĊĊĠĠĠĠĠĠĠ Ġval Ġbag Ġ= Ġrun Blocking Ġ{ ĠdataSource . getB ags ()[ 0 ] Ġ} ĊĠĠĠĠĠĠĠ ĠassertThat ( bag . name , Ġ` is `( new Bag Name )) ĊĠĠĠ Ġ} Ċ } Ċ