/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 Ġ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 Ġandroidx . ui . test Ċ Ċ import Ġandroidx . compose . Composable Ċ import Ġandroidx . test . filters . Medium Test Ċ import Ġandroidx . ui . core . Modifier Ċ import Ġandroidx . ui . core . semantics . semantics Ċ import Ġandroidx . compose . foundation . Box Ċ import Ġandroidx . compose . foundation . Text Ċ import Ġandroidx . compose . foundation . layout . Column Ċ import Ġandroidx . ui . material . Button Ċ import Ġandroidx . ui . material . Material Theme Ċ import Ġandroidx . ui . semantics . disabled Ċ import Ġandroidx . ui . semantics . test Tag Ċ import Ġandroidx . ui . test . util . Boundary Node Ċ import Ġandroidx . ui . test . util . expect ErrorMessage StartsWith Ċ import Ġandroidx . ui . test . util . ob fusc ate Nodes Info Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ Ċ @ Medium Test Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠPrint ToString Test Ġ{ ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġcompose Test Rule Ġ= Ġcreate Compose Rule ( disable Transitions Ġ= Ġtrue ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġprint ToString _ nothing Found () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompose Test Rule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCompose Simple Case () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġexpect ErrorMessage StartsWith ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Failed : Ġassert Exists .\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Reason : ĠExpected Ġexactly Ġ' 1 ' Ġnode Ġbut Ġcould Ġnot Ġfind Ġany Ġnode Ġthat Ġsatisfies :" ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Node With Text (" O ops "). print ToString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġprint ToString _ one () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompose Test Rule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCompose Simple Case () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġon Node With Text (" Hello ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. print ToString ( max Depth Ġ= Ġ 0 ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( ob fusc ate Nodes Info ( result )). isEqualTo ("" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Node Ġ# X Ġat Ġ( X , ĠX , ĠX , ĠX ) px \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Text Ġ= Ġ' Hello '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" GetText Layout Result Ġ= Ġ' Accessibility Action ( label = null , Ġaction = Function 1 < java " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". util . List < android x . compose . ui . text . Text Layout Result >, Ġjava . lang . Boolean >) '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Has Ġ 1 Ġsibling ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġprint ToString _ many () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompose Test Rule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCompose Simple Case () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġon Root () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Children () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. print ToString () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( ob fusc ate Nodes Info ( result )). isEqualTo ("" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 ) ĠNode Ġ# X Ġat Ġ( X , ĠX , ĠX , ĠX ) px \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Text Ġ= Ġ' Hello '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" GetText Layout Result Ġ= Ġ' Accessibility Action ( label = null , Ġaction = Function 1 < java " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". util . List < android x . compose . ui . text . Text Layout Result >, Ġjava . lang . Boolean >) '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Has Ġ 1 Ġsibling \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 ) ĠNode Ġ# X Ġat Ġ( X , ĠX , ĠX , ĠX ) px \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Text Ġ= Ġ' World '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" GetText Layout Result Ġ= Ġ' Accessibility Action ( label = null , Ġaction = Function 1 < java " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". util . List < android x . compose . ui . text . Text Layout Result >, Ġjava . lang . Boolean >) '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Has Ġ 1 Ġsibling ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġprint Hierarchy () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompose Test Rule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn ( Modifier . semantics Ġ{ Ġthis . disabled (); Ġthis . test Tag Ġ= Ġ" column " Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . semantics Ġ{ Ġthis . disabled (); Ġthis . test Tag Ġ= Ġ" box " Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġ{}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Button ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Hello ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġon Root () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. print ToString () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( ob fusc ate Nodes Info ( result )). isEqualTo ("" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Node Ġ# X Ġat Ġ( X , ĠX , ĠX , ĠX ) px \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ|- Node Ġ# X Ġat Ġ( X , ĠX , ĠX , ĠX ) px , ĠTag : Ġ' column '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ ĠDisabled Ġ= Ġ' kotlin . Unit '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ|- Node Ġ# X Ġat Ġ( X , ĠX , ĠX , ĠX ) px , ĠTag : Ġ' box '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ| ĠDisabled Ġ= Ġ' kotlin . Unit '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ| Ġ Ġ|- Node Ġ# X Ġat Ġ( X , ĠX , ĠX , ĠX ) px \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ| ĠĠĠ ĠOnClick Ġ= Ġ' Accessibility Action ( label = null , Ġaction = Function 0 " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"< java . lang . Boolean >) '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ| ĠĠĠ ĠText Ġ= Ġ' Button '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ| ĠĠĠ ĠGet Text Layout Result Ġ= Ġ' Accessibility Action ( label = null , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" action = Function 1 < java . util . List < android x . compose . ui . text . Text Layout Result > ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġjava . lang " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". Boolean >) '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ| ĠĠĠ ĠMerge Desc endants Ġ= Ġ' true '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ|- Node Ġ# X Ġat Ġ( X , ĠX , ĠX , ĠX ) px \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠ ĠText Ġ= Ġ' Hello '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠ ĠGet Text Layout Result Ġ= Ġ' Accessibility Action ( label = null , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" action = Function 1 < java . util . List < android x . compose . ui . text . Text Layout Result > ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġjava . lang " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ". Boolean >) '") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġprint Multiple _ with Depth () Ġ{ ĊĠĠĠĠĠĠĠ Ġcompose Test Rule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBound ary Node (" tag 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBound ary Node (" tag 1 1 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBound ary Node (" tag 1 1 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠBound ary Node (" tag 2 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBound ary Node (" tag 2 2 ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBound ary Node (" tag 2 2 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġon Root () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. on Children () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. print ToString ( max Depth Ġ= Ġ 1 ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( ob fusc ate Nodes Info ( result )). isEqualTo ("" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 ) ĠNode Ġ# X Ġat Ġ( X , ĠX , ĠX , ĠX ) px , ĠTag : Ġ' tag 1 '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ|- Node Ġ# X Ġat Ġ( X , ĠX , ĠX , ĠX ) px , ĠTag : Ġ' tag 1 1 '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ ĠHas Ġ 1 Ġchild \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 ) ĠNode Ġ# X Ġat Ġ( X , ĠX , ĠX , ĠX ) px , ĠTag : Ġ' tag 2 '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ|- Node Ġ# X Ġat Ġ( X , ĠX , ĠX , ĠX ) px , ĠTag : Ġ' tag 2 2 '\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ ĠHas Ġ 1 Ġchild ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġfun ĠCompose Simple Case () Ġ{ ĊĠĠĠĠĠĠĠ ĠMaterial Theme Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColumn Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" Hello ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠText (" World ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }