@ file : Suppress (" FunctionName ") Ċ Ċ package Ġio . nac ular . do od le . drawing . impl Ċ Ċ import Ġio . mock k . Runs Ċ import Ġio . mock k . every Ċ import Ġio . mock k . just Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . slot Ċ import Ġio . mock k . spy k Ċ import Ġio . mock k . verify Ċ import Ġio . nac ular . do od le . accessibility . Accessibility Manager Ċ import Ġio . nac ular . do od le . core . Container Ċ import Ġio . nac ular . do od le . core . Display Ċ import Ġio . nac ular . do od le . core . Internal Display Ċ import Ġio . nac ular . do od le . core . View Ċ import Ġio . nac ular . do od le . drawing . Affine Transform . Companion . Identity Ċ import Ġio . nac ular . do od le . drawing . Canvas Ċ import Ġio . nac ular . do od le . drawing . Graphics Device Ċ import Ġio . nac ular . do od le . drawing . Graphics Surface Ċ import Ġio . nac ular . do od le . drawing . Render Manager Ċ import Ġio . nac ular . do od le . geometry . Rectangle Ċ import Ġio . nac ular . do od le . geometry . Size Ċ import Ġio . nac ular . do od le . geometry . times Ċ import Ġio . nac ular . do od le . scheduler . Animation Scheduler Ċ import Ġio . nac ular . do od le . scheduler . Task Ċ import Ġio . nac ular . do od le . theme . Internal Theme Manager Ċ import Ġio . nac ular . do od le . utils . Change Observer Ċ import Ġio . nac ular . do od le . utils . List Observer Ċ import Ġio . nac ular . do od le . utils . Observable List Ċ import Ġio . nac ular . do od le . utils . Pool Ċ import Ġio . nac ular . do od le . utils . Property Observer Ċ import Ġio . nac ular . meas ured . units . Angle . Companion . degrees Ċ import Ġio . nac ular . meas ured . units . Measure Ċ import Ġio . nac ular . meas ured . units . Time Ċ import Ġio . nac ular . meas ured . units . Time . Companion . milliseconds Ċ import Ġio . nac ular . meas ured . units . times Ċ import Ġkotlin . js . Js Name Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . expect Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠN ich olas ĠE ddy Ġon Ġ 1 1 / 6 / 1 7 . Ċ Ġ*/ Ċ class ĠRender ManagerImpl Tests Ġ{ ĊĠĠĠ Ġ// ĠTODO : ĠAdd Ġlayout Ġtests ĊĠĠĠ Ġ// ĠTODO : ĠAdd Ġtests Ġto Ġmake Ġsure Ġthings Ġin Ġcleanup Ġlist Ġnever Ġget Ġrendered ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" renders Are B atched ") ĊĠĠĠ Ġfun Ġ` renders Ġare Ġb atched `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview ĠĠĠĠĠ Ġ= Ġspy k < View >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 , Ġ 1 0 0 )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Ġ= ĠManual Animation Scheduler () ĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠ Ġ= Ġdisplay ( view ) ĊĊĠĠĠĠĠĠĠ Ġview . visible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display , Ġscheduler Ġ= Ġscheduler ) ĊĊĠĠĠĠĠĠĠ Ġview . visible Ġ Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġview . size ĠĠĠ Ġ*= Ġ 2 . 0 ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġview . render ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġview ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" lay s Out Display On Size Change ") ĊĠĠĠ Ġfun Ġ` lay s Ġout Ġdisplay Ġon Ġsize Ġchange `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġdisplay ( view ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < Property Observer < Display , ĠSize >>() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdisplay . size Changed . plus Assign ( capture ( slot )) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġdisplay . re layout () Ġ} ĊĊĠĠĠĠĠĠĠ Ġslot . captured ( display , Ġdisplay . size , Ġdisplay . size Ġ* Ġ 2 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġdisplay . re layout () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" lay s Out Display On New Child ") ĊĠĠĠ Ġfun Ġ` lay s Ġout Ġdisplay Ġon Ġnew Ġchild `() Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġdisplay ( view ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġslot Ġ= Ġslot < List Observer < View >>() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdisplay . children . changed . plus Assign ( capture ( slot )) Ġ} Ġjust ĠRuns ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġdisplay . re layout () Ġ} ĊĊĠĠĠĠĠĠĠ Ġslot . captured ( display . children , Ġempty Map (), Ġmap Of ( 1 Ġto Ġview ()), Ġempty Map ()) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġdisplay . re layout () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" lay s Out Display On Child Bounds Change ") ĊĠĠĠ Ġfun Ġ` lay s Ġout Ġdisplay Ġon Ġchild Ġbounds Ġchange `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġspy k < View >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġdisplay ( child ) ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġdisplay . re layout () Ġ} ĊĊĠĠĠĠĠĠĠ Ġchild . width Ġ+= Ġ 1 0 ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġdisplay . re layout () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" render Ig no res Unknown Views ") ĊĠĠĠ Ġfun Ġ` render Ġignores Ġunknown Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġspy k ( view ()) ĊĊĠĠĠĠĠĠĠ Ġrender Manager (). first . render ( view ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġview . render ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" renders Displayed Views ") ĊĠĠĠ Ġfun Ġ` renders Ġdisplayed Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġviews ĠĠĠĠĠĠĠĠ Ġ= Ġ( 0 Ġuntil Ġ 2 ). map To ( mutable ListOf ()) Ġ{ Ġspy k ( view ()) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠĠĠĠĠ Ġ= Ġdisplay (* views . to Typed Array ()) ĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġviews . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" renders New Views ") ĊĠĠĠ Ġfun Ġ` renders Ġnew Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġspy k ( view ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠĠĠĠĠĠ Ġ= Ġdisplay () ĊĠĠĠĠĠĠĠ Ġval Ġsurface ĠĠĠĠĠĠĠ Ġ= Ġmock k < Graphics Surface >() ĊĠĠĠĠĠĠĠ Ġval Ġgraphics Device Ġ= Ġgraphics Device ( map Of ( child Ġto Ġsurface )) ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display , Ġgraphics Device Ġ= Ġgraphics Device ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġchild . render ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġdisplay . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġchild ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbounds ĠĠĠ Ġ= Ġchild . bounds ĊĠĠĠĠĠĠĠ Ġval Ġtransform Ġ= Ġchild . transform ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġsurface Ġset Property Ġ" bounds " ĠĠĠ Ġvalue Ġbounds ĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġsurface Ġset Property Ġ" transform " Ġvalue Ġtransform Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" re moves TopLevel Views ") ĊĠĠĠ Ġfun Ġ` re moves Ġtop - level Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġspy k < Container >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 . 0 , Ġ 1 0 . 0 )); Ġchildren Ġ+= Ġspy k ( view ()). apply Ġ{ Ġchildren Ġ+= Ġspy k ( view ()) Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠ Ġ= Ġdisplay ( container ) ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Ġ= ĠManual Animation Scheduler () ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display , Ġscheduler Ġ= Ġscheduler ) ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġcontainer ) ĊĊĠĠĠĠĠĠĠ Ġdisplay . children . remove ( container ) ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Child Removed Pro per ly ( container ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" noop Remove Add TopLevel Views ") ĊĠĠĠ Ġfun Ġ` no - op Ġremove , Ġadd Ġtop - level Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer 1 Ġ= Ġspy k < Container >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 . 0 , Ġ 1 0 . 0 )); Ġchildren Ġ+= Ġspy k ( view ()). apply Ġ{ Ġchildren Ġ+= Ġspy k ( view ()) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcontainer 2 Ġ= Ġspy k < Container >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 . 0 , Ġ 1 0 . 0 )); Ġchildren Ġ+= Ġspy k ( view ()). apply Ġ{ Ġchildren Ġ+= Ġspy k ( view ()) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠĠ Ġ= Ġdisplay ( container 1 , Ġcontainer 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġsurface 1 ĠĠ Ġ= Ġmock k < Graphics Surface >() ĊĠĠĠĠĠĠĠ Ġval Ġsurface 2 ĠĠ Ġ= Ġmock k < Graphics Surface >() ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display Ġ= Ġdisplay , Ġgraphics Device Ġ= Ġgraphics Device ( map Of ( container 1 Ġto Ġsurface 1 , Ġcontainer 2 Ġto Ġsurface 2 ))) ĊĊĠĠĠĠĠĠĠ ĠlistOf ( container 1 , Ġcontainer 2 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdisplay . children . move ( container 2 , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġsurface 2 . index Ġ= Ġ 0 Ġ} ĊĊĠĠĠĠĠĠĠ ĠlistOf ( container 1 , Ġcontainer 2 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġit . removed From Display _( ĠĠĠĠ Ġ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġit . render ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( any ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġit . do Layout _ ĠĠĠĠĠĠĠĠĠ Ġ( ĠĠĠĠ Ġ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" z Order Change TopLevel Views ") ĊĠĠĠ Ġfun Ġ` z - order Ġchange Ġtop - level Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer 1 Ġ= Ġspy k < Container >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 . 0 , Ġ 1 0 . 0 )); Ġchildren Ġ+= Ġspy k ( view ()). apply Ġ{ Ġchildren Ġ+= Ġspy k ( view ()) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcontainer 2 Ġ= Ġspy k < Container >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 . 0 , Ġ 1 0 . 0 )); Ġchildren Ġ+= Ġspy k ( view ()). apply Ġ{ Ġchildren Ġ+= Ġspy k ( view ()) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠĠ Ġ= Ġdisplay ( container 1 , Ġcontainer 2 ) ĊĠĠĠĠĠĠĠ Ġval Ġsurface 1 ĠĠ Ġ= Ġmock k < Graphics Surface >() ĊĠĠĠĠĠĠĠ Ġval Ġsurface 2 ĠĠ Ġ= Ġmock k < Graphics Surface >() ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display Ġ= Ġdisplay , Ġgraphics Device Ġ= Ġgraphics Device ( map Of ( container 1 Ġto Ġsurface 1 , Ġcontainer 2 Ġto Ġsurface 2 ))) ĊĊĠĠĠĠĠĠĠ ĠlistOf ( container 1 , Ġcontainer 2 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontainer 2 . z Order Ġ= Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġsurface 2 . z Order Ġ= Ġ 3 Ġ} ĊĊĠĠĠĠĠĠĠ ĠlistOf ( container 1 , Ġcontainer 2 ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġit . removed From Display _( ĠĠĠĠ Ġ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġit . render ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( any ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġit . do Layout _ ĠĠĠĠĠĠĠĠĠ Ġ( ĠĠĠĠ Ġ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" re moves Nested Views ") ĊĠĠĠ Ġfun Ġ` re moves Ġnested Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġspy k < Container >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 . 0 , Ġ 1 0 . 0 )); Ġchildren Ġ+= Ġspy k ( view ()). apply Ġ{ Ġchildren Ġ+= Ġspy k ( view ()) Ġ} Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠ Ġ= Ġdisplay ( container ) ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Ġ= ĠManual Animation Scheduler () ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display , Ġscheduler Ġ= Ġscheduler ) ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġcontainer ) ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Child Ġ= Ġcontainer . children . first () ĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ-= Ġfirst Child ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Child Removed Pro per ly ( firstChild ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" rer enders On Bounds Changed ") ĊĠĠĠ Ġfun Ġ` rer enders Ġon Ġbounds Ġchanged `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview ĠĠĠĠĠĠĠĠĠ Ġ= Ġspy k < View >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠĠĠĠĠ Ġ= Ġdisplay ( view ) ĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġview ) ĊĊĠĠĠĠĠĠĠ Ġview . size Ġ*= Ġ 2 . 0 ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 2 ) Ġ{ Ġview . render ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" rer enders On Be coming Visible ") ĊĠĠĠ Ġfun Ġ` rer enders Ġon Ġbecoming Ġvisible `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview ĠĠĠ Ġ= Ġspy k < View >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġdisplay ( view ) ĊĊĠĠĠĠĠĠĠ Ġview . visible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġview , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġview . visible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġview ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" rer enders On Added Be coming Visible ") ĊĠĠĠ Ġfun Ġ` rer enders Ġon Ġadded Ġbecoming Ġvisible `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparent Ġ Ġ= Ġcontainer () ĊĠĠĠĠĠĠĠ Ġval Ġview ĠĠĠ Ġ= Ġspy k < View >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġdisplay ( parent ) ĊĊĠĠĠĠĠĠĠ Ġview . visible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġview . added To Display ( display , Ġrender Manager . first , Ġany ()) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġview . render ĠĠĠĠĠĠĠ Ġ( any () ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġparent . children _ Ġ+= Ġview ĊĊĠĠĠĠĠĠĠ Ġview . visible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġview ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" does Not R er ender On Bounds Zero ed ") ĊĠĠĠ Ġfun Ġ` does Ġnot Ġrer ender Ġon Ġbounds Ġzero ed `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview ĠĠĠĠĠĠĠĠĠ Ġ= Ġspy k < View >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠĠĠĠĠ Ġ= Ġdisplay ( view ) ĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġview ) ĊĊĠĠĠĠĠĠĠ Ġview . size Ġ*= Ġ 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . render ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" does Not R er ender On Position Changed ") ĊĠĠĠ Ġfun Ġ` does Ġnot Ġrer ender Ġon Ġposition Ġchanged `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview ĠĠĠĠĠĠĠĠĠ Ġ= Ġspy k < View >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠĠĠĠĠ Ġ= Ġdisplay ( view ) ĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġview ) ĊĊĠĠĠĠĠĠĠ Ġview . x Ġ*= Ġ 2 . 0 ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . render ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" does Not R er ender On Size Zero ed ") ĊĠĠĠ Ġfun Ġ` does Ġnot Ġre - render Ġon Ġsize Ġzero ed `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview ĠĠĠĠĠĠĠĠĠ Ġ= Ġspy k < View >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠĠĠĠĠ Ġ= Ġdisplay ( view ) ĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġview ) ĊĊĠĠĠĠĠĠĠ Ġview . size Ġ= ĠSize . Empty ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . render ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" renders Pre Existing Nested Views ") ĊĠĠĠ Ġfun Ġ` renders Ġpre - existing Ġnested Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġcontainer () ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠ Ġ= Ġspy k ( view ()) ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġdisplay ( container ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġchild ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" renders Re Added Nested Views ") ĊĠĠĠ Ġfun Ġ` renders Ġre - added Ġnested Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġcontainer () ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠ Ġ= Ġspy k ( view ()) ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġdisplay ( container ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ-= Ġchild ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġchild , Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" renders New Nested Views ") ĊĠĠĠ Ġfun Ġ` renders Ġnew Ġnested Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġcontainer () ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠ Ġ= Ġspy k ( view ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġdisplay ( container ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġview () ĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġview () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġchild . render ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġchild ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" renders New Nested View Inserted ") ĊĠĠĠ Ġfun Ġ` renders Ġnew Ġnested Ġview Ġinserted `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġcontainer () ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠ Ġ= Ġspy k ( view ()) ĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠ Ġ= Ġdisplay ( container ) ĊĠĠĠĠĠĠĠ Ġval Ġsurface ĠĠ Ġ= Ġmock k < Graphics Surface >() ĊĠĠĠĠĠĠĠ Ġval Ġdevice ĠĠĠ Ġ= Ġgraphics Device ( map Of ( child Ġto Ġsurface )) ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display , Ġgraphics Device Ġ= Ġdevice ) ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġview () ĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġview () ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġchild . render ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontainer . children . add ( 1 , Ġchild ) ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġchild ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" does Not Render In visible Views ") ĊĠĠĠ Ġfun Ġ` does Ġnot Ġrender Ġinvisible Ġviews `() Ġ= Ġdoes Not Render ( spy k ( view ()). apply Ġ{ Ġvisible Ġ= Ġfalse Ġ}) ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" does Not Render In visible Children ") ĊĠĠĠ Ġfun Ġ` does Ġnot Ġrender Ġinvisible Ġchildren `() Ġ= Ġdoes Not Render Child ( spy k ( view ()). apply Ġ{ Ġvisible Ġ= Ġfalse Ġ}) ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" does Not Render Zero Bounds Views ") ĊĠĠĠ Ġfun Ġ` does Ġnot Ġrender Ġzero Ġbounds Ġviews `() Ġ= Ġdoes Not Render ( spy k ( view ()). apply Ġ{ Ġbounds Ġ= ĠRectangle . Empty Ġ}) ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" render Now Ig no res Unknown Views ") ĊĠĠĠ Ġfun Ġ` render Now Ġignores Ġunknown Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġspy k ( view ()) ĊĊĠĠĠĠĠĠĠ Ġrender Manager (). first . render Now ( view ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġview . render ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" render Now Works ") ĊĠĠĠ Ġfun Ġ` render Now Ġworks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġspy k ( view ()) ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display ( view )). also Ġ{ Ġ( render Manager , Ġ_) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . render ( any ()) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Manager . render Now ( view ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 2 ) Ġ{ Ġview . render ( any ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" re valid ates Parent When New Views ") ĊĠĠĠ Ġfun Ġ` re valid ates Ġparent Ġout Ġwhen Ġnew Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġspy k < Container >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠ Ġ= Ġview () ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġdisplay ( container ) ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġcontainer . re validate _() Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġcontainer . re validate _() Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" lay s Out Parent On Size Changed ") ĊĠĠĠ Ġfun Ġ` lay s Ġout Ġparent Ġon Ġsize Ġchanged `() Ġ= Ġverify Layout Ġ{ Ġit . size Ġ*= Ġ 2 . 0 Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" lay s Out Parent On Position Changed ") ĊĠĠĠ Ġfun Ġ` lay s Ġout Ġparent Ġon Ġposition Ġchanged `() Ġ= Ġverify Layout Ġ{ Ġit . x Ġ+= Ġ 2 . 0 Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" lay s Out Parent On Visibility Changed ") ĊĠĠĠ Ġfun Ġ` lay s Ġout Ġparent Ġon Ġvisibility Ġchanged `() Ġ= Ġverify Layout Ġ{ Ġit . visible Ġ= Ġfalse Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" reflect s Visibility Change ") ĊĠĠĠ Ġfun Ġ` reflect s Ġvisibility Ġchange `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġspy k < Container > Ġ(" xyz "). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠ Ġ= Ġspy k < View >( ĠĠĠĠ Ġ). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( Ġ 1 0 . 0 , ĠĠ 1 0 . 0 )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġval Ġparent Surface Ġ Ġ= Ġmock k < Graphics Surface > Ġ Ġ() ĊĠĠĠĠĠĠĠ Ġval Ġchild Surface ĠĠ Ġ= Ġmock k < Graphics Surface > Ġ Ġ() ĊĠĠĠĠĠĠĠ Ġval Ġgraphics Device Ġ= Ġmock k < Graphics Device <* >> (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġget ( container ) Ġ} Ġreturns Ġparent Surface ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġget ( child ĠĠĠ Ġ) Ġ} Ġreturns Ġchild Surface ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display ( container ), Ġgraphics Device Ġ= Ġgraphics Device ) ĊĊĠĠĠĠĠĠĠ Ġchild . visible Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġchild Surface . visible Ġ= Ġfalse Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġchild Surface . visible Ġ= Ġtrue Ġ Ġ} ĊĊĠĠĠĠĠĠĠ Ġchild . visible Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġchild Surface . visible Ġ= Ġtrue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" reflect s Transform Change ") ĊĠĠĠ Ġfun Ġ` reflect s Ġtransform Ġchange `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġspy k < View >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 . 0 , Ġ 1 0 . 0 )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Surface ĠĠ Ġ= Ġmock k < Graphics Surface > Ġ Ġ() ĊĠĠĠĠĠĠĠ Ġval Ġgraphics Device Ġ= Ġgraphics Device ( map Of ( child Ġto Ġchild Surface )) ĊĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display ( child ), Ġgraphics Device Ġ= Ġgraphics Device ) ĊĊĠĠĠĠĠĠĠ Ġchild . transform Ġ= ĠIdentity . rotate ( 4 5 Ġ* Ġdegrees ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġchild Surface . transform Ġ= ĠIdentity . rotate ( 4 5 Ġ* Ġdegrees ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġchild . transform Ġ= ĠIdentity . rotate ( 5 7 Ġ* Ġdegrees ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġchild Surface . transform Ġ= ĠIdentity . rotate ( 5 7 Ġ* Ġdegrees ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" install s Theme For Displayed Views ") ĊĠĠĠ Ġfun Ġ` install s Ġtheme Ġfor Ġdisplayed Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġspy k < Container >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠ Ġ= Ġview () ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠĠĠĠ Ġ= Ġdisplay ( container ) ĊĠĠĠĠĠĠĠ Ġval Ġtheme Manager Ġ= Ġmock k < Internal Theme Manager >() ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display , Ġtheme Manager Ġ= Ġtheme Manager ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġtheme Manager . update ( container ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġtheme Manager . update ( child ĠĠĠ Ġ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" install s Theme For Re Added Views ") ĊĠĠĠ Ġfun Ġ` install s Ġtheme Ġfor Ġre - added Ġviews `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġspy k < Container >(). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠ Ġ= Ġview () ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠĠĠĠ Ġ= Ġdisplay ( container ) ĊĠĠĠĠĠĠĠ Ġval Ġtheme Manager Ġ= Ġmock k < Internal Theme Manager >() ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display , Ġtheme Manager Ġ= Ġtheme Manager ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġtheme Manager . update ( container ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġtheme Manager . update ( child ĠĠĠ Ġ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ-= Ġchild ĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 2 ) Ġ{ Ġtheme Manager . update ( child ĠĠĠ Ġ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" re moves When Re Added TopLevel ") ĊĠĠĠ Ġfun Ġ` renders Ġremoved Ġwhen Ġre - added Ġ( top - level )` () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠ Ġ= Ġspy k ( view ()) ĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠ Ġ= Ġdisplay ( child ) ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Ġ= ĠManual Animation Scheduler () ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display , Ġscheduler Ġ= Ġscheduler ) ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġdisplay . children Ġ-= Ġchild ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġhappens Ġbefore Ġnext Ġrender ĊĊĠĠĠĠĠĠĠ Ġdisplay . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġchild , Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" no Op Removed Re Added Same Parent ") ĊĠĠĠ Ġfun Ġ` no - op Ġremoved Ġre - added Ġsame Ġparent `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠ Ġ= Ġspy k ( view ()) ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġcontainer () ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠ Ġ= Ġdisplay ( container ) ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Ġ= ĠManual Animation Scheduler () ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display , Ġscheduler Ġ= Ġscheduler ) ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġchild ) ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ-= Ġchild ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġhappens Ġbefore Ġnext Ġrender ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġchild ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" renders Removed Re Added Different Parent ") ĊĠĠĠ Ġfun Ġ` renders Ġremoved Ġre - added Ġdifferent Ġparent `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠĠ Ġ= Ġspy k ( view ()) ĊĠĠĠĠĠĠĠ Ġval Ġcontainer 1 Ġ= Ġcontainer () ĊĠĠĠĠĠĠĠ Ġval Ġcontainer 2 Ġ= Ġcontainer () ĊĊĠĠĠĠĠĠĠ Ġcontainer 1 . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠ Ġ= Ġdisplay () ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Ġ= ĠManual Animation Scheduler () ĊĊĠĠĠĠĠĠĠ Ġdisplay . children Ġ+= ĠlistOf < View >( container 1 , Ġcontainer 2 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display , Ġscheduler Ġ= Ġscheduler ) ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġchild ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġhappens Ġbefore Ġnext Ġrender ĊĊĠĠĠĠĠĠĠ Ġcontainer 1 . children Ġ-= Ġchild ĊĠĠĠĠĠĠĠ Ġcontainer 2 . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġchild , Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" renders Removed Re Added Nested Different Parent ") ĊĠĠĠ Ġfun Ġ` renders Ġremoved Ġre - added Ġnested Ġdifferent Ġparent `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠĠ Ġ= Ġspy k ( view ()) ĊĠĠĠĠĠĠĠ Ġval Ġcontainer 1 Ġ= Ġcontainer () ĊĠĠĠĠĠĠĠ Ġval Ġcontainer 2 Ġ= Ġcontainer () ĊĊĠĠĠĠĠĠĠ Ġcontainer 1 . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠ Ġ= Ġdisplay ( container 1 ) ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Ġ= ĠManual Animation Scheduler () ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display , Ġscheduler Ġ= Ġscheduler ) ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġchild ) ĊĊĠĠĠĠĠĠĠ Ġcontainer 1 . children Ġ-= Ġchild ĊĠĠĠĠĠĠĠ Ġcontainer 2 . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġhappens Ġbefore Ġnext Ġrender ĊĊĠĠĠĠĠĠĠ Ġdisplay . children Ġ-= Ġcontainer 1 Ġas ĠView ĊĠĠĠĠĠĠĠ Ġdisplay . children Ġ+= Ġcontainer 2 Ġas ĠView ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Child Added Pro per ly ( render Manager , Ġdisplay , Ġchild , Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" updates TopLevel On Content Direction Change ") ĊĠĠĠ Ġfun Ġ` updates Ġtop - level Ġon Ġcontent Ġdirection Ġchange `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild 1 Ġ Ġ= Ġspy k ( view ()) ĊĠĠĠĠĠĠĠ Ġval Ġchild 2 Ġ Ġ= Ġspy k ( view ()) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġslot < Change Observer < Display >>() ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġdisplay ( child 1 , Ġchild 2 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġcontent Direction Changed Ġ+= Ġcapture ( observer ) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġobserver . captured ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġchild 1 . content Direction Changed _() Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġchild 2 . content Direction Changed _() Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" updates TopLevel On Mirror Change ") ĊĠĠĠ Ġfun Ġ` updates Ġtop - level Ġon Ġmirror Ġchange `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild 1 Ġ Ġ= Ġspy k ( view ()) ĊĠĠĠĠĠĠĠ Ġval Ġchild 2 Ġ Ġ= Ġspy k ( view ()) ĊĠĠĠĠĠĠĠ Ġval Ġobserver Ġ= Ġslot < Change Observer < Display >>() ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay Ġ= Ġdisplay ( child 1 , Ġchild 2 ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmirror ing Changed Ġ+= Ġcapture ( observer ) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠ Ġobserver . captured ( display ) ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġchild 1 . update Needs Mirror () Ġ} ĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġchild 2 . update Needs Mirror () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" not ifies TopLevel Of Display Rect Change ") ĊĠĠĠ Ġfun Ġ` not ifies Ġtop Ġlevel Ġof Ġdisplay Ġrect Ġchange `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandle Display Rect Event Ġ= Ġmock k <( Rectangle , ĠRectangle ) Ġ-> ĠUnit >() ĊĊĠĠĠĠĠĠĠ Ġ// ĠCannot Ġuse Ġspy k Ġsince Ġit Ġhas Ġissues Ġhttps :// github . com / mock k / mock k / issues / 3 4 2 ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġobject : ĠView () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Display Rect Event ( old : ĠRectangle , Ġnew : ĠRectangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Display Rect Event ( old , Ġnew ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= ĠSize ( 1 0 , Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmonitor s Display Rect Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠ Ġ= Ġdisplay ( child ) ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Ġ= ĠManual Animation Scheduler () ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display , Ġscheduler Ġ= Ġscheduler ) ĊĊĠĠĠĠĠĠĠ Ġval Ġold Rect Ġ= Ġchild . bounds . at Origin ĊĊĠĠĠĠĠĠĠ Ġchild . width Ġ= Ġ 1 0 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Rect Ġ= Ġchild . bounds . at Origin ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġhandle Display Rect Event ( old Rect , Ġnew Rect ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" display Rect Change Works When Enabled E ate ") ĊĠĠĠ Ġfun Ġ` display Ġrect Ġchange Ġworks Ġwhen Ġenabled Ġlate `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhandle Display Rect Event Ġ= Ġmock k <( Rectangle , ĠRectangle ) Ġ-> ĠUnit >() ĊĊĠĠĠĠĠĠĠ Ġ// ĠCannot Ġuse Ġspy k Ġsince Ġit Ġhas Ġissues Ġhttps :// github . com / mock k / mock k / issues / 3 4 2 ĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġobject : ĠView () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Display Rect Event ( old : ĠRectangle , Ġnew : ĠRectangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Display Rect Event ( old , Ġnew ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. apply Ġ{ Ġsize Ġ= ĠSize ( 1 0 , Ġ 1 0 ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠ Ġ= Ġdisplay ( child ) ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Ġ= ĠManual Animation Scheduler () ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display , Ġscheduler Ġ= Ġscheduler ) ĊĊĠĠĠĠĠĠĠ Ġexpect ( false ) Ġ{ Ġchild . monitor s Display Rect Ġ} ĊĊĠĠĠĠĠĠĠ Ġchild . monitor s Display Rect Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġexpect ( true ) Ġ{ Ġchild . monitor s Display Rect Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġold Rect Ġ= Ġchild . bounds . at Origin ĊĊĠĠĠĠĠĠĠ Ġchild . width Ġ= Ġ 1 0 0 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Rect Ġ= Ġchild . bounds . at Origin ĊĊĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠ Ġverify Ġ{ Ġhandle Display Rect Event ( old Rect , Ġnew Rect ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" display Rect Notification Works ") ĊĠĠĠ Ġfun Ġ` display Ġrect Ġnotification Ġworks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrand Parent : ĠRectangle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent ĠĠĠĠ Ġ: ĠRectangle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠĠ Ġ: ĠRectangle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent ĠĠĠĠĠ Ġ: ĠPair < Rectangle , ĠRectangle >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Ġ Ġ: Ġ( View , ĠView , ĠView ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData ( Rectangle ( 1 0 0 , Ġ 1 0 0 ), ĠRectangle ( 5 0 , Ġ 5 0 ), ĠRectangle ( 1 0 , Ġ 1 0 ), ĠRectangle ( 1 0 , Ġ 1 0 ) Ġto ĠRectangle ( 1 0 , Ġ 0 , Ġ 0 , Ġ 1 0 )) Ġ{ Ġ_, parent ,_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . x Ġ= Ġ- 1 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData ( Rectangle ( 1 0 0 , Ġ 1 0 0 ), ĠRectangle ( Ġ 0 , Ġ 5 0 ), ĠRectangle ( 1 0 , Ġ 1 0 ), ĠRectangle ( Ġ 0 , Ġ 1 0 ) Ġto ĠRectangle ( 1 0 , Ġ 1 0 )) Ġ{ Ġ_, parent ,_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . width Ġ= Ġ 1 0 0 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandle Display Rect Event Ġ= Ġmock k <( Rectangle , ĠRectangle ) Ġ-> ĠUnit >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġobject : ĠView () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Display Rect Event ( old : ĠRectangle , Ġnew : ĠRectangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Display Rect Event ( old , Ġnew ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ= ĠSize ( 1 0 , Ġ 1 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmonitor s Display Rect Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent ĠĠĠĠĠĠĠ Ġ= Ġcontainer (). apply Ġ{ Ġchildren Ġ+= Ġchild ; Ġ Ġbounds Ġ= Ġit . parent ĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrand Parent ĠĠ Ġ= Ġcontainer (). apply Ġ{ Ġchildren Ġ+= Ġparent ; Ġbounds Ġ= Ġit . grand Parent Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠĠĠĠĠ Ġ= Ġdisplay ( grand Parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscheduler ĠĠĠĠ Ġ= ĠManual Animation Scheduler () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display , Ġscheduler Ġ= Ġscheduler ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . operation ( grand Parent , Ġparent , Ġchild ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduler . run Jobs () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġverify Ġ{ Ġhandle Display Rect Event ( it . event . first , Ġit . event . second ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( it . event . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Manager . first . display Rect ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" cold Display Rect Call Works ") ĊĠĠĠ Ġfun Ġ` cold Ġdisplay Ġrect Ġcall Ġworks `() Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġclass ĠData ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrand Parent : ĠRectangle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent ĠĠĠĠ Ġ: ĠRectangle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠĠ Ġ: ĠRectangle , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġevent ĠĠĠĠĠ Ġ: ĠPair < Rectangle , ĠRectangle >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoperation Ġ Ġ: Ġ( View , ĠView , ĠView ) Ġ-> ĠUnit ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData ( Rectangle ( 1 0 0 , Ġ 1 0 0 ), ĠRectangle ( 5 0 , Ġ 5 0 ), ĠRectangle ( 1 0 , Ġ 1 0 ), ĠRectangle ( 1 0 , Ġ 1 0 ) Ġto ĠRectangle ( 1 0 , Ġ 0 , Ġ 0 , Ġ 1 0 )) Ġ{ Ġ_, parent ,_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . x Ġ= Ġ- 1 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData ( Rectangle ( 1 0 0 , Ġ 1 0 0 ), ĠRectangle ( Ġ 0 , Ġ 5 0 ), ĠRectangle ( 1 0 , Ġ 1 0 ), ĠRectangle ( Ġ 0 , Ġ 1 0 ) Ġto ĠRectangle ( 1 0 , Ġ 1 0 )) Ġ{ Ġ_, parent ,_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent . width Ġ= Ġ 1 0 0 0 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠĠĠĠĠ Ġ= Ġview () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparent ĠĠĠĠĠĠĠ Ġ= Ġcontainer (). apply Ġ{ Ġchildren Ġ+= Ġchild ; Ġ Ġbounds Ġ= Ġit . parent ĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġgrand Parent ĠĠ Ġ= Ġcontainer (). apply Ġ{ Ġchildren Ġ+= Ġparent ; Ġbounds Ġ= Ġit . grand Parent Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠĠĠĠĠ Ġ= Ġdisplay ( grand Parent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrender Manager Ġ= Ġrender Manager ( display ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . operation ( grand Parent , Ġparent , Ġchild ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġexpect ( it . event . second ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrender Manager . first . display Rect ( child ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test Ġ@ Js Name (" stops Monitoring Display Rect When Disabled ") ĊĠĠĠ Ġfun Ġ` stops Ġmonitoring Ġdisplay Ġrect Ġwhen Ġdisabled `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbounds Change ĠĠ Ġ= Ġslot < Property Observer < View , ĠRectangle >>() ĊĠĠĠĠĠĠĠ Ġval Ġhandling Change Ġ= Ġslot < Property Observer < View , ĠBoolean >>() ĊĊĠĠĠĠĠĠĠ Ġval Ġchild Ġ= Ġmock k < View >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġparent ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġvisible ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġmonitor s Display Rect ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġreturns Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġbounds Changed ĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+= Ġcapture ( bounds Change Ġ Ġ) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdisplay Rect Handling Changed Ġ+= Ġcapture ( handling Change ) Ġ} Ġjust ĠRuns ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdisplay ĠĠ Ġ= Ġdisplay ( child ) ĊĠĠĠĠĠĠĠ Ġval Ġscheduler Ġ= ĠManual Animation Scheduler () ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display , Ġscheduler Ġ= Ġscheduler ) ĊĊĠĠĠĠĠĠĠ Ġhandling Change . captured ( child , Ġtrue , Ġfalse ) Ġ// Ġdisable Ġmonitoring ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild . display Rect Handling Changed Ġ+= Ġhandling Change . captured ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbounds Change . captured ( child , ĠRectangle . Empty , ĠRectangle ( 1 0 0 , Ġ 1 0 0 )) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġchild . handle Display Rect Event _( Rectangle . Empty , ĠRectangle ( 1 0 0 , Ġ 1 0 0 )) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Layout ( block : Ġ( View ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġspy k < Container >(" xyz "). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġchild ĠĠĠĠ Ġ= Ġview () ĊĊĠĠĠĠĠĠĠ Ġcontainer . layout ĠĠĠ Ġ= Ġmock k () ĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġchild ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display ( container )) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġcontainer . do Layout _() Ġ} ĊĊĠĠĠĠĠĠĠ Ġblock ( child ) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 2 ) Ġ{ Ġcontainer . do Layout _() Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Child Added Pro per ly ( render Manager : ĠPair < Render Manager , ĠAccessibility Manager >, Ġdisplay : ĠDisplay , Ġview : ĠView , Ġtimes : ĠInt Ġ= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġtimes ) Ġ{ Ġview . added To Display ( display , Ġrender Manager . first , Ġrender Manager . second ) Ġ} ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġtimes ) Ġ{ Ġview . render ĠĠĠĠĠĠĠ Ġ( any () ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġverify Child Removed Pro per ly ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 1 ) Ġ{ Ġview . removed From Display _() Ġ} ĊĊĠĠĠĠĠĠĠ Ġview . children _. forEach Ġ{ Ġverify Child Removed Pro per ly ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġview ĠĠĠĠ Ġ(): ĠView Ġ= Ġobject : ĠView () Ġ{} . apply Ġ{ Ġsize Ġ= ĠSize ( 1 0 , Ġ 1 0 ) Ġ} ĊĠĠĠ Ġprivate Ġfun Ġcontainer (): ĠContainer Ġ= Ġio . nac ular . do od le . core . container Ġ{ Ġsize Ġ= ĠSize ( 1 0 , Ġ 1 0 ) Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdoes Not Render ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrender Manager ( display ( view )) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġview . render ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdoes Not Render Child ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcontainer Ġ= Ġspy k < Container >(" xyz "). apply Ġ{ Ġbounds Ġ= ĠRectangle ( size Ġ= ĠSize ( 1 0 0 . 0 , Ġ 1 0 0 . 0 )) Ġ} ĊĊĠĠĠĠĠĠĠ Ġcontainer . children Ġ+= Ġview ĊĊĠĠĠĠĠĠĠ Ġrender Manager ( display ( container )) ĊĊĠĠĠĠĠĠĠ Ġverify ( exact ly Ġ= Ġ 0 ) Ġ{ Ġview . render ( any ()) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Manager ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdisplay ĠĠĠĠĠĠĠĠĠĠĠĠ Ġ: ĠInternal Display ĠĠĠĠĠ Ġ= Ġmock k (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtheme Manager ĠĠĠĠĠĠĠ Ġ: ĠInternal Theme Manager Ġ= Ġmock k (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscheduler ĠĠĠĠĠĠĠĠĠĠ Ġ: ĠAnimation Scheduler ĠĠ Ġ= Ġinstant Scheduler , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccessibility Manager : ĠAccessibility Manager Ġ= Ġmock k (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgraphics Device ĠĠĠĠĠ Ġ: ĠGraphics Device < *> ĠĠĠ Ġ= Ġdefault Graphics Device ): ĠPair < Render ManagerImpl , ĠAccessibility Manager > Ġ= ĠRender ManagerImpl ( display , Ġscheduler , Ġtheme Manager , Ġaccessibility Manager , Ġgraphics Device ) Ġto Ġaccessibility Manager ĊĊĠĠĠ Ġprivate Ġval Ġdefault Graphics Device Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġgraphics Device () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgraphics Device ( mapping : ĠMap < View , ĠGraphics Surface > Ġ= Ġmap Of ()): ĠGraphics Device < *> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresult ĠĠĠĠĠĠĠĠ Ġ= Ġmock k < Graphics Device <* >>() ĊĠĠĠĠĠĠĠ Ġval Ġdefault Surface Ġ= Ġmock k < Graphics Surface >() ĊĠĠĠĠĠĠĠ Ġval Ġcanvas ĠĠĠĠĠĠĠĠ Ġ= Ġmock k < Canvas >() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġdefault Surface . render ( capture Lambda ()) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlambda <( Canvas ) Ġ-> ĠUnit >(). captured ( canvas ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġmapping . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġit . value . render ( capture Lambda ()) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlambda <( Canvas ) Ġ-> ĠUnit >(). captured ( canvas ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġresult [ any ()] Ġ} Ġanswers Ġ{ Ġmapping [ first Arg ()] Ġ?: Ġdefault Surface Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdisplay ( var arg Ġchildren : ĠView ): ĠInternal Display Ġ= Ġmock k < Internal Display >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdisplay Children Ġ= ĠObservable List < View >() ĊĊĠĠĠĠĠĠĠ Ġdisplay Children . addAll ( children ) ĊĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġslot < View >() ĊĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġthis @ apply . size ĠĠĠĠĠĠ Ġ} Ġreturns ĠSize ( 1 0 0 , Ġ 1 0 0 ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġthis @ apply . children ĠĠ Ġ} Ġreturns Ġdisplay Children ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġthis @ apply . iterator () Ġ} Ġanswers Ġ{ Ġdisplay Children . iterator () Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠFIXME : Ġcompiler Ġfails Ġto Ġbuild Ġw / o Ġhint ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsize Changed Ġas ĠPool < Property Observer < Display , ĠSize >> Ġ} Ġreturns Ġmock k () ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġthis @ apply . ancestor Of ( capture ( view )) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġresult Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( this @ apply . children . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġparent : ĠView ? Ġ= Ġview . captured ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( parent Ġin Ġthis @ apply . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparent Ġ= Ġparent ?. parent ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġwhile Ġ( parent Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġinstant Scheduler Ġby Ġlazy Ġ{ Ġmock k < Animation Scheduler >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġthis @ apply . onNext Frame ( capture Lambda ()) Ġ} Ġanswers Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlambda <( Measure < Time >) Ġ-> ĠUnit >(). captured ( 0 Ġ* Ġmilliseconds ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= Ġmock k < Task >() ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġevery Ġ{ Ġtask . completed Ġ} Ġreturns Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtask ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ}} ĊĊĠĠĠ Ġprivate Ġclass ĠSimple Task ( override Ġvar Ġcompleted : ĠBoolean Ġ= Ġfalse ) Ġ: ĠTask Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcancel () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompleted Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġclass ĠManual Animation Scheduler : ĠAnimation Scheduler Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtasks Ġ= Ġmutable ListOf < Pair < Simple Task , Ġ( Measure < Time >) Ġ-> ĠUnit >>() ĊĊĠĠĠĠĠĠĠ Ġfun Ġrun Jobs () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . first . completed Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . second ( 0 Ġ* Ġmilliseconds ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Next Frame ( job : Ġ( Measure < Time >) Ġ-> ĠUnit ): ĠTask Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtask Ġ= ĠSimple Task () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtasks Ġ+= Ġtask Ġto Ġjob ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtask ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }