package Ġio . kom mon s . design patterns . specification Ċ Ċ import Ġio . kom mon s . design patterns . specification . Color . GREEN Ċ import Ġio . kom mon s . design patterns . specification . Color . RED Ċ import Ġio . kom mon s . design patterns . specification . Movement . FL Y ING Ċ import Ġio . kom mon s . design patterns . specification . Movement . SW IM M ING Ċ import Ġio . kom mon s . design patterns . specification . Size . NORMAL Ċ import Ġio . kom mon s . design patterns . specification . Size . SMALL Ċ import Ġio . kom mon s . logging . K Logging Ċ import Ġio . mock k . every Ċ import Ġio . mock k . mock k Ċ import Ġorg . am sh ove . k lu ent . shouldBe False Ċ import Ġorg . am sh ove . k lu ent . shouldBe True Ċ import Ġorg . junit . jupiter . api . Test Ċ Ċ class ĠSelector Test Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject : ĠK Logging () ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` select Ġby Ġcolor `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgreen Creature Ġ= Ġmock k < Creature >( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġgreen Creature . color Ġ} Ġreturns ĠGREEN ĊĊĠĠĠĠĠĠĠ Ġval Ġred Creature Ġ= Ġmock k < Creature >( relax Unit Fun Ġ= Ġtrue ) ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġred Creature . color Ġ} Ġreturns ĠRED ĊĊĠĠĠĠĠĠĠ Ġval Ġgreen Selector Ġ= Ġcolor Selector ( GREEN ) ĊĊĠĠĠĠĠĠĠ Ġgreen Selector . invoke ( green Creature ). shouldBe True () ĊĠĠĠĠĠĠĠ Ġgreen Selector . invoke ( red Creature ). shouldBe False () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` select Ġby Ġmass `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlight Creature Ġ= Ġmock k < Creature >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġlight Creature . mass Ġ} Ġreturns ĠMass ( 5 0 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġheavy Creature Ġ= Ġmock k < Creature >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġheavy Creature . mass Ġ} Ġreturns ĠMass ( 2 5 0 0 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlight Selector Ġ= Ġmass Small er Than Or Eq Selector ( 5 0 0 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġlight Selector ( light Creature ). shouldBe True () ĊĠĠĠĠĠĠĠ Ġlight Selector ( heavy Creature ). shouldBe False () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` select Ġby Ġmovement `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsw im ming Creature Ġ= Ġmock k < Creature >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming Creature . movement Ġ} Ġreturns ĠSW IM M ING ĊĊĠĠĠĠĠĠĠ Ġval Ġf lying Creature Ġ= Ġmock k < Creature >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġf lying Creature . movement Ġ} Ġreturns ĠF LY ING ĊĊĠĠĠĠĠĠĠ Ġval Ġsw im ming Selector Ġ= Ġmovement Selector ( SW IM M ING ) ĊĊĠĠĠĠĠĠĠ Ġsw im ming Selector ( sw im ming Creature ). shouldBe True () ĊĠĠĠĠĠĠĠ Ġsw im ming Selector ( f lying Creature ). shouldBe False () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` select Ġby Ġsize `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnormal Creature Ġ= Ġmock k < Creature >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġnormal Creature . size Ġ} Ġreturns ĠNORMAL ĊĊĠĠĠĠĠĠĠ Ġval Ġsmall Creature Ġ= Ġmock k < Creature >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsmall Creature . size Ġ} Ġreturns ĠSMALL ĊĊĠĠĠĠĠĠĠ Ġval Ġnormal Selector Ġ= Ġsize Selector ( NORMAL ) ĊĊĠĠĠĠĠĠĠ Ġnormal Selector ( normal Creature ). shouldBe True () ĊĠĠĠĠĠĠĠ Ġnormal Selector ( small Creature ). shouldBe False () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` and Ġcomposite `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsw im ming He avy Creature Ġ= Ġmock k < Creature >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming He avy Creature . movement Ġ} Ġreturns ĠSW IM M ING ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming He avy Creature . mass Ġ} Ġreturns ĠMass ( 1 0 0 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsw im ming Light Creature Ġ= Ġmock k < Creature >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming Light Creature . movement Ġ} Ġreturns ĠSW IM M ING ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming Light Creature . mass Ġ} Ġreturns ĠMass ( 2 5 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlight And Sw im ming Selector Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmass Small er Than Or Eq Selector ( 5 0 . 0 ) Ġand Ġmovement Selector ( SW IM M ING ) ĊĊĠĠĠĠĠĠĠ Ġlight And Sw im ming Selector ( sw im ming He avy Creature ). shouldBe False () ĊĠĠĠĠĠĠĠ Ġlight And Sw im ming Selector ( sw im ming Light Creature ). shouldBe True () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` or Ġcomposite `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsw im ming He avy Creature Ġ= Ġmock k < Creature >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming He avy Creature . movement Ġ} Ġreturns ĠSW IM M ING ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming He avy Creature . mass Ġ} Ġreturns ĠMass ( 1 0 0 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsw im ming Light Creature Ġ= Ġmock k < Creature >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming Light Creature . movement Ġ} Ġreturns ĠSW IM M ING ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming Light Creature . mass Ġ} Ġreturns ĠMass ( 2 5 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġlight And Sw im ming Selector Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmass Small er Than Or Eq Selector ( 5 0 . 0 ) Ġor Ġmovement Selector ( SW IM M ING ) ĊĊĠĠĠĠĠĠĠ Ġlight And Sw im ming Selector ( sw im ming He avy Creature ). shouldBe True () ĊĠĠĠĠĠĠĠ Ġlight And Sw im ming Selector ( sw im ming Light Creature ). shouldBe True () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` not Ġcomposite `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsw im ming He avy Creature Ġ= Ġmock k < Creature >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming He avy Creature . movement Ġ} Ġreturns ĠSW IM M ING ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming He avy Creature . mass Ġ} Ġreturns ĠMass ( 1 0 0 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsw im ming Light Creature Ġ= Ġmock k < Creature >() ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming Light Creature . movement Ġ} Ġreturns ĠSW IM M ING ĊĠĠĠĠĠĠĠ Ġevery Ġ{ Ġsw im ming Light Creature . mass Ġ} Ġreturns ĠMass ( 2 5 . 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġheavy Selector Ġ= Ġmass Small er Than Or Eq Selector ( 5 0 . 0 ). not () ĊĊĠĠĠĠĠĠĠ Ġheavy Selector ( sw im ming He avy Creature ). shouldBe True () ĊĠĠĠĠĠĠĠ Ġheavy Selector ( sw im ming Light Creature ). shouldBe False () ĊĠĠĠ Ġ} Ċ }