package Ġcom . s ag ar . core . view Ċ Ċ import Ġandroid . view . View Ċ import Ġandroidx . lifecycle . Lifecycle Ċ import Ġandroidx . test . ext . junit . rules . activity Scenario Rule Ċ import Ġcom . s ag ar . test . Test Activity Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . async Ċ import Ġkotlinx . coroutines . run Blocking Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ class ĠView Extension Test Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġactivity : ĠTest Activity ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġactivity Rule Ġ= Ġactivity Scenario Rule < Test Activity >() ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Rule . scenario . on Activity Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpost Test () Ġ= Ġrun Blocking ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( activity . demo View . await Post ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpost Delay Test () Ġ= Ġrun Blocking ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( activity . demo View . await Post Delay ( 2 0 0 0 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġawait Global Layout Test () Ġ= Ġrun Blocking ( Dispatch ers . Main . immediate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Assertion Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . demo View . await Global Layout () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠChange Ġview 's Ġvisibility Ġto Ġtrigger Ġglobal Ġlayout Ġchange Ġcallback ĊĠĠĠĠĠĠĠ Ġactivity . demo View . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġdeferred Assertion . await () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġawait Do On Next Layout Test () Ġ= Ġrun Blocking ( Dispatch ers . Main . immediate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Assertions Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġactivity . demo View . await Do On Next Layout () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( activity . demo View , Ġview ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 0 0 , Ġview . width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠChange Ġview 's Ġwidth Ġto Ġtrigger Ġlayout Ġchange ĊĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġactivity . demo View . layout Params ĊĠĠĠĠĠĠĠ Ġlayout Params . width Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġactivity . demo View . layout Params Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠ Ġdeferred Assertions . await () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġawait Do On Layout Test () Ġ= Ġrun Blocking ( Dispatch ers . Main . immediate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġactivity . demo View . await Do On Layout () ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( activity . demo View , Ġview ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġawait On Attach Test () Ġ= Ġrun Blocking ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity Rule . scenario . moveTo State ( Lifecycle . State . CREATED ) ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Assertion Ġ= Ġasync ( Dispatch ers . Main . immediate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġactivity . demo View . await On Attach () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( activity . demo View Ġ== Ġview ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġactivity Rule . scenario . moveTo State ( Lifecycle . State . RE SU MED ) ĊĠĠĠĠĠĠĠ Ġdeferred Assertion . await () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġawait On Detach Test () Ġ= Ġrun Blocking ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Assertion Ġ= Ġasync ( Dispatch ers . Main . immediate ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġactivity . demo View . await On Detach () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssert . assertTrue ( activity . demo View Ġ== Ġview ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġactivity Rule . scenario . moveTo State ( Lifecycle . State . DESTROY ED ) ĊĠĠĠĠĠĠĠ Ġdeferred Assertion . await () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġawait On Pre Draw Test () Ġ= Ġrun Blocking ( Dispatch ers . Main . immediate ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcount Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġdeferred Assertion Ġ= Ġasync Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . demo View . await Pre Draw () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcount ++ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġactivity . demo View . view Tree Observer . dispatch On Pre Draw () ĊĠĠĠĠĠĠĠ Ġdeferred Assertion . await () ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( count Ġ== Ġ 1 ) ĊĠĠĠ Ġ} Ċ } Ċ