package Ġnz . co . j ed sim son . lg p . test . environment Ċ Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . any Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . mock Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . times Ċ import Ġcom . n ha ar man . mock it ok otlin 2 . verify Ċ import Ġnz . co . j ed sim son . lg p . core . environment . events . Event Ċ import Ġnz . co . j ed sim son . lg p . core . environment . events . EventDispatcher Ċ import Ġnz . co . j ed sim son . lg p . core . environment . events . EventListener Ċ import Ġnz . co . j ed sim son . lg p . core . environment . events . Event Registry Ċ import Ġorg . spe k framework . spe k 2 . Spe k Ċ import Ġorg . spe k framework . spe k 2 . style . g her kin . Feature Ċ Ċ object ĠEvents Feature Ġ: ĠSpe k ({ ĊĠĠĠ ĠFeature (" Events ") Ġ{ ĊĊĠĠĠĠĠĠĠ ĠScenario (" Event Ġlisteners Ġcan Ġbe Ġregistered ") Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠGiven (" An Ġevent Ġlistener Ġis Ġregistered ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Registry . register ( object Ġ: ĠEvent Listener < Test Event > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle ( event : ĠTest Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( event . identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" The Ġevent Ġdispatcher Ġhas Ġa Ġsingle Ġevent Ġlistener Ġregistered ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnumberOf Listeners Ġ= ĠEvent Registry . numberOf Listeners ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( numberOf Listeners Ġ== Ġ 1 ) Ġ{ Ġ" Expected Ġ 1 Ġlistener Ġbut Ġgot Ġ$ numberOf Listeners "} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠGiven (" An Ġevent Ġlistener Ġis Ġregistered ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Registry . register ( object Ġ: ĠEvent Listener < Test Event > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle ( event : ĠTest Event ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln ( event . identifier ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" The Ġevent Ġdispatcher Ġhas Ġtwo Ġevent Ġlisteners Ġregistered ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠnumberOf Listeners Ġ= ĠEvent Registry . numberOf Listeners ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert ( numberOf Listeners Ġ== Ġ 2 ) Ġ{ Ġ" Expected Ġ 2 Ġlisteners Ġbut Ġgot Ġ$ numberOf Listeners "} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠScenario (" An Ġevent Ġcan Ġbe Ġdis patched Ġto Ġa Ġlistener ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener Ġ= Ġmock < EventListener < Test Event >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠGiven (" An Ġevent Ġlistener Ġis Ġregistered ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Registry . register ( listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhen (" An Ġevent Ġthat Ġthe Ġlistener Ġis Ġnot Ġlistening Ġfor Ġis Ġdis patched ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Dispatcher . dispatch ( Secondary Test Event ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" The Ġlistener Ġis Ġnot Ġcalled ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( listener , Ġtimes ( 0 )). handle ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhen (" An Ġevent Ġthat Ġthe Ġlistener Ġis Ġlistening Ġfor Ġis Ġdis patched ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Dispatcher . dispatch ( Test Event ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" The Ġlistener Ġis Ġcalled ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( listener , Ġtimes ( 1 )). handle ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠScenario (" An Ġevent Ġcan Ġbe Ġdis patched Ġto Ġmultiple Ġlisteners ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener 1 Ġ= Ġmock < EventListener < Test Event >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener 2 Ġ= Ġmock < EventListener < Test Event >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener 3 Ġ= Ġmock < EventListener < Secondary Test Event >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠGiven (" Multiple Ġevent Ġlisteners Ġare Ġregistered ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Registry . register ( listener 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Registry . register ( listener 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Registry . register ( listener 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhen (" An Ġevent Ġthat Ġthe Ġlisteners Ġare Ġlistening Ġfor Ġis Ġdis patched ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Dispatcher . dispatch ( Test Event ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" The Ġlisteners Ġare Ġcalled ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( listener 1 , Ġtimes ( 1 )). handle ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( listener 2 , Ġtimes ( 1 )). handle ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( listener 3 , Ġtimes ( 0 )). handle ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠScenario (" Different Ġevent Ġare Ġdis patched Ġto Ġdifferent Ġlisteners ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener 1 Ġ= Ġmock < EventListener < Test Event >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlistener 2 Ġ= Ġmock < EventListener < Secondary Test Event >>() ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠGiven (" Multiple Ġevent Ġlisteners Ġare Ġregistered ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Registry . register ( listener 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Registry . register ( listener 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠWhen (" An Ġevent Ġthat Ġeach Ġlistener Ġis Ġlistening Ġfor Ġis Ġdis patched ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Dispatcher . dispatch ( Test Event ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEvent Dispatcher . dispatch ( Secondary Test Event ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠThen (" The Ġlisteners Ġare Ġcalled ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( listener 1 , Ġtimes ( 1 )). handle ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġverify ( listener 2 , Ġtimes ( 1 )). handle ( any ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }) Ċ Ċ class ĠTest Event Ġ: ĠEvent () Ċ Ċ class ĠSecondary Test Event Ġ: ĠEvent ()