/* Ċ Ġ* Ġ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 . graphics Ċ Ċ import Ġandroidx . compose . ui . geometry . Rect Ċ import Ġandroidx . compose . ui . geometry . Round Rect Ċ import Ġorg . junit . Assert . assertEquals Ċ import Ġorg . junit . Test Ċ Ċ class ĠDesktop Path Test Ġ: ĠDesktop Graphics Test () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcanvas : ĠCanvas Ġ= Ġinit Canvas ( width Px Ġ= Ġ 1 6 , Ġheight Px Ġ= Ġ 1 6 ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġarc () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Arc ( Rect ( 0 f , Ġ 0 f , Ġ 1 6 f , Ġ 1 6 f ), Ġ 0 f , Ġ 9 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarc To ( Rect ( 0 f , Ġ 0 f , Ġ 1 6 f , Ġ 1 6 f ), Ġ 9 0 f , Ġ 9 0 f , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġred Paint ) ĊĊĠĠĠĠĠĠĠ Ġscreenshot Rule . snap ( surface ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġclip Path () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd O val ( Rect ( 0 f , Ġ 0 f , Ġ 1 6 f , Ġ 8 f )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . with Save Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Path ( path , ĠClip Op . Intersect ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( 0 f , Ġ 0 f , Ġ 1 6 f , Ġ 1 6 f , Ġred Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . with Save Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . clip Path ( path , ĠClip Op . Difference ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . draw Rect ( 0 f , Ġ 0 f , Ġ 1 6 f , Ġ 1 6 f , Ġblue Paint ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscreenshot Rule . snap ( surface ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbe zier () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġquadr atic Bezier To ( 0 f , Ġ 1 6 f , Ġ 1 6 f , Ġ 1 6 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġred Paint ) ĊĊĠĠĠĠĠĠĠ Ġscreenshot Rule . snap ( surface ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġcubic () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcubic To ( 0 f , Ġ 1 2 f , Ġ 0 f , Ġ 1 6 f , Ġ 1 6 f , Ġ 1 6 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġred Paint ) ĊĊĠĠĠĠĠĠĠ Ġscreenshot Rule . snap ( surface ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfigures () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd O val ( Rect ( 0 f , Ġ 0 f , Ġ 8 f , Ġ 4 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rect ( Rect ( 1 2 f , Ġ 0 f , Ġ 1 6 f , Ġ 8 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Round Rect ( Round Rect ( 0 f , Ġ 8 f , Ġ 4 f , Ġ 1 6 f , Ġ 4 f , Ġ 4 f )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġred Paint ) ĊĊĠĠĠĠĠĠĠ Ġscreenshot Rule . snap ( surface ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfill Type Even Odd () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill Type Ġ= ĠPath Fill Type . Even Odd ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rect ( Rect ( 0 f , Ġ 0 f , Ġ 8 f , Ġ 8 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rect ( Rect ( 4 f , Ġ 4 f , Ġ 1 2 f , Ġ 1 2 f )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġred Paint ) ĊĊĠĠĠĠĠĠĠ Ġscreenshot Rule . snap ( surface ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfill Type Non Zero () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rect ( Rect ( 0 f , Ġ 0 f , Ġ 8 f , Ġ 8 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd Rect ( Rect ( 4 f , Ġ 4 f , Ġ 1 2 f , Ġ 1 2 f )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Path Fill Type . Non Zero , Ġpath . fill Type ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġred Paint ) ĊĊĠĠĠĠĠĠĠ Ġscreenshot Rule . snap ( surface ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlines Fill () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 8 f , Ġ 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 0 f , Ġ 8 f ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( 8 f , Ġ 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 8 f , Ġ 1 6 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 1 6 f , Ġ 1 6 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Line To ( 0 f , Ġ- 8 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( Paint ing Style . Fill , Ġred Paint . style ) ĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( path , Ġred Paint ) ĊĊĠĠĠĠĠĠĠ Ġscreenshot Rule . snap ( surface ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlines Stroke () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 8 f , Ġ 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 0 f , Ġ 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmove To ( 8 f , Ġ 8 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 8 f , Ġ 1 6 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġline To ( 1 6 f , Ġ 1 6 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrelative Line To ( 0 f , Ġ- 8 f ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcanvas . draw Path ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġred Paint . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstyle Ġ= ĠPaint ing Style . Stroke ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstrokeWidth Ġ= Ġ 2 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġscreenshot Rule . snap ( surface ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun ĠisEmpty () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġpath . isEmpty ) ĊĊĠĠĠĠĠĠĠ Ġpath . add Rect ( Rect ( 0 f , Ġ 0 f , Ġ 1 6 f , Ġ 1 6 f )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġpath . isEmpty ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġis Convex () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġpath . is Convex ) ĊĊĠĠĠĠĠĠĠ Ġpath . add Rect ( Rect ( 0 f , Ġ 0 f , Ġ 8 f , Ġ 8 f )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( true , Ġpath . is Convex ) ĊĊĠĠĠĠĠĠĠ Ġpath . add Rect ( Rect ( 8 f , Ġ 8 f , Ġ 1 6 f , Ġ 1 6 f )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( false , Ġpath . is Convex ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġget Bounds () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠPath () ĊĠĠĠĠĠĠĠ ĠassertEquals ( Rect ( 0 f , Ġ 0 f , Ġ 0 f , Ġ 0 f ), Ġpath . get Bounds ()) ĊĊĠĠĠĠĠĠĠ Ġpath . add Rect ( Rect ( 0 f , Ġ 0 f , Ġ 8 f , Ġ 8 f )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Rect ( 0 f , Ġ 0 f , Ġ 8 f , Ġ 8 f ), Ġpath . get Bounds ()) ĊĊĠĠĠĠĠĠĠ Ġpath . add Rect ( Rect ( 8 f , Ġ 8 f , Ġ 1 6 f , Ġ 1 6 f )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Rect ( 0 f , Ġ 0 f , Ġ 1 6 f , Ġ 1 6 f ), Ġpath . get Bounds ()) ĊĠĠĠ Ġ} Ċ } Ċ