@@ -200,10 +200,22 @@ public function testEventSubscriberUnresolvableClassName()
200
200
public function testInvokableEventListener ()
201
201
{
202
202
$ container = new ContainerBuilder ();
203
- $ container ->register ('foo ' , \stdClass::class)->addTag ('kernel.event_listener ' , ['event ' => 'foo.bar ' ]);
203
+ $ container ->setParameter ('event_dispatcher.event_aliases ' , [AliasedEvent::class => 'aliased_event ' ]);
204
+
205
+ $ container ->register ('foo ' , \get_class (new class () {
206
+ public function onFooBar ()
207
+ {
208
+ }
209
+ }))->addTag ('kernel.event_listener ' , ['event ' => 'foo.bar ' ]);
204
210
$ container ->register ('bar ' , InvokableListenerService::class)->addTag ('kernel.event_listener ' , ['event ' => 'foo.bar ' ]);
205
211
$ container ->register ('baz ' , InvokableListenerService::class)->addTag ('kernel.event_listener ' , ['event ' => 'event ' ]);
206
- $ container ->register ('zar ' , \stdClass::class)->addTag ('kernel.event_listener ' , ['event ' => 'foo.bar_zar ' ]);
212
+ $ container ->register ('zar ' , \get_class (new class () {
213
+ public function onFooBarZar ()
214
+ {
215
+ }
216
+ }))->addTag ('kernel.event_listener ' , ['event ' => 'foo.bar_zar ' ]);
217
+ $ container ->register ('typed_listener ' , InvokableListenerService::class)->addTag ('kernel.event_listener ' , ['event ' => CustomEvent::class]);
218
+ $ container ->register ('aliased_event ' , InvokableListenerService::class)->addTag ('kernel.event_listener ' , ['event ' => 'aliased_event ' ]);
207
219
$ container ->register ('event_dispatcher ' , \stdClass::class);
208
220
209
221
$ registerListenersPass = new RegisterListenersPass ();
@@ -243,10 +255,66 @@ public function testInvokableEventListener()
243
255
0 ,
244
256
],
245
257
],
258
+ [
259
+ 'addListener ' ,
260
+ [
261
+ CustomEvent::class,
262
+ [new ServiceClosureArgument (new Reference ('typed_listener ' )), 'onCustomEvent ' ],
263
+ 0 ,
264
+ ],
265
+ ],
266
+ [
267
+ 'addListener ' ,
268
+ [
269
+ 'aliased_event ' ,
270
+ [new ServiceClosureArgument (new Reference ('aliased_event ' )), 'onAliasedEvent ' ],
271
+ 0 ,
272
+ ],
273
+ ],
246
274
];
247
275
$ this ->assertEquals ($ expectedCalls , $ definition ->getMethodCalls ());
248
276
}
249
277
278
+ public function testItThrowsAnExceptionIfTagIsMissingMethodAndClassHasMultipleMethodsWithEvent ()
279
+ {
280
+ $ this ->expectException (InvalidArgumentException::class);
281
+ $ this ->expectExceptionMessage ('Service "foo" must define the "method" attribute on "kernel.event_listener" tags. ' );
282
+
283
+ $ container = new ContainerBuilder ();
284
+
285
+ $ container ->register ('foo ' , \get_class (new class () {
286
+ public function doSomethingOnCustomEvent (CustomEvent $ event )
287
+ {
288
+ }
289
+
290
+ public function doAnotherThingOnCustomEvent (CustomEvent $ event )
291
+ {
292
+ }
293
+ }))->addTag ('kernel.event_listener ' , ['event ' => CustomEvent::class]);
294
+ $ container ->register ('event_dispatcher ' , \stdClass::class);
295
+
296
+ $ registerListenersPass = new RegisterListenersPass ();
297
+ $ registerListenersPass ->process ($ container );
298
+ }
299
+
300
+ public function testItThrowsAnExceptionIfTagIsMissingMethodAndClassHasNoMethodWithEvent ()
301
+ {
302
+ $ this ->expectException (InvalidArgumentException::class);
303
+ $ this ->expectExceptionMessage ('Service "foo" must define the "method" attribute on "kernel.event_listener" tags. ' );
304
+
305
+ $ container = new ContainerBuilder ();
306
+
307
+ $ container ->register ('foo ' , \get_class (new class () {
308
+ public function doSomethingOnCustomEvent ($ event )
309
+ {
310
+ }
311
+ }))->addTag ('kernel.event_listener ' , ['event ' => CustomEvent::class]);
312
+ $ container ->register ('event_dispatcher ' , \stdClass::class);
313
+
314
+ $ registerListenersPass = new RegisterListenersPass ();
315
+ $ registerListenersPass ->process ($ container );
316
+ }
317
+
250
318
public function testTaggedInvokableEventListener ()
251
319
{
252
320
$ container = new ContainerBuilder ();
@@ -500,6 +568,14 @@ public function __invoke()
500
568
public function onEvent ()
501
569
{
502
570
}
571
+
572
+ public function onCustomEvent (CustomEvent $ event ): void
573
+ {
574
+ }
575
+
576
+ public function onAliasedEvent (AliasedEvent $ event ): void
577
+ {
578
+ }
503
579
}
504
580
505
581
final class AliasedSubscriber implements EventSubscriberInterface
0 commit comments