feat: improve deferred event processing
Signed-off-by: Sebastian Krupinski <krupinski01@gmail.com>
This commit is contained in:
@@ -230,9 +230,57 @@ final class EventDispatcherTest extends TestCase
|
||||
$result = $dispatcher->processDeferred('test');
|
||||
|
||||
self::assertSame(1000, $result->processed);
|
||||
self::assertSame(1000, $result->listenerInvocations);
|
||||
self::assertSame(1, $result->remaining);
|
||||
self::assertFalse($result->deadlineExceeded);
|
||||
self::assertTrue($result->limitExceeded);
|
||||
self::assertTrue($result->eventLimitExceeded);
|
||||
self::assertFalse($result->listenerInvocationLimitExceeded);
|
||||
}
|
||||
|
||||
#[Test]
|
||||
#[TestDox('Deferred event and listener invocation limits are tracked separately')]
|
||||
public function boundsDeferredListenerInvocations(): void
|
||||
{
|
||||
$recursive = new RecursiveListener();
|
||||
$recording = new RecordingListener();
|
||||
$registry = new EventListenerRegistry();
|
||||
$registry->listen(
|
||||
'test',
|
||||
'test.event',
|
||||
RecursiveListener::class,
|
||||
'deferred',
|
||||
DeliveryMode::Deferred,
|
||||
);
|
||||
$registry->listen(
|
||||
'test',
|
||||
'test.event',
|
||||
RecordingListener::class,
|
||||
'deferred',
|
||||
DeliveryMode::Deferred,
|
||||
);
|
||||
$registry->freeze();
|
||||
$dispatcher = new EventDispatcher(
|
||||
$registry,
|
||||
new RecordingContainer([
|
||||
RecursiveListener::class => $recursive,
|
||||
RecordingListener::class => $recording,
|
||||
]),
|
||||
new NullLogger(),
|
||||
maxDeferredListenerInvocations: 3,
|
||||
);
|
||||
$recursive->dispatcher = $dispatcher;
|
||||
$dispatcher->beginExecution('test');
|
||||
$dispatcher->dispatch(new Event('test.event'));
|
||||
|
||||
$result = $dispatcher->processDeferred('test');
|
||||
|
||||
self::assertSame(1, $result->processed);
|
||||
self::assertSame(2, $result->listenerInvocations);
|
||||
self::assertSame(1, $result->remaining);
|
||||
self::assertTrue($result->limitExceeded);
|
||||
self::assertFalse($result->eventLimitExceeded);
|
||||
self::assertTrue($result->listenerInvocationLimitExceeded);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user