2727#[CoversClass(AbstractHydrator::class)]
2828class AbstractHydratorTest extends OrmFunctionalTestCase
2929{
30- private EventManager & MockObject $ mockEventManager ;
30+ private EventManager $ eventManager ;
3131 private Result &MockObject $ mockResult ;
3232 private ResultSetMapping &MockObject $ mockResultMapping ;
3333 private DummyHydrator $ hydrator ;
@@ -38,7 +38,7 @@ protected function setUp(): void
3838
3939 $ mockConnection = $ this ->createMock (Connection::class);
4040 $ mockEntityManagerInterface = $ this ->createMock (EntityManagerInterface::class);
41- $ this ->mockEventManager = $ this -> createMock ( EventManager::class );
41+ $ this ->eventManager = new EventManager ( );
4242 $ this ->mockResult = $ this ->createMock (Result::class);
4343 $ this ->mockResultMapping = $ this ->createMock (ResultSetMapping::class);
4444
@@ -47,7 +47,7 @@ protected function setUp(): void
4747 ->willReturn ($ this ->createMock (AbstractPlatform::class));
4848 $ mockEntityManagerInterface
4949 ->method ('getEventManager ' )
50- ->willReturn ($ this ->mockEventManager );
50+ ->willReturn ($ this ->eventManager );
5151 $ mockEntityManagerInterface
5252 ->method ('getConnection ' )
5353 ->willReturn ($ mockConnection );
@@ -66,85 +66,29 @@ protected function setUp(): void
6666 #[Group('#1515 ' )]
6767 public function testOnClearEventListenerIsDetachedOnCleanup (): void
6868 {
69- $ eventListenerHasBeenRegistered = false ;
70-
71- $ this
72- ->mockEventManager
73- ->expects (self ::once ())
74- ->method ('addEventListener ' )
75- ->with ([Events::onClear], $ this ->hydrator )
76- ->willReturnCallback (function () use (&$ eventListenerHasBeenRegistered ): void {
77- $ this ->assertFalse ($ eventListenerHasBeenRegistered );
78- $ eventListenerHasBeenRegistered = true ;
79- });
80-
81- $ this
82- ->mockEventManager
83- ->expects (self ::once ())
84- ->method ('removeEventListener ' )
85- ->with ([Events::onClear], $ this ->hydrator )
86- ->willReturnCallback (function () use (&$ eventListenerHasBeenRegistered ): void {
87- $ this ->assertTrue ($ eventListenerHasBeenRegistered );
88- });
89-
90- iterator_to_array ($ this ->hydrator ->toIterable ($ this ->mockResult , $ this ->mockResultMapping ));
69+ $ iterator = $ this ->hydrator ->toIterable ($ this ->mockResult , $ this ->mockResultMapping );
70+ iterator_to_array ($ iterator );
71+ self ::assertTrue ($ this ->hydrator ->hasListener );
72+ self ::assertFalse ($ this ->eventManager ->hasListeners (Events::onClear));
9173 }
9274
9375 #[Group('#6623 ' )]
9476 public function testHydrateAllRegistersAndClearsAllAttachedListeners (): void
9577 {
96- $ eventListenerHasBeenRegistered = false ;
97-
98- $ this
99- ->mockEventManager
100- ->expects (self ::once ())
101- ->method ('addEventListener ' )
102- ->with ([Events::onClear], $ this ->hydrator )
103- ->willReturnCallback (function () use (&$ eventListenerHasBeenRegistered ): void {
104- $ this ->assertFalse ($ eventListenerHasBeenRegistered );
105- $ eventListenerHasBeenRegistered = true ;
106- });
107-
108- $ this
109- ->mockEventManager
110- ->expects (self ::once ())
111- ->method ('removeEventListener ' )
112- ->with ([Events::onClear], $ this ->hydrator )
113- ->willReturnCallback (function () use (&$ eventListenerHasBeenRegistered ): void {
114- $ this ->assertTrue ($ eventListenerHasBeenRegistered );
115- });
116-
11778 $ this ->hydrator ->hydrateAll ($ this ->mockResult , $ this ->mockResultMapping );
79+ self ::assertTrue ($ this ->hydrator ->hasListener );
80+ self ::assertFalse ($ this ->eventManager ->hasListeners (Events::onClear));
11881 }
11982
12083 #[Group('#8482 ' )]
12184 public function testHydrateAllClearsAllAttachedListenersEvenOnError (): void
12285 {
123- $ eventListenerHasBeenRegistered = false ;
124-
125- $ this
126- ->mockEventManager
127- ->expects (self ::once ())
128- ->method ('addEventListener ' )
129- ->with ([Events::onClear], $ this ->hydrator )
130- ->willReturnCallback (function () use (&$ eventListenerHasBeenRegistered ): void {
131- $ this ->assertFalse ($ eventListenerHasBeenRegistered );
132- $ eventListenerHasBeenRegistered = true ;
133- });
134-
135- $ this
136- ->mockEventManager
137- ->expects (self ::once ())
138- ->method ('removeEventListener ' )
139- ->with ([Events::onClear], $ this ->hydrator )
140- ->willReturnCallback (function () use (&$ eventListenerHasBeenRegistered ): void {
141- $ this ->assertTrue ($ eventListenerHasBeenRegistered );
142- });
143-
14486 $ this ->hydrator ->throwException = true ;
14587
14688 $ this ->expectException (LogicException::class);
14789 $ this ->hydrator ->hydrateAll ($ this ->mockResult , $ this ->mockResultMapping );
90+ self ::assertTrue ($ this ->hydrator ->hasListener );
91+ self ::assertFalse ($ this ->eventManager ->hasListeners (Events::onClear));
14892 }
14993
15094 public function testEnumCastsIntegerBackedEnumValues (): void
@@ -198,6 +142,7 @@ public function testToIterableIfYieldAndBreakBeforeFinishAlwaysCleansUp(): void
198142class DummyHydrator extends AbstractHydrator
199143{
200144 public bool $ throwException = false ;
145+ public bool $ hasListener = false ;
201146
202147 public function buildEnumForTesting (mixed $ value , string $ enumType ): BackedEnum |array
203148 {
@@ -213,4 +158,9 @@ protected function hydrateAllData(): array
213158
214159 return [];
215160 }
161+
162+ public function prepare (): void
163+ {
164+ $ this ->hasListener = $ this ->em ->getEventManager ()->hasListeners (Events::onClear);
165+ }
216166}
0 commit comments