/* Ċ Ġ* Ġ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 . compose . ui . view interop Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . view . Context Theme Wrapper Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . View Tree Observer Ċ import Ġandroidx . activity . Component Activity Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . foundation . text . Basic Text Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . geometry . Rect Ċ import Ġandroidx . compose . ui . layout . bounds In Window Ċ import Ġandroidx . compose . ui . layout . on Glob ally Position ed Ċ import Ġandroidx . compose . ui . platform . Abstract Compose View Ċ import Ġandroidx . compose . ui . platform . Compose View Ċ import Ġandroidx . compose . ui . platform . View Composition Strategy Ċ import Ġandroidx . compose . ui . platform . test Tag Ċ import Ġandroidx . compose . ui . test . R Ċ import Ġandroidx . compose . ui . test . assert Text Equals Ċ import Ġandroidx . compose . ui . test . junit 4 . create Android Compose Rule Ċ import Ġandroidx . compose . ui . test . on Node With Tag Ċ import Ġandroidx . compose . ui . unit . Int Size Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . test . espress o . Esp ress o Ċ import Ġandroidx . test . espress o . assertion . View Assertions . matches Ċ import Ġandroidx . test . espress o . matcher . View Matchers . is Displayed Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . filters . Medium Test Ċ import Ġandroidx . test . filters . Small Test Ċ import Ġorg . hamcrest . Core Matchers . instance Of Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Assert . assertFalse Ċ import Ġorg . junit . Assert . assertNotNull Ċ import Ġorg . junit . Assert . assertSame Ċ import Ġorg . junit . Assert . assertTrue Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġjava . util . concurrent . Count DownLatch Ċ import Ġjava . util . concurrent . TimeUnit Ċ Ċ @ Medium Test Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠCompose View Test Ġ{ ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule Ġ= Ġcreate Android Compose Rule < Component Activity >() ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompose View Comp osed Content () Ġ{ ĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompose View Ġ= ĠCompose View ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . set ContentView ( compose View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBasic Text (" Hello , ĠWorld !", ĠModifier . test Tag (" text ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠE sp ress o . on View ( instance Of ( Compose View :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check ( matches ( is Displayed ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check Ġ{ Ġview , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġas ĠViewGroup ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue (" has Ġchildren ", Ġview . child Count Ġ> Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" text "). assert Text Equals (" Hello , ĠWorld !") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcompose Different View Content () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= ĠView . generate View Id () ĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompose View Ġ= ĠCompose View ( activity ). also Ġ{ Ġit . id Ġ= Ġid Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . set ContentView ( compose View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBasic Text (" Hello ", ĠModifier . test Tag (" text ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" text "). assert Text Equals (" Hello ") ĊĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompose View : ĠCompose View Ġ= Ġactivity . findViewById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBasic Text (" World ", ĠModifier . test Tag (" text ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" text "). assert Text Equals (" World ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcomposition Strategy Disposed () Ġ{ ĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġinstalled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdisposed Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest View Ġ= ĠTest Compose View ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstrategy Ġ= Ġobject Ġ: ĠView Composition Strategy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġinstall For ( view : ĠAbstract Compose View ): Ġ() Ġ-> ĠUnit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinstalled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertSame (" correct Ġview Ġprovided ", Ġtest View , Ġview ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ{ Ġdisposed Ġ= Ġtrue Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest View . setView Composition Strategy ( strategy ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue (" strategy Ġshould Ġbe Ġinstalled ", Ġinstalled ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse (" strategy Ġshould Ġnot Ġbe Ġdisposed ", Ġdisposed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest View . setView Composition Strategy ( View Composition Strategy . Dispose On Detached From Window ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue (" strategy Ġshould Ġbe Ġdisposed ", Ġdisposed ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdispose On Detached Default Strategy () Ġ{ ĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtest View Ġ= ĠTest Compose View ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse (" should Ġnot Ġhave Ġcomposition Ġyet ", Ġtest View . has Composition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . set ContentView ( test View ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertTrue (" composition Ġshould Ġbe Ġcreated ", Ġtest View . has Composition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . set ContentView ( View ( activity )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertFalse (" composition Ġshould Ġhave Ġbeen Ġdisposed Ġon Ġdetach ", Ġtest View . has Composition ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdispose On Lifecycle Destroyed Strategy () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcompose View Capture : ĠCompose View ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompose View Ġ= ĠCompose View ( activity ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . setView Composition Strategy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Composition Strategy . Dispose On Lifecycle Destroyed ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View Capture Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . set ContentView ( compose View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBasic Text (" Hello ", ĠModifier . test Tag (" text ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" text "). assert Text Equals (" Hello ") ĊĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . moveTo State ( Lifecycle . State . DESTROY ED ) ĊĠĠĠĠĠĠĠ ĠassertNotNull (" compose View Capture Ġshould Ġnot Ġbe Ġnull ", Ġcompose View Capture ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Compose View Ġshould Ġnot Ġhave Ġa Ġcomposition ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View Capture ?. has Composition Ġ== Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdispose On View Tree Lifecycle Destroyed Strategy _ set Before Attached () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcompose View Capture : ĠCompose View ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompose View Ġ= ĠCompose View ( activity ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . setView Composition Strategy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Composition Strategy . Dispose On View Tree Lifecycle Destroyed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View Capture Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . set ContentView ( compose View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBasic Text (" Hello ", ĠModifier . test Tag (" text ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" text "). assert Text Equals (" Hello ") ĊĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . moveTo State ( Lifecycle . State . DESTROY ED ) ĊĠĠĠĠĠĠĠ ĠassertNotNull (" compose View Capture Ġshould Ġnot Ġbe Ġnull ", Ġcompose View Capture ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Compose View Ġshould Ġnot Ġhave Ġa Ġcomposition ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View Capture ?. has Composition Ġ== Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġdispose On View Tree Lifecycle Destroyed Strategy _ set After Attached () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcompose View Capture : ĠCompose View ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompose View Ġ= ĠCompose View ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View Capture Ġ= Ġcompose View ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . set ContentView ( compose View ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . setView Composition Strategy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠView Composition Strategy . Dispose On View Tree Lifecycle Destroyed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBasic Text (" Hello ", ĠModifier . test Tag (" text ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" text "). assert Text Equals (" Hello ") ĊĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . moveTo State ( Lifecycle . State . DESTROY ED ) ĊĠĠĠĠĠĠĠ ĠassertNotNull (" compose View Capture Ġshould Ġnot Ġbe Ġnull ", Ġcompose View Capture ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Compose View Ġshould Ġnot Ġhave Ġa Ġcomposition ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View Capture ?. has Composition Ġ== Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġp add ings Are Not Ignored () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġglobal Bounds Ġ= ĠRect . Zero ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompose View Ġ= ĠCompose View ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . set Padding ( 1 0 , Ġ 2 0 , Ġ 3 0 , Ġ 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . set ContentView ( compose View , ĠViewGroup . LayoutParams ( 1 0 0 , Ġ 1 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . test Tag (" box "). fill MaxSize (). on Glob ally Position ed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġposition Ġ= ĠInt Array ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . getLocation On Screen ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġglobal Bounds Ġ= Ġit . bounds In Window (). translate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- position [ 0 ]. toFloat (), Ġ- position [ 1 ]. toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( latch . await ( 1 , ĠTimeUnit . SECONDS )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Rect ( 1 0 f , Ġ 2 0 f , Ġ 7 0 f , Ġ 6 0 f ), Ġglobal Bounds ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġview Size Is Child Size Plus P add ings () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġsize Ġ= ĠInt Size . Zero ĊĠĠĠĠĠĠĠ Ġval Ġl atch Ġ= ĠCount DownLatch ( 1 ) ĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompose View Ġ= ĠCompose View ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . set Padding ( 1 0 , Ġ 2 0 , Ġ 3 0 , Ġ 4 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . set ContentView ( compose View , ĠViewGroup . LayoutParams ( 1 0 0 , Ġ 1 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . view Tree Observer . add On Pre Draw Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠView Tree Observer . On Pre Draw Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pre Draw (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompose View . view Tree Observer . remove On Pre Draw Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize Ġ= ĠInt Size ( compose View . meas ured Width , Ġcompose View . meas ured Height ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġl atch . count Down () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( latch . await ( 1 , ĠTimeUnit . SECONDS )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Int Size ( 1 0 0 , Ġ 1 0 0 ), Ġsize ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Small Test ĊĠĠĠ Ġfun Ġthrows On Add View () Ġ{ ĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Test Compose View ( activity )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Unsupported (" addView ( View )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( View ( activity )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Unsupported (" addView ( View , Ġint )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( View ( activity ), Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Unsupported (" addView ( View , Ġint , Ġint )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( View ( activity ), Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Unsupported (" addView ( View , ĠLayout Params )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( View ( activity ), ĠViewGroup . LayoutParams ( 0 , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Unsupported (" addView ( View , Ġint , ĠLayout Params )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd View ( View ( activity ), Ġ 0 , ĠViewGroup . LayoutParams ( 0 , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Unsupported (" addView In Layout ( View , Ġint , ĠLayout Params )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd View In Layout ( View ( activity ), Ġ 0 , ĠViewGroup . LayoutParams ( 0 , Ġ 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert Unsupported (" addView In Layout ( View , Ġint , ĠLayout Params , Ġboolean )") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd View In Layout ( View ( activity ), Ġ 0 , ĠViewGroup . LayoutParams ( 0 , Ġ 0 ), Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRegression Ġtest Ġfor Ġhttps :// issue tracker . google . com / issues / 1 8 1 4 6 3 1 1 7 ĊĠĠĠĠ Ġ* ĠEns ures Ġthat Ġ[ Compose View ] Ġcan Ġbe Ġconstructed Ġand Ġattached Ġa Ġwindow Ġeven Ġif ĠView Ġcalls ĊĠĠĠĠ Ġ* Ġ[ View . on R tl Properties Changed ] Ġin Ġits Ġconstructor Ġbefore Ġsubclass Ġconstructors Ġrun . ĊĠĠĠĠ Ġ* Ġ( Android Compose View Ġis Ġsensitive Ġto Ġthis .) ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Small Test ĊĠĠĠ Ġfun Ġon R tl Properties Changed Called By View Constructor () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠResult < Unit >? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġrule . activity Rule . scenario . on Activity Ġ{ Ġactivity Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . set ContentView ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCompose View ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Theme Wrapper ( activity , ĠR . style . Theme _ With Scrollbar Attr Set ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠassertNotNull (" test Ġdid Ġnot Ġrun ", Ġresult ?. get OrThrow ()) ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġinline Ġfun ĠViewGroup . assert Unsupported ( ĊĠĠĠ Ġtest Name : ĠString , ĊĠĠĠ Ġtest : ĠViewGroup . () Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġvar Ġexception : ĠThrowable ? Ġ= Ġnull ĊĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġtest () ĊĠĠĠ Ġ} Ġcatch Ġ( t : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġexception Ġ= Ġt ĊĠĠĠ Ġ} ĊĠĠĠ ĠassertTrue ( ĊĠĠĠĠĠĠĠ Ġ"$ test Name Ġthrows ĠUnsupportedOperationException ", ĊĠĠĠĠĠĠĠ Ġexception Ġis ĠUnsupportedOperationException ĊĠĠĠ Ġ) Ċ } Ċ Ċ private Ġclass ĠTest Compose View ( ĊĠĠĠ Ġcontext : ĠContext Ċ ) Ġ: ĠAbstract Compose View ( context ) Ġ{ ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġoverride Ġfun ĠContent () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠNo Ġcontent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġadd View In Layout ( child : ĠView ?, Ġindex : ĠInt , Ġparams : ĠLayout Params ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . addView In Layout ( child , Ġindex , Ġparams ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġadd View In Layout ( ĊĠĠĠĠĠĠĠ Ġchild : ĠView ?, ĊĠĠĠĠĠĠĠ Ġindex : ĠInt , ĊĠĠĠĠĠĠĠ Ġparams : ĠLayout Params ?, ĊĠĠĠĠĠĠĠ Ġprevent Request Layout : ĠBoolean ĊĠĠĠ Ġ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . addView In Layout ( child , Ġindex , Ġparams , Ġprevent Request Layout ) ĊĠĠĠ Ġ} Ċ }