public function it_should_apply_registration_callbacks_on_registered_events(Event $event1, Event $event2, Event $event3, Event $event4, Event $event5, EventRegistrationCallback $callback, EventRegistrationCallback $callback2)
 {
     $event1->sequenceNumber()->willReturn(1);
     $event2->sequenceNumber()->willReturn(2);
     $event3->sequenceNumber()->willReturn(1);
     $event4->sequenceNumber()->willReturn(2);
     $this->addEvent($event1);
     $this->addEvent($event2);
     $callback->onEventRegistration($event1)->shouldBeCalledTimes(1)->willReturn($event3);
     $callback->onEventRegistration($event2)->shouldBeCalledTimes(1)->willReturn($event4);
     $this->addRegistrationCallback($callback);
     $callback2->onEventRegistration($event3)->shouldBeCalledTimes(1)->willReturn($event3);
     $callback2->onEventRegistration($event4)->shouldBeCalledTimes(1)->willReturn($event4);
     $this->addRegistrationCallback($callback2);
     $event5->sequenceNumber()->willReturn(3);
     $callback->onEventRegistration($event5)->shouldBeCalledTimes(1)->willReturn($event5);
     $callback2->onEventRegistration($event5)->shouldBeCalledTimes(1)->willReturn($event5);
     $this->addEvent($event5);
 }
 /**
  * @param EventRegistrationCallback $callback
  */
 public function addRegistrationCallback(EventRegistrationCallback $callback)
 {
     $this->registrationCallbacks[] = $callback;
     // Apply the callback on already registered events.
     $eventsCount = count($this->events);
     for ($i = 0; $i < $eventsCount; $i++) {
         $this->events[$i] = $callback->onEventRegistration($this->events[$i]);
     }
 }