package Ġorg . kol le kt ions . dispatch ers Ċ Ċ import Ġorg . kol le kt ions . consum ers . asList Ċ import Ġorg . kol le kt ions . consum ers . consume Ċ import Ġorg . kol le kt ions . transform ations . filter On Ċ import Ġorg . kol le kt ions . test utils . Fake Stop Tester Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ Ċ class ĠGroup Dispatcher Test Ġ{ ĊĠĠĠ Ġprivate Ġval Ġsut Ġ= ĊĠĠĠĠĠĠĠ Ġfilter On < Test Thing > Ġ{ Ġit . color Ġ!= Ġ" Red " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy ( key Factory Ġ= Ġ{ it : ĠTest Thing Ġ-> Ġit . color }, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner Consumer Factory Ġ= Ġ{ Ġas List () Ġ}) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` handles Ġempty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= ĠlistOf < Test Thing >(). consume ( sut ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmap Of < String , ĠTest Thing >() ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġactual [ 0 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` handles Ġnon - empty `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġthings . consume ( sut ) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmap Of (" Blue " Ġto ĠlistOf ( blue Square , Ġblue Circle ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Am ber " Ġto ĠlistOf ( amber Square )) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġactual [ 0 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġ` passes Ġstop Ġdownstream `() Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsut Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfilter On < Test Thing > Ġ{ Ġit . color Ġ!= Ġ" Red " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. groupBy ( key Factory Ġ= Ġ{ it : ĠTest Thing Ġ-> Ġit . color }, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinner Consumer Factory Ġ= Ġ{ ĠFake Stop Tester () Ġ}) ĊĠĠĠĠĠĠĠ Ġsut . process ( blue Circle ) ĊĠĠĠĠĠĠĠ Ġsut . process ( amber Square ) ĊĠĠĠĠĠĠĠ Ġsut . stop () ĊĠĠĠĠĠĠĠ Ġval Ġactual Ġ= Ġsut . results () ĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġmap Of (" Blue " Ġto Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Am ber " Ġto Ġtrue ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected , Ġactual ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġdata Ġclass ĠTest Thing ( val Ġcolor : ĠString , Ġval Ġshape : ĠString ) ĊĊĠĠĠ Ġprivate Ġval Ġblue Square Ġ= ĠTest Thing (" Blue ", Ġ" Square ") ĊĠĠĠ Ġprivate Ġval Ġblue Circle Ġ= ĠTest Thing (" Blue ", Ġ" Circle ") ĊĠĠĠ Ġprivate Ġval Ġam ber Square Ġ= ĠTest Thing (" Am ber ", Ġ" Square ") ĊĠĠĠ Ġprivate Ġval Ġthings Ġ= ĠlistOf ( ĊĠĠĠĠĠĠĠ Ġblue Square , ĊĠĠĠĠĠĠĠ Ġblue Circle , ĊĠĠĠĠĠĠĠ Ġam ber Square , ĊĠĠĠĠĠĠĠ ĠTest Thing (" Red ", Ġ" Dot ") ĊĠĠĠ Ġ) Ċ } Ċ