package Ġworld . greg s . void ps . engine . client . update . task Ċ Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġio . mock k . mock k Static Ċ import Ġio . mock k . verify Order Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġworld . greg s . void ps . engine . client . update . task . player . Player Change Task Ċ import Ġworld . greg s . void ps . engine . entity . Direction Ċ import Ġworld . greg s . void ps . engine . entity . character . player . Player Ċ import Ġworld . greg s . void ps . engine . entity . character . player . Player Move Type Ċ import Ġworld . greg s . void ps . engine . entity . character . update . Local Change Ċ import Ġworld . greg s . void ps . engine . entity . character . update . visual . player . movement Type Ċ import Ġworld . greg s . void ps . engine . entity . list . entity List Module Ċ import Ġworld . greg s . void ps . engine . event . event Module Ċ import Ġworld . greg s . void ps . engine . map . Delta Ċ import Ġworld . greg s . void ps . engine . script . K oin Mock Ċ import Ġjava . util .* Ċ Ċ internal Ġclass ĠPlayer Change Task Test Ġ: ĠK oin Mock () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġmodules Ġ= ĠlistOf ( event Module , Ġentity List Module ) ĊĊĠĠĠ Ġlateinit Ġvar Ġtask : ĠPlayer Change Task ĊĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġtask Ġ= ĠPlayer Change Task ( mock k ( relax ed Ġ= Ġtrue )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Local Ġupdate Ġwalk `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . steps Ġ} Ġreturns ĠLinkedList < Direction >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . walk Step Ġ} Ġreturns ĠDirection . EAST ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . run Step Ġ} Ġreturns ĠDirection . NONE ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . delta Ġ} Ġreturns ĠDelta ( 1 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement Type Ġ} Ġreturns ĠPlayer Move Type . Walk ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . change Ġ} Ġreturns ĠLocal Change . Walk ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtask . run Async ( player ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . change Ġ= ĠLocal Change . Walk ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . change Value Ġ= Ġ 4 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Local Ġupdate Ġrun `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . steps Ġ} Ġreturns ĠLinkedList < Direction >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . walk Step Ġ} Ġreturns ĠDirection . NORTH ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . run Step Ġ} Ġreturns ĠDirection . NORTH ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . delta Ġ} Ġreturns ĠDelta ( 0 , Ġ 2 ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement Type Ġ} Ġreturns ĠPlayer Move Type . Run ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . change Ġ} Ġreturns ĠLocal Change . Run ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtask . run Async ( player ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . change Ġ= ĠLocal Change . Run ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . change Value Ġ= Ġ 1 3 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Local Ġupdate Ġtele `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġmock k Static (" world . greg s . void ps . engine . entity . character . update . visual . player . Movement Type Kt ") ĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . steps Ġ} Ġreturns ĠLinkedList < Direction >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . walk Step Ġ} Ġreturns ĠDirection . NONE ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . run Step Ġ} Ġreturns ĠDirection . NONE ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . delta Ġ} Ġreturns ĠDelta ( 1 2 , Ġ- 1 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement Type Ġ} Ġreturns ĠPlayer Move Type . Teleport ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . change Ġ} Ġreturns ĠLocal Change . Tele ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtask . run Async ( player ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . change Ġ= ĠLocal Change . Tele ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . change Value Ġ= Ġ 1 4 2 9 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Local Ġupdate Ġtele Ġfar `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . steps Ġ} Ġreturns ĠLinkedList < Direction >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . walk Step Ġ} Ġreturns ĠDirection . NONE ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . run Step Ġ} Ġreturns ĠDirection . NONE ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . delta Ġ} Ġreturns ĠDelta ( 2 4 7 , Ġ- 3 6 5 , Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement Type Ġ} Ġreturns ĠPlayer Move Type . Teleport ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . change Ġ} Ġreturns ĠLocal Change . Tele ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtask . run Async ( player ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . change Ġ= ĠLocal Change . Tele Global ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . change Value Ġ= Ġ 1 7 7 9 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Local Ġupdate Ġvisual `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . steps Ġ} Ġreturns ĠLinkedList < Direction >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . change Ġ} Ġreturns ĠLocal Change . Update ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement Type Ġ} Ġreturns ĠPlayer Move Type . None ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . delta Ġ} Ġreturns ĠDelta . EMPTY ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtask . run Async ( player ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . change Ġ= ĠLocal Change . Update ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . change Value Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` Local Ġupdate Ġno Ġmovement `() Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠGiven ĊĠĠĠĠĠĠĠ Ġval Ġplayer : ĠPlayer Ġ= Ġmock k ( relax ed Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . steps Ġ} Ġreturns ĠLinkedList < Direction >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . walk Step Ġ} Ġreturns ĠDirection . NONE ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . run Step Ġ} Ġreturns ĠDirection . NONE ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement Type Ġ} Ġreturns ĠPlayer Move Type . Teleport ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . visual s . update Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . movement . delta Ġ} Ġreturns ĠDelta ( 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġplayer . change Ġ} Ġreturns Ġnull ĊĠĠĠĠĠĠĠ Ġ// ĠWhen ĊĠĠĠĠĠĠĠ Ġtask . run Async ( player ) ĊĠĠĠĠĠĠĠ Ġ// ĠThen ĊĠĠĠĠĠĠĠ Ġverify Order Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . change Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayer . change Value Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ Ċ }