/* Ċ Ġ* Ġ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 . layout Ċ Ċ import Ġandroidx . activity . Component Activity Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . offset Ċ import Ġandroidx . compose . foundation . layout . required Size Ċ import Ġandroidx . compose . foundation . layout . size Ċ import Ġandroidx . compose . runtime . Composable Ċ import Ġandroidx . compose . runtime . mutable State Map Of Ċ import Ġandroidx . compose . runtime . getValue Ċ import Ġandroidx . compose . runtime . mutable State Of Ċ import Ġandroidx . compose . runtime . setValue Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . test . junit 4 . create Android Compose Rule Ċ import Ġandroidx . compose . ui . unit . Constraints Ċ import Ġandroidx . compose . ui . unit . Int Offset Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġandroidx . test . filters . Medium Test Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġkotlin . math . min Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ Ċ @ Medium Test Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠAlignment Line Test Ġ{ ĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule Ġ= Ġcreate Android Compose Rule < Component Activity >() ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġquerying Lines Of Un meas ured Child () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġroot Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquery Alignment Line During Measure () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnode Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Not Measure () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( node ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcreate Delegate ( root ) ĊĠĠĠĠĠĠĠ Ġassert Measured And La id Out ( root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġalignment Lines Position In C oo peration _ when Modifier Dis o be ys () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġh Line Ġ= ĠHorizontal Alignment Line (:: min ) ĊĠĠĠĠĠĠĠ Ġval Ġv Line Ġ= ĠVertical Alignment Line (:: min ) ĊĠĠĠĠĠĠĠ Ġval Ġh Line Position Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġval Ġv Line Position Ġ= Ġ 1 5 0 ĊĠĠĠĠĠĠĠ Ġval Ġconstr ained Size Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġactual Size Ġ= Ġ 2 0 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent With Alignment Lines Ġ= Ġ@ Composable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( with ( rule . density ) Ġ{ Ġactual Size . to Dp () Ġ})) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayout ({}, ĠModifier ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( 0 , Ġ 0 , Ġmap Of ( h Line Ġto Ġh Line Position , Ġv Line Ġto Ġv Line Position )) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout ( content With Alignment Lines ) Ġ{ Ġmeas ur ables , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur ables . first (). measure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraints ( maxWidth Ġ= Ġconstr ained Size , ĠmaxHeight Ġ= Ġconstr ained Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobtained H Line Position Ġ= Ġplace able [ h Line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobtained V Line Position Ġ= Ġplace able [ v Line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Line Position Ġ- Ġ( actual Size Ġ- Ġconstr ained Size ) Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobtained H Line Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Line Position Ġ- Ġ( actual Size Ġ- Ġconstr ained Size ) Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobtained V Line Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( 0 , Ġ 0 ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . waitFor Idle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġalignment Lines Position In C oo peration _ when Layout Dis o be ys () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġh Line Ġ= ĠHorizontal Alignment Line (:: min ) ĊĠĠĠĠĠĠĠ Ġval Ġv Line Ġ= ĠVertical Alignment Line (:: min ) ĊĠĠĠĠĠĠĠ Ġval Ġh Line Position Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġval Ġv Line Position Ġ= Ġ 1 5 0 ĊĠĠĠĠĠĠĠ Ġval Ġconstr ained Size Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġactual Size Ġ= Ġ 2 0 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent With Alignment Lines Ġ= Ġ@ Composable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayout ({}, ĠModifier ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactual Size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( h Line Ġto Ġh Line Position , Ġv Line Ġto Ġv Line Position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout ( content With Alignment Lines ) Ġ{ Ġmeas ur ables , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur ables . first (). measure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠConstraints ( maxWidth Ġ= Ġconstr ained Size , ĠmaxHeight Ġ= Ġconstr ained Size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobtained H Line Position Ġ= Ġplace able [ h Line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobtained V Line Position Ġ= Ġplace able [ v Line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Line Position Ġ- Ġ( actual Size Ġ- Ġconstr ained Size ) Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobtained H Line Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Line Position Ġ- Ġ( actual Size Ġ- Ġconstr ained Size ) Ġ/ Ġ 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobtained V Line Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( 0 , Ġ 0 ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . waitFor Idle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġalignment Lines Are Propag ated _ when Supp lied Via Modifier () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġval Ġsize Dp Ġ= Ġwith ( rule . density ) Ġ{ Ġsize . to Dp () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġline Position Ġ= Ġ 2 5 ĊĠĠĠĠĠĠĠ Ġval Ġh Line Ġ= ĠHorizontal Alignment Line (:: min ) ĊĠĠĠĠĠĠĠ Ġval Ġv Line Ġ= ĠVertical Alignment Line (:: min ) ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġ@ Composable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . size ( size Dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . supply Alignment Lines Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Line Ġto Ġline Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Line Ġto Ġline Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. size ( size Dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout ( content ) Ġ{ Ġmeas ur ables , Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur ables . first (). measure ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġplace able [ h Line ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġplace able [ v Line ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( 0 , Ġ 0 ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġalignment Lines Are Propag ated _ when Supp lied Via Modifier _ with Correct Position () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġval Ġsize Dp Ġ= Ġwith ( rule . density ) Ġ{ Ġsize . to Dp () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġval Ġoffset Dp Ġ= Ġwith ( rule . density ) Ġ{ Ġoffset . to Dp () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġline Position Ġ= Ġ 2 5 ĊĠĠĠĠĠĠĠ Ġval Ġh Line Ġ= ĠHorizontal Alignment Line (:: min ) ĊĠĠĠĠĠĠĠ Ġval Ġv Line Ġ= ĠVertical Alignment Line (:: min ) ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġ@ Composable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . size ( size Dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . offset ( offset Dp , Ġoffset Dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. supply Alignment Lines Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġh Line Ġto Ġline Position , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv Line Ġto Ġline Position ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. size ( size Dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. offset ( offset Dp , Ġoffset Dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout ( content ) Ġ{ Ġmeas ur ables , Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur ables . first (). measure ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position Ġ+ Ġoffset , Ġplace able [ h Line ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position Ġ+ Ġoffset , Ġplace able [ v Line ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( 0 , Ġ 0 ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġalignment Lines Change Cause s Re measure _ when Supp lied Via Modifier () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġval Ġsize Dp Ġ= Ġwith ( rule . density ) Ġ{ Ġsize . to Dp () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġval Ġline Position Ġ= Ġ 2 5 ĊĠĠĠĠĠĠĠ Ġval Ġh Line Ġ= ĠHorizontal Alignment Line (:: min ) ĊĠĠĠĠĠĠĠ Ġval Ġv Line Ġ= ĠVertical Alignment Line (:: min ) ĊĠĠĠĠĠĠĠ Ġval Ġalignment Lines Ġ= Ġmutable State Map Of ( h Line Ġto Ġline Position , Ġv Line Ġto Ġline Position ) ĊĠĠĠĠĠĠĠ Ġvar Ġobtained H Line Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġobtained V Line Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġ@ Composable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . size ( size Dp )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . supply Alignment Lines Ġ{ Ġalignment Lines . toMap () Ġ}. size ( size Dp )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout ( content ) Ġ{ Ġmeas ur ables , Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur ables . first (). measure ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobtained H Line Position Ġ= Ġplace able [ h Line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobtained V Line Position Ġ= Ġplace able [ v Line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( 0 , Ġ 0 ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġobtained H Line Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġobtained V Line Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalignment Lines [ h Line ] Ġ= Ġline Position Ġ+ Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalignment Lines [ v Line ] Ġ= Ġline Position Ġ+ Ġoffset ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position Ġ+ Ġoffset , Ġobtained H Line Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position Ġ+ Ġoffset , Ġobtained V Line Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġalignment Lines Change Cause s Re measure _ when Supp lied Via Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġ 5 0 ĊĠĠĠĠĠĠĠ Ġval Ġsize Dp Ġ= Ġwith ( rule . density ) Ġ{ Ġsize . to Dp () Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġoffset Ġ= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġval Ġline Position Ġ= Ġ 2 5 ĊĠĠĠĠĠĠĠ Ġval Ġh Line Ġ= ĠHorizontal Alignment Line (:: min ) ĊĠĠĠĠĠĠĠ Ġval Ġv Line Ġ= ĠVertical Alignment Line (:: min ) ĊĠĠĠĠĠĠĠ Ġval Ġalignment Lines Ġ= Ġmutable State Map Of ( h Line Ġto Ġline Position , Ġv Line Ġto Ġline Position ) ĊĠĠĠĠĠĠĠ Ġvar Ġobtained H Line Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġvar Ġobtained V Line Position Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġ@ Composable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinner Content Ġ= Ġ@ Composable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayout ({}) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( size , Ġsize , Ġalignment Lines ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLayout ( content Ġ= Ġinner Content , ĠModifier . size ( size Dp )) Ġ{ Ġmeas ur ables , Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur ables . first (). measure ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( constraints . maxWidth , Ġconstraints . max Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace able . place ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout ( content ) Ġ{ Ġmeas ur ables , Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur ables . first (). measure ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobtained H Line Position Ġ= Ġplace able [ h Line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobtained V Line Position Ġ= Ġplace able [ v Line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( 0 , Ġ 0 ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġobtained H Line Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġobtained V Line Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalignment Lines [ h Line ] Ġ= Ġline Position Ġ+ Ġoffset ĊĠĠĠĠĠĠĠĠĠĠĠ Ġalignment Lines [ v Line ] Ġ= Ġline Position Ġ+ Ġoffset ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position Ġ+ Ġoffset , Ġobtained H Line Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position Ġ+ Ġoffset , Ġobtained V Line Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ parent Measures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, Ġread During Measure Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġmeasures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Layouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Layout Ġ= Ġ{ Ġ++ parent Layouts Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout Before Pl acing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 3 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Layouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Layout Ġ= Ġ{ Ġ++ parent Layouts Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout After Pl acing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 4 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġparent Layouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ parent Measures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ parent Layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Measure Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout Before Pl acing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 5 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġparent Layouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ parent Measures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ parent Layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Measure Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout After Pl acing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 6 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġparent Layouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ parent Measures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ parent Layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout After Pl acing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Measure Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 7 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ parent Measures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Measure Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( modifier Ġ= ĠModifier . provider (), Ġon Measure Ġ= Ġ{ Ġ++ child Measures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġchild Measures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 8 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ parent Measures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout Before Pl acing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( modifier Ġ= ĠModifier . provider (), Ġon Measure Ġ= Ġ{ Ġ++ child Measures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġchild Measures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 9 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ parent Measures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout After Pl acing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( modifier Ġ= ĠModifier . provider (), Ġon Measure Ġ= Ġ{ Ġ++ child Measures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġchild Measures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 1 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ parent Measures Ġ}, Ġread During Measure Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout After Pl acing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( modifier Ġ= ĠModifier . provider (), Ġon Measure Ġ= Ġ{ Ġ++ child Measures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġchild Measures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 1 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout After Pl acing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . reader ( read During Measure Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ child Measures Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġchild Measures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 1 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġchild Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . reader ( read During Measure Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ child Measures Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġchild Measures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 1 3 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Layouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ meas ures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . reader ( read During Layout Before Pl acing Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ child Measures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ child Layouts Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġchild Layouts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 1 4 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Layouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ meas ures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . reader ( read During Layout After Pl acing Ġ= Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ child Measures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ child Layouts Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġchild Layouts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 1 5 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ parent Measures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . reader ( read During Measure Ġ= Ġtrue ). provider (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ child Measures Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 1 6 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ parent Measures Ġ}, Ġread During Measure Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . reader ( read During Measure Ġ= Ġtrue ). provider (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ child Measures Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 1 7 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġread Ġby Ġmutable State Of ( true ) ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ parent Measures Ġ}, Ġread During Measure Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChanging Parent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Measure Ġ= Ġ{ Ġread Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ child Measures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 1 8 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Layouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchild Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġread Ġby Ġmutable State Of ( true ) ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ parent Measures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ parent Layouts Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout After Pl acing Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠChanging Parent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Measure Ġ= Ġ{ Ġread Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( on Measure Ġ= Ġ{ Ġ++ child Measures Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġparent Measures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġchild Measures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 1 9 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġoffset Ġby Ġmutable State Of ( Int Offset . Zero ) ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( read During Layout Before Pl acing Ġ= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider ( modifier Ġ= ĠModifier . offset Ġ{ Ġoffset Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= ĠInt Offset ( 1 0 , Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Position Ġ+= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . waitFor Idle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 2 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Layouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġoffset Ġby Ġmutable State Of ( Int Offset . Zero ) ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( read During Layout Before Pl acing Ġ= Ġtrue , Ġon Layout Ġ= Ġ{ Ġ++ parent Layouts Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider ( modifier Ġ= ĠModifier . offset Ġ{ Ġoffset Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoffset Ġ= ĠInt Offset ( 1 0 , Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline Position Ġ+= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . waitFor Idle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 2 1 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Measures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġread Ġby Ġmutable State Of ( false ) ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠChanging Parent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Measure Ġ= Ġ{ Ġread Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ parent Measures Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġparent Measures ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 2 2 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġparent Layouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġread Ġby Ġmutable State Of ( false ) ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠChanging Parent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout Before Pl acing Ġ= Ġ{ Ġread Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ parent Layouts Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġparent Layouts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 2 3 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġobtained Position Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchanging State Ġby Ġmutable State Of ( false ) ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġmeas ur ables , Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur ables . first (). measure ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( constraints . maxWidth , Ġconstraints . max Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( changing State ) Ġrequire ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobtained Position Ġ= Ġplace able [ Test Line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace able . place ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġobtained Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanging State Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġobtained Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 2 4 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġobtained Position Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġchanging State Ġby Ġmutable State Of ( false ) ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLayout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġmeas ur ables , Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur ables . first (). measure ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( constraints . maxWidth , Ġconstraints . max Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( changing State ) Ġrequire ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace able . place ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobtained Position Ġ= Ġplace able [ Test Line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġobtained Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchanging State Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġobtained Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 2 5 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġobtained Position Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( modifier Ġ= ĠModifier . on Glob ally Position ed Ġ{ Ġobtained Position Ġ= Ġit [ Test Line ] Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġobtained Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġobtained Position ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 2 6 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . reader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Measure Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout Before Pl acing Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 2 7 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . reader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout Before Pl acing Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġscenario 2 8 () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġmeasures Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġlayouts Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġrule . setContent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠParent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . reader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout After Pl acing Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure Ġ= Ġ{ Ġ++ meas ures Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout Ġ= Ġ{ Ġ++ layouts Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠParent Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠProvider () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġlayouts ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchange Line Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmeasures ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġlayouts ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġline Position Ġ= Ġ 1 0 ĊĠĠĠ Ġprivate Ġvar Ġline Position State Ġby Ġmutable State Of ( 1 0 ) ĊĠĠĠ Ġprivate Ġfun Ġchange Line Position () Ġ{ ĊĠĠĠĠĠĠĠ Ġline Position Ġ+= Ġ 1 0 ĊĠĠĠĠĠĠĠ Ġline Position State Ġ+= Ġ 1 0 ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġval ĠTest Line Ġ= ĠHorizontal Alignment Line (:: min ) ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġprivate Ġfun ĠParent ( ĊĠĠĠĠĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠĠĠĠĠ Ġon Measure : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġon Layout : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġread During Measure : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġread During Layout Before Pl acing : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġread During Layout After Pl acing : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġcontent : Ġ@ Composable Ġ() Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠChanging Parent ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġread During Measure Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġread During Layout Before Pl acing Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġread During Layout After Pl acing Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġprivate Ġfun ĠChanging Parent ( ĊĠĠĠĠĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠĠĠĠĠ Ġon Measure : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġon Layout : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġread During Measure : Ġ() Ġ-> ĠBoolean Ġ= Ġ{ Ġfalse Ġ}, ĊĠĠĠĠĠĠĠ Ġread During Layout Before Pl acing : Ġ() Ġ-> ĠBoolean Ġ= Ġ{ Ġfalse Ġ}, ĊĠĠĠĠĠĠĠ Ġread During Layout After Pl acing : Ġ() Ġ-> ĠBoolean Ġ= Ġ{ Ġfalse Ġ}, ĊĠĠĠĠĠĠĠ Ġcontent : Ġ@ Composable Ġ() Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLayout ( content , Ġmodifier ) Ġ{ Ġmeas ur ables , Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace ables Ġ= Ġmeas ur ables . map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . measure ( constraints ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read During Measure ()) ĠassertEquals ( line Position , Ġit [ Test Line ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( constraints . maxWidth , Ġconstraints . max Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace ables . forEach Ġ{ Ġplace able Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read During Layout Before Pl acing ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġplace able [ Test Line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġplace able [ Test Line ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace able . place ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read During Layout After Pl acing ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġplace able [ Test Line ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( line Position , Ġplace able [ Test Line ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Composable ĊĠĠĠ Ġprivate Ġfun ĠProvider ( ĊĠĠĠĠĠĠĠ Ġmodifier : ĠModifier Ġ= ĠModifier , ĊĠĠĠĠĠĠĠ Ġon Measure : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġon Layout : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġcontent : Ġ@ Composable Ġ() Ġ-> ĠUnit Ġ= Ġ{} ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLayout ( content , Ġmodifier ) Ġ{ Ġ_, Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints . maxWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints . max Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( Test Line Ġto Ġline Position State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠModifier . reader ( ĊĠĠĠĠĠĠĠ Ġon Measure : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġon Layout : Ġ() Ġ-> ĠUnit Ġ= Ġ{}, ĊĠĠĠĠĠĠĠ Ġread During Measure : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġread During Layout Before Pl acing : ĠBoolean Ġ= Ġfalse , ĊĠĠĠĠĠĠĠ Ġread During Layout After Pl acing : ĠBoolean Ġ= Ġfalse ĊĠĠĠ Ġ) Ġ= Ġthis . then ( ĊĠĠĠĠĠĠĠ ĠReader Modifier ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread During Measure , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout Before Pl acing , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread During Layout After Pl acing ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġinner Ġclass ĠReader Modifier ( ĊĠĠĠĠĠĠĠ Ġval Ġon Measure : Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġval Ġon Layout : Ġ() Ġ-> ĠUnit , ĊĠĠĠĠĠĠĠ Ġval Ġread During Measure : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġread During Layout Before Pl acing : ĠBoolean , ĊĠĠĠĠĠĠĠ Ġval Ġread During Layout After Pl acing : ĠBoolean ĊĠĠĠ Ġ) Ġ: ĠLayout Modifier Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠMeasure Scope . measure ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeas ur able : ĠMe as ur able , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints : ĠConstraints ĊĠĠĠĠĠĠĠ Ġ): ĠMeasure Result Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Measure () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur able . measure ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read During Measure ) ĠassertEquals ( line Position , Ġplace able [ Test Line ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlayout ( constraints . maxWidth , Ġconstraints . max Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Layout () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read During Layout Before Pl acing ) ĠassertEquals ( line Position , Ġplace able [ Test Line ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace able . place ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read During Layout After Pl acing ) ĠassertEquals ( line Position , Ġplace able [ Test Line ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠModifier . provider () Ġ= Ġthis . then ( Provider Modifier ()) ĊĠĠĠ Ġprivate Ġinner Ġclass ĠProvider Modifier Ġ: ĠLayout Modifier Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠMeasure Scope . measure ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeas ur able : ĠMe as ur able , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints : ĠConstraints ĊĠĠĠĠĠĠĠ Ġ): ĠMeasure Result Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur able . measure ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġlayout ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints . maxWidth , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconstraints . max Height , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( Test Line Ġto Ġline Position State ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace able . place ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġother Ġis ĠProvider Modifier ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠModifier . supply Alignment Lines ( alignment Lines : Ġ() Ġ-> ĠMap < Alignment Line , ĠInt >) Ġ= ĊĠĠĠĠĠĠĠ Ġlayout Ġ{ Ġmeas ur able , Ġconstraints Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġplace able Ġ= Ġmeas ur able . measure ( constraints ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout ( place able . width , Ġplace able . height , Ġalignment Lines ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġplace able . place ( 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ }