Skip to content

Commit c72459a

Browse files
[9.x] Avoid mutating the $expectedLitener between loops on Event::assertListening (#46095)
* Avoid mutability when normalizing listeners for Event::assertListening * formatting --------- Co-authored-by: Taylor Otwell <[email protected]>
1 parent d4df356 commit c72459a

File tree

2 files changed

+20
-8
lines changed

2 files changed

+20
-8
lines changed

src/Illuminate/Support/Testing/Fakes/EventFake.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,21 +85,23 @@ public function assertListening($expectedEvent, $expectedListener)
8585
$actualListener = (new ReflectionFunction($listenerClosure))
8686
->getStaticVariables()['listener'];
8787

88+
$normalizedListener = $expectedListener;
89+
8890
if (is_string($actualListener) && Str::contains($actualListener, '@')) {
8991
$actualListener = Str::parseCallback($actualListener);
9092

9193
if (is_string($expectedListener)) {
9294
if (Str::contains($expectedListener, '@')) {
93-
$expectedListener = Str::parseCallback($expectedListener);
95+
$normalizedListener = Str::parseCallback($expectedListener);
9496
} else {
95-
$expectedListener = [$expectedListener, 'handle'];
97+
$normalizedListener = [$expectedListener, 'handle'];
9698
}
9799
}
98100
}
99101

100-
if ($actualListener === $expectedListener ||
102+
if ($actualListener === $normalizedListener ||
101103
($actualListener instanceof Closure &&
102-
$expectedListener === Closure::class)) {
104+
$normalizedListener === Closure::class)) {
103105
PHPUnit::assertTrue(true);
104106

105107
return;

tests/Integration/Events/EventFakeTest.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Closure;
66
use Illuminate\Database\Eloquent\Model;
77
use Illuminate\Database\Schema\Blueprint;
8+
use Illuminate\Support\Arr;
89
use Illuminate\Support\Facades\Event;
910
use Illuminate\Support\Facades\Schema;
1011
use Orchestra\Testbench\TestCase;
@@ -140,11 +141,20 @@ public function testEventsListedInExceptAreProperlyDispatched()
140141
public function testAssertListening()
141142
{
142143
Event::fake();
143-
Event::listen('event', 'listener');
144-
Event::listen('event', PostEventSubscriber::class);
145-
Event::listen('event', 'Illuminate\\Tests\\Integration\\Events\\PostAutoEventSubscriber@handle');
146-
Event::listen('event', [PostEventSubscriber::class, 'foo']);
144+
145+
$listenersOfSameEventInRandomOrder = Arr::shuffle([
146+
'listener',
147+
'Illuminate\\Tests\\Integration\\Events\\PostAutoEventSubscriber@handle',
148+
PostEventSubscriber::class,
149+
[PostEventSubscriber::class, 'foo'],
150+
]);
151+
152+
foreach ($listenersOfSameEventInRandomOrder as $listener) {
153+
Event::listen('event', $listener);
154+
}
155+
147156
Event::subscribe(PostEventSubscriber::class);
157+
148158
Event::listen(function (NonImportantEvent $event) {
149159
// do something
150160
});

0 commit comments

Comments
 (0)