package Ġcom . ro ud ikk . navigator Ċ Ċ import Ġandroid . os . Parcel Ċ import Ġandroidx . compose . material . Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . ui . test .* Ċ import Ġandroidx . compose . ui . test . junit 4 . create Compose Rule Ċ import Ġcom . ro ud ikk . navigator . compose . Nav Container Ċ import Ġcom . ro ud ikk . navigator . core .* Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ class ĠNav Container Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule Ġ= Ġcreate Compose Rule () ĊĊĠĠĠ Ġopen Ġclass ĠTest Screen ( val Ġtext : ĠString ) Ġ: ĠScreen Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġkey : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġtext ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Test FunctionName ") ĊĠĠĠĠĠĠĠ Ġ@ Composable ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠContent () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġtext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdescribe Contents (): ĠInt Ġ= Ġerror ("") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( p 0 : ĠParcel ?, Ġp 1 : ĠInt ) Ġ= Ġerror ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġclass ĠTest Bottom Sheet ( ĊĠĠĠĠĠĠĠ Ġval Ġtext : ĠString , ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġbottom Sheet Options : ĠBottom Sheet Options ĊĠĠĠ Ġ) Ġ: ĠBottom Sheet Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ@ Suppress (" Test FunctionName ") ĊĠĠĠĠĠĠĠ Ġ@ Composable ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠContent () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText ( text Ġ= Ġtext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġdescribe Contents (): ĠInt Ġ= Ġerror ("") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠwriteTo Parcel ( p 0 : ĠParcel ?, Ġp 1 : ĠInt ) Ġ= Ġerror ("") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnav Host Initialize _ single Stack _ shows First Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Screen Ġ= ĠTest Screen (" Test ĠScreen ") ĊĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNav Container ( navigator Ġ= Ġremember Navigator ( Navigation Config . Single Stack ( test Screen ))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( test Screen . text ). assertIs Displayed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnav Host Initialize _ multi Stack _ shows Initial Stack First Screen () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstack Entries Ġ= Ġcreate Stack Entries () ĊĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNav Container ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator Ġ= Ġremember Navigator ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Config . Multi Stack ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries Ġ= Ġstack Entries , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Stack Key Ġ= Ġstack Entries [ 1 ]. key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Strategy Ġ= ĠBack Stack Strategy . Default ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( stack Entries [ 1 ]. initial Navigation Node . key ). assertIs Displayed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnav Host _ single Stack _ navigate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Screen Ġ= ĠTest Screen (" Test Screen ") ĊĠĠĠĠĠĠĠ Ġval Ġtest Screen 2 Ġ= ĠTest Screen (" Test Screen 2 ") ĊĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnavigator Ġ= Ġremember Navigator ( test Screen ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNav Container ( navigator Ġ= Ġnavigator ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator . navigate ( test Screen 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( test Screen 2 . text ). assertIs Displayed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnav Host _ single Stack _ pop Back Stack () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Screen Ġ= ĠTest Screen (" Test Screen ") ĊĠĠĠĠĠĠĠ Ġval Ġtest Screen 2 Ġ= ĠTest Screen (" Test Screen 2 ") ĊĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnavigator Ġ= Ġremember Navigator ( test Screen ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠNav Container ( navigator Ġ= Ġnavigator ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigator . navigate ( test Screen 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( navigator . pop Back Stack ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġassert (! navigator . pop Back Stack ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( test Screen . text ). assertIs Displayed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnav Host _ multi Stack _ navigate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Screen Ġ= ĠTest Screen (" Test Screen ") ĊĠĠĠĠĠĠĠ Ġval Ġtest Screen 2 Ġ= ĠTest Screen (" Test Screen 2 ") ĊĊĠĠĠĠĠĠĠ Ġval Ġstack Entries Ġ= Ġcreate Stack Entries () ĊĊĠĠĠĠĠĠĠ Ġval Ġnavigator Ġ= ĠNavigator ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Config . Multi Stack ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġentries Ġ= Ġstack Entries , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Stack Key Ġ= Ġstack Entries [ 0 ]. key , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Stack Strategy Ġ= ĠBack Stack Strategy . Default ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNav Container ( navigator Ġ= Ġnavigator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( stack Entries [ 0 ]. initial Navigation Node . key ). assertIs Displayed () ĊĊĠĠĠĠĠĠĠ Ġnavigator . navigate ( test Screen ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( test Screen . key ). assertIs Displayed () ĊĊĠĠĠĠĠĠĠ Ġnavigator . navigate To Stack ( stack Entries [ 1 ]. key ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( stack Entries [ 1 ]. initial Navigation Node . key ). assertIs Displayed () ĊĊĠĠĠĠĠĠĠ Ġnavigator . navigate ( test Screen 2 ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( test Screen 2 . key ). assertIs Displayed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnav Host _ bottom Sheet _ dismiss On Hidden _ navigate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Screen Ġ= ĠTest Screen (" Test Screen ") ĊĠĠĠĠĠĠĠ Ġval Ġbottom Sheet Ġ= ĠTest Bottom Sheet ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Test Bottom Sheet ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Sheet Options Ġ= ĠBottom Sheet Options () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġnavigator Ġ= ĠNavigator ( Navigation Config . Single Stack ( test Screen )) ĊĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNav Container ( navigator Ġ= Ġnavigator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( test Screen . text ). assertIs Displayed () ĊĊĠĠĠĠĠĠĠ Ġnavigator . navigate ( bottom Sheet ) ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( test Screen . text ). assertIs Displayed () ĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( bottom Sheet . text ). assertIs Displayed () ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" Nav Container Bottom Sheet ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform Touch Input Ġ{ Ġswipe Down () Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( bottom Sheet . text ). assert DoesNotExist () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġnav Host _ bottom Sheet _ dismiss On Hidden False _ navigate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtest Screen Ġ= ĠTest Screen (" Test Screen ") ĊĠĠĠĠĠĠĠ Ġval Ġbottom Sheet Ġ= ĠTest Bottom Sheet ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġ" Test Bottom Sheet ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbottom Sheet Options Ġ= ĠBottom Sheet Options ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm StateChange Ġ= Ġ{ Ġfalse Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġnavigator Ġ= ĠNavigator ( Navigation Config . Single Stack ( test Screen )) ĊĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNav Container ( navigator Ġ= Ġnavigator ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( test Screen . text ). assertIs Displayed () ĊĊĠĠĠĠĠĠĠ Ġnavigator . navigate ( bottom Sheet ) ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( test Screen . text ). assertIs Displayed () ĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( bottom Sheet . text ). assertIs Displayed () ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" Nav Container Bottom Sheet ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. perform Touch Input Ġ{ Ġswipe Down () Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Text ( bottom Sheet . text ). assertIs Displayed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Stack Entries (): ĠList < Navigation Config . Multi Stack . Navigation Stack Entry > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Screen Pair Ġ= Ġ( 0 .. 3 ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġ" Base Test Screen -$ it " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStack Key () Ġto Ġobject Ġ: ĠTest Screen ( key ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġkey : ĠString Ġ= Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġkey Screen Pair . map Ġ{ Ġ( key , Ġscreen ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠNavigation Config . Multi Stack . Navigation Stack Entry ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Ġ= Ġkey , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Navigation Node Ġ= Ġscreen ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }