/* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 Ġ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 . Ċ Ġ*/ Ċ Ċ /* Ċ Ġ* ĠCopyright Ġ 2 0 1 9 Ġ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 . animation . core Ċ Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġjunit . framework . TestCase . assertEquals Ċ import Ġjunit . framework . TestCase . assertTrue Ċ import Ġorg . junit . Test Ċ import Ġorg . junit . runner . RunWith Ċ import Ġorg . junit . runners . JUnit 4 Ċ Ċ @ RunWith ( JUnit 4 :: class ) Ċ class ĠKey frame Animation Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġequals Start And End Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= Ġstart Ġ// Ġthe Ġsame ĊĠĠĠĠĠĠĠ Ġval Ġfull Time Ġ= Ġ 4 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= Ġkey frames < Float > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġfull Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Ġat Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f Ġat Ġ 2 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 8 f Ġat Ġ 3 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġend Ġat Ġfull Time ĊĠĠĠĠĠĠĠ Ġ}. vector ize ( Float . Vector Converter ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( animation . at ( 0 )). isEqualTo ( start ) ĊĠĠĠĠĠĠĠ ĠassertThat ( animation . at ( 2 5 0 )). isEqualTo ( 0 . 6 5 f ) ĊĠĠĠĠĠĠĠ ĠassertThat ( animation . at ( full Time . to Long ())). isEqualTo ( end ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpossible To Override Start And End Values () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfull Time Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= Ġkey frames < Float > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġfull Time ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġat Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f Ġat Ġfull Time ĊĠĠĠĠĠĠĠ Ġ}. vector ize ( Float . Vector Converter ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( animation . at ( 0 )). isEqualTo ( 1 f ) ĊĠĠĠĠĠĠĠ ĠassertThat ( animation . at ( full Time . to Long ())). isEqualTo ( 0 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġwith E asing On Full Duration () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeasing Ġ= ĠFast Out Slow In E asing ĊĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= Ġkey frames < Float > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f Ġat Ġ 0 Ġwith Ġeasing ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġat Ġduration Millis ĊĠĠĠĠĠĠĠ Ġ}. vector ize ( Float . Vector Converter ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( animation . at ( 3 1 )). isEqualTo ( easing . transform ( 0 . 3 1 f )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġeasing On The Second Part () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeasing Ġ= ĠFast Out Slow In E asing ĊĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= Ġkey frames < Float > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 2 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġat Ġ 1 0 0 Ġwith Ġeasing ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 f Ġat Ġduration Millis ĊĠĠĠĠĠĠĠ Ġ}. vector ize ( Float . Vector Converter ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( animation . at ( 1 4 0 )). isEqualTo ( 1 f Ġ+ Ġeasing . transform ( 0 . 4 f )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġfirst Part Is Linear With E asing On The Second Part () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= Ġkey frames < Float > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f Ġat Ġ 5 0 Ġwith ĠFast Out Slow In E asing ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġat Ġduration Millis ĊĠĠĠĠĠĠĠ Ġ}. vector ize ( Float . Vector Converter ) ĊĊĠĠĠĠĠĠĠ ĠassertThat ( animation . at ( 2 5 )). isEqualTo ( 0 . 2 5 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Multi Dim ens Keyframe sWith E asing () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġeasing Ġ= ĠFast Out Linear In E asing ĊĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= Ġkey frames < Animation Vector 2 D > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 4 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Vector ( 2 0 0 f , Ġ 3 0 0 f ) Ġat Ġ 2 0 0 Ġwith Ġeasing ĊĠĠĠĠĠĠĠ Ġ}. vector ize ( Two Way Converter < Animation Vector 2 D , ĠAnimation Vector 2 D >({ Ġit Ġ}, Ġ{ Ġit Ġ})) ĊĊĠĠĠĠĠĠĠ Ġval Ġstart Ġ= ĠAnimation Vector ( 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠ Ġval Ġend Ġ= ĠAnimation Vector ( 2 0 0 f , Ġ 4 0 0 f ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( time Ġin Ġ 0 .. 4 0 0 Ġstep Ġ 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv 1 : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġv 2 : ĠFloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ< Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv 1 Ġ= Ġl erp ( 0 f , Ġ 2 0 0 f , Ġtime Ġ/ Ġ 2 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv 2 Ġ= Ġl erp ( 0 f , Ġ 3 0 0 f , Ġtime Ġ/ Ġ 2 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv 1 Ġ= Ġ 2 0 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv 2 Ġ= Ġl erp ( 3 0 0 f , Ġ 4 0 0 f , Ġeasing . transform (( time Ġ- Ġ 2 0 0 ) Ġ/ Ġ 2 0 0 f )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠassertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Vector ( v 1 , Ġv 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanimation . getValue ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtime . to Long (), Ġstart , Ġend , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation Vector ( 0 f , Ġ 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Equals () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconfig : ĠKey frames Spec . Key frames Spec Config < Float >. () Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f Ġat Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f Ġat Ġ 2 0 0 Ġwith ĠFast Out Linear In E asing ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 8 f Ġat Ġ 3 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġat Ġduration Millis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= Ġkey frames < Float >( config ) ĊĊĠĠĠĠĠĠĠ Ġval Ġanimation Re use Config Ġ= Ġkey frames < Float >( config ) ĊĊĠĠĠĠĠĠĠ Ġval Ġanimation Re declare Config Ġ= Ġkey frames < Float > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f Ġat Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f Ġat Ġ 2 0 0 Ġwith ĠFast Out Linear In E asing ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 8 f Ġat Ġ 3 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġat Ġduration Millis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertEquals ( animation , Ġanimation Re use Config ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( animation , Ġanimation Re declare Config ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠAlso Ġtest Ġhash code () Ġhere , Ġsince Ġit 's Ġalready Ġimplemented . ĊĠĠĠĠĠĠĠ ĠassertEquals ( animation . hashCode (), Ġanimation Re use Config . hashCode ()) ĊĠĠĠĠĠĠĠ ĠassertEquals ( animation . hashCode (), Ġanimation Re declare Config . hashCode ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Not Equals () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanimation Ġ= Ġkey frames < Float > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f Ġat Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f Ġat Ġ 2 0 0 Ġwith ĠFast Out Linear In E asing ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 8 f Ġat Ġ 3 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġat Ġduration Millis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġanimation Alter ed Duration Ġ= Ġkey frames < Float > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 7 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f Ġat Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f Ġat Ġ 2 0 0 Ġwith ĠFast Out Linear In E asing ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 8 f Ġat Ġ 3 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġat Ġduration Millis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġanimation Alter ed E asing Ġ= Ġkey frames < Float > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f Ġat Ġ 1 0 0 Ġwith ĠFast Out Slow In E asing ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f Ġat Ġ 2 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 8 f Ġat Ġ 3 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġat Ġduration Millis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġanimation Alter ed Key frames Ġ= Ġkey frames < Float > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġduration Millis Ġ= Ġ 5 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f Ġat Ġ 1 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 3 f Ġat Ġ 2 0 0 Ġwith ĠFast Out Linear In E asing ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 8 f Ġat Ġ 4 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 f Ġat Ġduration Millis ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠassertTrue ( animation Ġ!= Ġanimation Alter ed Duration ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( animation Ġ!= Ġanimation Alter ed E asing ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( animation Ġ!= Ġanimation Alter ed Key frames ) ĊĠĠĠ Ġ} Ċ } Ċ