/* Ċ Ġ* Ġ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 . foundation . lazy . grid Ċ Ċ import Ġandroidx . compose . foundation . Experimental Foundation Api Ċ import Ġandroidx . compose . foundation . layout . Box Ċ import Ġandroidx . compose . foundation . layout . height Ċ import Ġandroidx . compose . foundation . layout . required Size Ċ import Ġandroidx . compose . foundation . layout . size Ċ import Ġandroidx . compose . foundation . layout . width Ċ import Ġandroidx . compose . foundation . lazy . Grid Cells Ċ import Ġandroidx . compose . foundation . lazy . Lazy Grid State Ċ import Ġandroidx . compose . foundation . lazy . Lazy Vertical Grid Ċ import Ġandroidx . compose . foundation . lazy . items Ċ import Ġandroidx . compose . foundation . lazy . list . scroll By Ċ import Ġandroidx . compose . foundation . lazy . list . setContent With Test View Configuration Ċ import Ġandroidx . compose . foundation . lazy . remember Lazy Grid State Ċ 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 . platform . test Tag Ċ import Ġandroidx . compose . ui . test . assert Left Position In Root Is EqualTo Ċ import Ġandroidx . compose . ui . test . assert Top Position In Root Is EqualTo Ċ import Ġandroidx . compose . ui . test . junit 4 . create Compose Rule Ċ import Ġandroidx . compose . ui . test . on Node With Tag Ċ import Ġandroidx . compose . ui . unit . Dp Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . junit . Before Ċ import Ġorg . junit . Rule Ċ import Ġorg . junit . Test Ċ Ċ @ Opt In ( Experimental Foundation Api :: class ) Ċ class ĠLazy Grid s Reverse Layout Test Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠContainer Tag Ġ= Ġ" Container Tag " ĊĊĠĠĠ Ġ@ get : Rule ĊĠĠĠ Ġval Ġrule Ġ= Ġcreate Compose Rule () ĊĊĠĠĠ Ġprivate Ġvar Ġitem Size : ĠD p Ġ= ĠD p . Infinity ĊĊĠĠĠ Ġ@ Before ĊĠĠĠ Ġfun Ġbefore () Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( rule . density ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġitem Size Ġ= Ġ 5 0 . to Dp () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġvertical Grid _ reverse Layout () Ġ{ ĊĠĠĠĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Vertical Grid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid Cells . Fixed ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . width ( item Size Ġ* Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . height ( item Size ). test Tag ( it . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcolumn _ emit Two Elements As One Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Vertical Grid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid Cells . Fixed ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . width ( item Size Ġ* Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . height ( item Size ). test Tag (( it Ġ* Ġ 2 ). toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . height ( item Size ). test Tag (( it Ġ* Ġ 2 Ġ+ Ġ 1 ). toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 4 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 6 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 7 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġvertical Grid _ initial Scroll Position Is 0 () Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġstate : ĠLazy Grid State ĊĠĠĠĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Vertical Grid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid Cells . Fixed ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġremember Lazy Grid State (). also Ġ{ Ġstate Ġ= Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . size ( item Size Ġ* Ġ 2 ). test Tag ( Container Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems (( 0 .. 5 ). toList ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . size ( item Size ). test Tag ("$ it ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Scroll Offset ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Index ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġvertical Grid _ scroll In Wrong Direction Does Nothing () Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġstate : ĠLazy Grid State ĊĠĠĠĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Vertical Grid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid Cells . Fixed ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġremember Lazy Grid State (). also Ġ{ Ġstate Ġ= Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . size ( item Size Ġ* Ġ 2 ). test Tag ( Container Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems (( 0 .. 2 ). toList ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . size ( item Size ). test Tag ("$ it ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġscroll Ġdown Ġand Ġas Ġthe Ġscrolling Ġis Ġreversed Ġit Ġshouldn 't Ġaffect Ġanything ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag ( Container Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. scroll By ( y Ġ= Ġitem Size , Ġdensity Ġ= Ġrule . density ) ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Scroll Offset ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Index ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġvertical Grid _ scroll Forward Half Way () Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġstate : ĠLazy Grid State ĊĠĠĠĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Vertical Grid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid Cells . Fixed ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġremember Lazy Grid State (). also Ġ{ Ġstate Ġ= Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . required Size ( item Size Ġ* Ġ 2 ). test Tag ( Container Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems (( 0 .. 2 ). toList ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag ("$ it ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag ( Container Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. scroll By ( y Ġ= Ġ- item Size Ġ* Ġ 0 . 5 f , Ġdensity Ġ= Ġrule . density ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsc rolled Ġ= Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Scroll Offset ). is GreaterThan ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Index ). isEqualTo ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( rule . density ) Ġ{ Ġstate . first Visible Item Scroll Offset . to Dp () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo (- item Size Ġ+ Ġsc rolled ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( sc rolled ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size Ġ+ Ġsc rolled ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġvertical Grid _ scroll Forward T ill The End () Ġ{ ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġstate : ĠLazy Grid State ĊĠĠĠĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Vertical Grid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid Cells . Fixed ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġremember Lazy Grid State (). also Ġ{ Ġstate Ġ= Ġit Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . size ( item Size Ġ* Ġ 2 ). test Tag ( Container Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems (( 0 .. 3 ). toList ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . size ( item Size ). test Tag ("$ it ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġwe Ġscroll Ġa Ġbit Ġmore Ġthan Ġit Ġis Ġpossible Ġjust Ġto Ġmake Ġsure Ġwe Ġwould Ġstop Ġcorrectly ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag ( Container Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. scroll By ( y Ġ= Ġ- item Size Ġ* Ġ 2 . 2 f , Ġdensity Ġ= Ġrule . density ) ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( rule . density ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal Offset Ġ= Ġstate . first Visible Item Scroll Offset . to Dp () Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Size Ġ* Ġstate . first Visible Item Index ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( real Offset ). isEqualTo ( item Size Ġ* Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ@ Test ĊĠĠĠ Ġ// Ġfun Ġrow _ emit Two Elements As One Item _ position ed Re versed () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠLazy Row ( ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag (" 0 ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag (" 1 ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠ Ġ// Ġ} ĊĊĠĠĠ Ġ// Ġ@ Test ĊĠĠĠ Ġ// Ġfun Ġrow _ emit Two Items _ position ed Re versed () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠLazy Row ( ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag (" 0 ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag (" 1 ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠ Ġ// Ġ} ĊĊĠĠĠ Ġ// Ġ@ Test ĊĠĠĠ Ġ// Ġfun Ġrow _ initial Scroll Position Is 0 () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠ Ġlateinit Ġvar Ġstate : ĠLazy List State ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠLazy Row ( ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue , ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġremember Lazy List State (). also Ġ{ Ġstate Ġ= Ġit Ġ}, ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . required Size ( item Size Ġ* Ġ 2 ). test Tag ( Container Tag ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems (( 0 .. 2 ). toList ()) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag ("$ it ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Scroll Offset ). isEqualTo ( 0 ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Index ). isEqualTo ( 0 ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĠĠĠ Ġ// Ġ} ĊĊĠĠĠ Ġ// Ġ@ Test ĊĠĠĠ Ġ// Ġfun Ġrow _ scroll In Wrong Direction Does Nothing () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠ Ġlateinit Ġvar Ġstate : ĠLazy List State ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠLazy Row ( ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue , ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġremember Lazy List State (). also Ġ{ Ġstate Ġ= Ġit Ġ}, ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . required Size ( item Size Ġ* Ġ 2 ). test Tag ( Container Tag ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems (( 0 .. 2 ). toList ()) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag ("$ it ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġ// Ġwe Ġscroll Ġdown Ġand Ġas Ġthe Ġscrolling Ġis Ġreversed Ġit Ġshouldn 't Ġaffect Ġanything ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag ( Container Tag ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. scroll By ( x Ġ= Ġitem Size , Ġdensity Ġ= Ġrule . density ) ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Scroll Offset ). isEqualTo ( 0 ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Index ). isEqualTo ( 0 ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠ Ġ// Ġ} ĊĊĠĠĠ Ġ// Ġ@ Test ĊĠĠĠ Ġ// Ġfun Ġrow _ scroll Forward Half Way () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠ Ġlateinit Ġvar Ġstate : ĠLazy List State ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠLazy Row ( ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue , ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġremember Lazy List State (). also Ġ{ Ġstate Ġ= Ġit Ġ}, ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . required Size ( item Size Ġ* Ġ 2 ). test Tag ( Container Tag ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems (( 0 .. 2 ). toList ()) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag ("$ it ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag ( Container Tag ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. scroll By ( x Ġ= Ġ- item Size Ġ* Ġ 0 . 5 f , Ġdensity Ġ= Ġrule . density ) ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġval Ġsc rolled Ġ= Ġrule . run On Idle Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Scroll Offset ). is GreaterThan ( 0 ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Index ). isEqualTo ( 0 ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġwith ( rule . density ) Ġ{ Ġstate . first Visible Item Scroll Offset . to Dp () Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 2 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo (- item Size Ġ+ Ġsc rolled ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( sc rolled ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size Ġ+ Ġsc rolled ) ĊĠĠĠ Ġ// Ġ} ĊĊĠĠĠ Ġ// Ġ@ Test ĊĠĠĠ Ġ// Ġfun Ġrow _ scroll Forward T ill The End () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠ Ġlateinit Ġvar Ġstate : ĠLazy List State ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠLazy Row ( ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue , ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġremember Lazy List State (). also Ġ{ Ġstate Ġ= Ġit Ġ}, ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . required Size ( item Size Ġ* Ġ 2 ). test Tag ( Container Tag ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems (( 0 .. 3 ). toList ()) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag ("$ it ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġ// Ġwe Ġscroll Ġa Ġbit Ġmore Ġthan Ġit Ġis Ġpossible Ġjust Ġto Ġmake Ġsure Ġwe Ġwould Ġstop Ġcorrectly ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag ( Container Tag ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. scroll By ( x Ġ= Ġ- item Size Ġ* Ġ 2 . 2 f , Ġdensity Ġ= Ġrule . density ) ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġwith ( rule . density ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreal Offset Ġ= Ġstate . first Visible Item Scroll Offset . to Dp () Ġ+ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Size Ġ* Ġstate . first Visible Item Index ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertThat ( real Offset ). isEqualTo ( item Size Ġ* Ġ 2 ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 3 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 2 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠ Ġ// Ġ} ĊĊĠĠĠ Ġ// Ġ@ Test ĊĠĠĠ Ġ// Ġfun Ġrow _ rtl _ emit Two Elements As One Item _ position ed Re versed () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠComp osition Local Provider ( Local Layout Direction Ġprovides ĠLayout Direction . R tl ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Row ( ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag (" 0 ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag (" 1 ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠ Ġ// Ġ} ĊĊĠĠĠ Ġ// Ġ@ Test ĊĠĠĠ Ġ// Ġfun Ġrow _ rtl _ emit Two Items _ position ed Re versed () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠComp osition Local Provider ( Local Layout Direction Ġprovides ĠLayout Direction . R tl ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Row ( ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag (" 0 ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag (" 1 ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠ Ġ// Ġ} ĊĊĠĠĠ Ġ// Ġ@ Test ĊĠĠĠ Ġ// Ġfun Ġrow _ rtl _ scroll Forward Half Way () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠ Ġlateinit Ġvar Ġstate : ĠLazy List State ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠComp osition Local Provider ( Local Layout Direction Ġprovides ĠLayout Direction . R tl ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Row ( ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġtrue , ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Ġ= Ġremember Lazy List State (). also Ġ{ Ġstate Ġ= Ġit Ġ}, ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . required Size ( item Size Ġ* Ġ 2 ). test Tag ( Container Tag ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems (( 0 .. 2 ). toList ()) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag ("$ it ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag ( Container Tag ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. scroll By ( x Ġ= Ġitem Size Ġ* Ġ 0 . 5 f , Ġdensity Ġ= Ġrule . density ) ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġval Ġsc rolled Ġ= Ġrule . run On Idle Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Scroll Offset ). is GreaterThan ( 0 ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠassertThat ( state . first Visible Item Index ). isEqualTo ( 0 ) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġwith ( rule . density ) Ġ{ Ġstate . first Visible Item Scroll Offset . to Dp () Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo (- sc rolled ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size Ġ- Ġsc rolled ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 2 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size Ġ* Ġ 2 Ġ- Ġsc rolled ) ĊĠĠĠ Ġ// Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġvertical Grid _ when Parameter Changes () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġreverse Ġby Ġmutable State Of ( true ) ĊĠĠĠĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLazy Vertical Grid ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGrid Cells . Fixed ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠModifier . width ( item Size Ġ* Ġ 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġreverse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġitems ( 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . size ( item Size ). test Tag ( it . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĊĠĠĠĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 2 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠĠĠĠĠ Ġrule . on Node With Tag (" 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Top Position In Root Is EqualTo ( item Size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ@ Test ĊĠĠĠ Ġ// Ġfun Ġrow _ when Parameter Changes () Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠ Ġvar Ġreverse Ġby Ġmutable State Of ( true ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . setContent With Test View Configuration Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ ĠLazy Row ( ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġreverse Layout Ġ= Ġreverse ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġitem Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag (" 0 ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBox ( Modifier . required Size ( item Size ). test Tag (" 1 ")) ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . run On Idle Ġ{ ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġreverse Ġ= Ġfalse ĊĠĠĠ Ġ// ĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 0 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( 0 . dp ) ĊĠĠĠ Ġ// ĠĠĠĠ Ġrule . on Node With Tag (" 1 ") ĊĠĠĠ Ġ// ĠĠĠĠĠĠĠĠ Ġ. assert Left Position In Root Is EqualTo ( item Size ) ĊĠĠĠ Ġ// Ġ} Ċ } Ċ