/* Ċ Ġ* ĠCopyright Ġ 2 0 1 6 ĠN ie k ĠH aar man Ċ Ġ* Ċ Ġ* Ġ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 . n ha ar man . tri ad Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġcom . n ha ar man . expect . expect Ċ import Ġcom . n ha ar man . mockito _ kotlin .* Ċ import Ġcom . n ha ar man . tri ad . Tri ad . Callback Ċ import Ġorg . hamcrest . Core Matchers .` is ` Ċ import Ġorg . hamcrest . Matcher Assert . assertThat Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Test Ċ import Ġorg . mockito . In Order Ċ import Ġorg . mockito . Mock Ċ import Ġorg . mockito . Mockito . do Answer Ċ import Ġorg . mockito . Mockito Annotations . init Mocks Ċ Ċ class ĠTri ad Test Ġ{ ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Listener : ĠTri ad . Listener < Any > ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Screen 1 : ĠScreen < Any > ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Screen 2 : ĠScreen < Any > ĊĊĠĠĠ Ġ@ Mock ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Screen 3 : ĠScreen < Any > ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġin Order : ĠIn Order ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Mocks ( this ) ĊĠĠĠĠĠĠĠ Ġin Order Ġ= Ġin Order ( m Listener ) ĊĊĠĠĠĠĠĠĠ Ġdo Answer Ġ{ Ġinvocation On Mock Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġinvocation On Mock . arguments [ 2 ] Ġas ĠCallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onComplete () ĊĠĠĠĠĠĠĠ Ġ}. ` when `( m Listener ). forward ( any (), Ġany OrNull (), Ġany ()) ĊĊĠĠĠĠĠĠĠ Ġdo Answer Ġ{ Ġinvocation On Mock Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġinvocation On Mock . arguments [ 2 ] Ġas ĠCallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onComplete () ĊĠĠĠĠĠĠĠ Ġ}. ` when `( m Listener ). backward ( any (), Ġany OrNull (), Ġany ()) ĊĊĊĠĠĠĠĠĠĠ Ġdo Answer Ġ{ Ġinvocation On Mock Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcallback Ġ= Ġinvocation On Mock . arguments [ 2 ] Ġas ĠCallback ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . onComplete () ĊĠĠĠĠĠĠĠ Ġ}. ` when `( m Listener ). replace ( any (), Ġany OrNull (), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalStateException :: class ) ĊĠĠĠ Ġfun Ġstart With _ without Listener _ throws IllegalStateException () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . empty Instance () ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . start With ( mock < Screen <* >> ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstart With _ first Time _ forward sTo Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . empty Instance () ĊĠĠĠĠĠĠĠ Ġtri ad . set Listener ( m Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . start With ( m Screen 1 ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 1 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). forward ( eq ( m Screen 1 ), Ġany OrNull (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstart With _ second Time _ does Not Move Forward () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . empty Instance () ĊĠĠĠĠĠĠĠ Ġtri ad . set Listener ( m Listener ) ĊĠĠĠĠĠĠĠ Ġtri ad . start With ( m Screen 1 ) ĊĠĠĠĠĠĠĠ Ġverify ( m Listener ). screen P ushed ( m Screen 1 ) ĊĠĠĠĠĠĠĠ Ġverify ( m Listener ). forward ( eq ( m Screen 1 ), Ġany OrNull (), Ġany ()) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . start With ( m Screen 1 ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( m Listener ) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstart With _ with A Valid Back stack _ does Not Move Forward () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . single ( m Screen 1 ), Ġm Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . start With ( m Screen 1 ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( m Listener ) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġstart With Back stack _ moves Forward () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . empty Instance () ĊĠĠĠĠĠĠĠ Ġtri ad . set Listener ( m Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . start With ( Back stack . of ( m Screen 1 , Ġm Screen 2 )) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 1 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). forward ( eq ( m Screen 2 ), Ġany OrNull (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 1 , Ġm Screen 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalStateException :: class ) ĊĠĠĠ Ġfun Ġgo To _ without Having AB ack stack _ throws IllegalStateException () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . empty Instance () ĊĠĠĠĠĠĠĠ Ġtri ad . set Listener ( m Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . goTo ( m Screen 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgo To _ with A Valid Back stack _ forward sTo Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . empty Instance () ĊĠĠĠĠĠĠĠ Ġtri ad . set Listener ( m Listener ) ĊĠĠĠĠĠĠĠ Ġtri ad . start With ( m Screen 1 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 1 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). forward ( eq ( m Screen 1 ), Ġany OrNull (), Ġany ()) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . goTo ( m Screen 2 ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). forward ( eq ( m Screen 2 ), Ġany OrNull (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 1 , Ġm Screen 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalStateException :: class ) ĊĠĠĠ Ġfun Ġpop To _ with An Empty Back stack _ throws IllegalStateException () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . empty Instance () ĊĠĠĠĠĠĠĠ Ġtri ad . set Listener ( m Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . pop To ( m Screen 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpop To _ with Screen Not On Back stack _ forward sTo Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . empty Instance () ĊĠĠĠĠĠĠĠ Ġtri ad . set Listener ( m Listener ) ĊĠĠĠĠĠĠĠ Ġtri ad . start With ( m Screen 1 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 1 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). forward ( eq ( m Screen 1 ), Ġany OrNull (), Ġany ()) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . pop To ( m Screen 2 ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). forward ( eq ( m Screen 2 ), Ġany OrNull (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 1 , Ġm Screen 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpop To _ with Screen On Back stack _ back wards To Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . of ( m Screen 1 , Ġm Screen 2 ), Ġm Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . pop To ( m Screen 1 ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen Pop ped ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). backward ( eq ( m Screen 1 ), Ġany OrNull (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpop To _ with Multiple Scre ens On Back stack _ back wards To Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . of ( m Screen 1 , Ġm Screen 2 , Ġm Screen 3 ), Ġm Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . pop To ( m Screen 1 ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen Pop ped ( m Screen 3 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen Pop ped ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). backward ( eq ( m Screen 1 ), Ġany OrNull (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpop To _ with Screen On Top _ does Nothing () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . single ( m Screen 1 ), Ġm Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . pop To ( m Screen 1 ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġverify No More Interactions ( m Listener ) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalStateException :: class ) ĊĠĠĠ Ġfun Ġreplace With _ with An Empty Back stack _ throws IllegalStateException () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . empty Instance () ĊĠĠĠĠĠĠĠ Ġtri ad . set Listener ( m Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . replace With ( m Screen 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace With _ with A Valid Back stack _ re places Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . single ( m Screen 1 ), Ġm Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . replace With ( m Screen 2 ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġverify ( m Listener ). screen Pop ped ( m Screen 1 ) ĊĠĠĠĠĠĠĠ Ġverify ( m Listener ). screen P ushed ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġverify ( m Listener ). replace ( eq ( m Screen 2 ), Ġany OrNull (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgo Back _ with Single Back stack Entry _ pop s Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . single ( m Screen 1 ), Ġm Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtri ad . go Back () ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġverify ( m Listener ). screen Pop ped ( m Screen 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( result , Ġ` is `( false )) ĊĠĠĠĠĠĠĠ ĠassertThat ( tri ad . back stack . size (), Ġ` is `( 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġgo Back _ with More Than One Back stack Entry _ back wards () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . of ( m Screen 1 , Ġm Screen 2 ), Ġm Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġtri ad . go Back () ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ ĠassertThat ( result , Ġ` is `( true )) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen Pop ped ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). backward ( eq ( m Screen 1 ), Ġany OrNull (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalStateException :: class ) ĊĠĠĠ Ġfun Ġforward _ with An Empty Back stack _ throws IllegalStateException () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . empty Instance () ĊĠĠĠĠĠĠĠ Ġtri ad . set Listener ( m Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . forward ( Back stack . of ( m Screen 1 , Ġm Screen 2 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġforward _ with A Valid Back stack _ forward sTo Last Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . of ( m Screen 1 , Ġm Screen 2 ), Ġm Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . forward ( Back stack . of ( m Screen 2 , Ġm Screen 3 )) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen Pop ped ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen Pop ped ( m Screen 1 ) ĊĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 3 ) ĊĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). forward ( eq ( m Screen 3 ), Ġany OrNull (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 2 , Ġm Screen 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalStateException :: class ) ĊĠĠĠ Ġfun Ġbackward _ with An Empty Back stack _ throws IllegalStateException () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . empty Instance () ĊĠĠĠĠĠĠĠ Ġtri ad . set Listener ( m Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . backward ( Back stack . of ( m Screen 1 , Ġm Screen 2 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbackward _ with A Valid Back stack _ back wards To Last Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . of ( m Screen 1 , Ġm Screen 2 ), Ġm Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . backward ( Back stack . of ( m Screen 2 , Ġm Screen 3 )) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen Pop ped ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen Pop ped ( m Screen 1 ) ĊĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 3 ) ĊĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). backward ( eq ( m Screen 3 ), Ġany OrNull (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 2 , Ġm Screen 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalStateException :: class ) ĊĠĠĠ Ġfun Ġreplace _ with An Empty Back stack _ throws IllegalStateException () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . empty Instance () ĊĠĠĠĠĠĠĠ Ġtri ad . set Listener ( m Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . replace ( Back stack . of ( m Screen 1 , Ġm Screen 2 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġreplace _ with A Valid Back stack _ re places To Last Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . of ( m Screen 1 , Ġm Screen 2 ), Ġm Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . replace ( Back stack . of ( m Screen 2 , Ġm Screen 3 )) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen Pop ped ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen Pop ped ( m Screen 1 ) ĊĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 2 ) ĊĠĠĠĠĠĠĠ Ġin Order . verify ( m Listener ). screen P ushed ( m Screen 3 ) ĊĊĠĠĠĠĠĠĠ Ġverify ( m Listener ). replace ( eq ( m Screen 3 ), Ġany OrNull (), Ġany ()) ĊĠĠĠĠĠĠĠ Ġassert Back stack Has Entries ( tri ad . back stack , Ġm Screen 2 , Ġm Screen 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalStateException :: class ) ĊĠĠĠ Ġfun ĠstartActivity _ without Activity Reference _ throws IllegalStateException () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . single ( m Screen 1 ), Ġm Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . startActivity ( mock ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠstartActivity _ with Activity Reference _ starts Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġmock < Activity >() ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġmock < Intent >() ĊĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . single ( m Screen 1 ), Ġm Listener ) ĊĠĠĠĠĠĠĠ Ġtri ad . set Activity ( activity ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . startActivity ( intent ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġverify ( activity ). startActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ( expected Ġ= ĠIllegalStateException :: class ) ĊĠĠĠ Ġfun ĠstartActivity For Result _ without Activity Reference _ throws IllegalStateException () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . single ( m Screen 1 ), Ġm Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . startActivity For Result ( mock (), Ġmock ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠstartActivity For Result _ with Activity Reference _ starts Activity For Result () Ġ{ ĊĠĠĠĠĠĠĠ Ġ/* ĠGiven Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġmock < Activity >() ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġmock < Intent >() ĊĠĠĠĠĠĠĠ Ġval Ġresult Listener Ġ= Ġmock < Tri ad . Activity Result Listener >() ĊĊĠĠĠĠĠĠĠ Ġval Ġtri ad Ġ= ĠTri ad Factory . newInstance ( Back stack . single ( m Screen 1 ), Ġm Listener ) ĊĠĠĠĠĠĠĠ Ġtri ad . set Activity ( activity ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠWhen Ġ*/ ĊĠĠĠĠĠĠĠ Ġtri ad . startActivity For Result ( intent , Ġresult Listener ) ĊĊĠĠĠĠĠĠĠ Ġ/* ĠThen Ġ*/ ĊĠĠĠĠĠĠĠ Ġverify ( activity ). startActivity For Result ( eq ( intent ), Ġany ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ SuppressWarnings (" raw types ") ĊĠĠĠ Ġprivate Ġfun Ġassert Back stack Has Entries ( back stack : ĠBack stack , Ġvar arg Ġscreens : ĠScreen < Any >) Ġ{ ĊĠĠĠĠĠĠĠ ĠassertThat (" Back stack Ġsize ", Ġback stack . size (), Ġ` is `( screens . size )) ĊĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġiterator Ġ= Ġback stack . reverse Iterator () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( iterator . hasNext ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscreen Ġ= Ġiterator . next () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( screen ). toBe ( screens [ i ]) Ġ{ Ġback stack . toString () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }