package Ġcom . jack po cket . scratch off . paths Ċ Ċ import Ġandroid . graphics . Path Ċ import Ġandroid . graphics . Rect F Ċ import Ġandroid . view . Motion Event Ċ import Ġandroidx . test . ext . junit . runners . Android JUnit 4 Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ Ċ @ RunWith ( Android JUnit 4 :: class ) Ċ class ĠScr atch Path Manager Tests Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Action Down Always Creates New Path () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠScr atch Path Manager () ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 0 , Ġmanager . paths . size ) ĊĊĠĠĠĠĠĠĠ Ġmanager . handle Touch Down ( 0 , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġmanager . handle Touch Down ( 0 , Ġ 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġmanager . handle Touch Down ( 0 , Ġ 0 f , Ġ 0 f ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 3 , Ġmanager . paths . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Action Move Changes Active Path And DoesNot Create New Path () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠScr atch Path Manager () ĊĠĠĠĠĠĠĠ Ġmanager . handle Touch Down ( 0 , Ġ 0 f , Ġ 0 f ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmanager . paths . size ) ĊĠĠĠĠĠĠĠ Ġmanager . paths [ 0 ]. assert Empty ( true ) ĊĊĠĠĠĠĠĠĠ Ġmanager . handle Touch Move ( 0 , Ġ 1 f , Ġ 1 f ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 1 , Ġmanager . paths . size ) ĊĠĠĠĠĠĠĠ Ġmanager . paths [ 0 ]. assert Empty ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Pointer Up Follow edBy Move Creates New Path () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠScr atch Path Manager () ĊĊĠĠĠĠĠĠĠ Ġval Ġevents Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScr atch Path Point ( 0 , Ġ 1 f , Ġ 1 f , ĠMotion Event . ACTION _ DOWN ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScr atch Path Point ( 0 , Ġ 2 f , Ġ 2 f , ĠMotion Event . ACTION _ POINTER _ UP ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScr atch Path Point ( 0 , Ġ 3 f , Ġ 3 f , ĠMotion Event . ACTION _ MOVE ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġmanager . add Scratch Path Points ( events ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( 2 , Ġmanager . paths . size ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠPath . assert Empty ( value : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Bounds Ġ= ĠRect F () ĊĊĠĠĠĠĠĠĠ Ġthis . compute Bounds ( path Bounds , Ġtrue ) ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( value , Ġpath Bounds . isEmpty ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Touch Down And Move Pas sthrough Includes Scalar () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġobject : ĠScr atch Path Manager () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Touch Down ( pointer Index : ĠInt , Ġx : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 0 . 5 f , Ġx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 0 . 5 f , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Touch Move ( pointer Index : ĠInt , Ġx : ĠFloat , Ġy : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 f , Ġx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( 1 f , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmanager . set Scale ( 0 . 5 f ) ĊĊĠĠĠĠĠĠĠ Ġval Ġevents Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScr atch Path Point ( 0 , Ġ 1 f , Ġ 1 f , ĠMotion Event . ACTION _ DOWN ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠScr atch Path Point ( 0 , Ġ 2 f , Ġ 2 f , ĠMotion Event . ACTION _ MOVE ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġmanager . add Scratch Path Points ( events ) ĊĠĠĠ Ġ} Ċ }