2222/** @covers \Doctrine\ORM\Internal\Hydration\AbstractHydrator */
2323class AbstractHydratorTest extends OrmFunctionalTestCase
2424{
25- /** @var EventManager&MockObject */
26- private $ mockEventManager ;
25+ /** @var EventManager */
26+ private $ eventManager ;
2727
2828 /** @var Result&MockObject */
2929 private $ mockResult ;
@@ -40,14 +40,14 @@ protected function setUp(): void
4040
4141 $ mockConnection = $ this ->createMock (Connection::class);
4242 $ mockEntityManagerInterface = $ this ->createMock (EntityManagerInterface::class);
43- $ this ->mockEventManager = $ this -> createMock ( EventManager::class );
43+ $ this ->eventManager = new EventManager ( );
4444 $ this ->mockResult = $ this ->createMock (Result::class);
4545 $ this ->mockResultMapping = $ this ->createMock (ResultSetMapping::class);
4646
4747 $ mockEntityManagerInterface
4848 ->expects (self ::any ())
4949 ->method ('getEventManager ' )
50- ->willReturn ($ this ->mockEventManager );
50+ ->willReturn ($ this ->eventManager );
5151 $ mockEntityManagerInterface
5252 ->expects (self ::any ())
5353 ->method ('getConnection ' )
@@ -69,85 +69,29 @@ protected function setUp(): void
6969 */
7070 public function testOnClearEventListenerIsDetachedOnCleanup (): void
7171 {
72- $ eventListenerHasBeenRegistered = false ;
73-
74- $ this
75- ->mockEventManager
76- ->expects (self ::once ())
77- ->method ('addEventListener ' )
78- ->with ([Events::onClear], $ this ->hydrator )
79- ->willReturnCallback (function () use (&$ eventListenerHasBeenRegistered ): void {
80- $ this ->assertFalse ($ eventListenerHasBeenRegistered );
81- $ eventListenerHasBeenRegistered = true ;
82- });
83-
84- $ this
85- ->mockEventManager
86- ->expects (self ::once ())
87- ->method ('removeEventListener ' )
88- ->with ([Events::onClear], $ this ->hydrator )
89- ->willReturnCallback (function () use (&$ eventListenerHasBeenRegistered ): void {
90- $ this ->assertTrue ($ eventListenerHasBeenRegistered );
91- });
92-
93- iterator_to_array ($ this ->hydrator ->iterate ($ this ->mockResult , $ this ->mockResultMapping ));
72+ $ iterator = $ this ->hydrator ->iterate ($ this ->mockResult , $ this ->mockResultMapping );
73+ self ::assertTrue ($ this ->eventManager ->hasListeners (Events::onClear));
74+ iterator_to_array ($ iterator );
75+ self ::assertFalse ($ this ->eventManager ->hasListeners (Events::onClear));
9476 }
9577
9678 /** @group #6623 */
9779 public function testHydrateAllRegistersAndClearsAllAttachedListeners (): void
9880 {
99- $ eventListenerHasBeenRegistered = false ;
100-
101- $ this
102- ->mockEventManager
103- ->expects (self ::once ())
104- ->method ('addEventListener ' )
105- ->with ([Events::onClear], $ this ->hydrator )
106- ->willReturnCallback (function () use (&$ eventListenerHasBeenRegistered ): void {
107- $ this ->assertFalse ($ eventListenerHasBeenRegistered );
108- $ eventListenerHasBeenRegistered = true ;
109- });
110-
111- $ this
112- ->mockEventManager
113- ->expects (self ::once ())
114- ->method ('removeEventListener ' )
115- ->with ([Events::onClear], $ this ->hydrator )
116- ->willReturnCallback (function () use (&$ eventListenerHasBeenRegistered ): void {
117- $ this ->assertTrue ($ eventListenerHasBeenRegistered );
118- });
119-
12081 $ this ->hydrator ->hydrateAll ($ this ->mockResult , $ this ->mockResultMapping );
82+ self ::assertTrue ($ this ->hydrator ->hasListener );
83+ self ::assertFalse ($ this ->eventManager ->hasListeners (Events::onClear));
12184 }
12285
12386 /** @group #8482 */
12487 public function testHydrateAllClearsAllAttachedListenersEvenOnError (): void
12588 {
126- $ eventListenerHasBeenRegistered = false ;
127-
128- $ this
129- ->mockEventManager
130- ->expects (self ::once ())
131- ->method ('addEventListener ' )
132- ->with ([Events::onClear], $ this ->hydrator )
133- ->willReturnCallback (function () use (&$ eventListenerHasBeenRegistered ): void {
134- $ this ->assertFalse ($ eventListenerHasBeenRegistered );
135- $ eventListenerHasBeenRegistered = true ;
136- });
137-
138- $ this
139- ->mockEventManager
140- ->expects (self ::once ())
141- ->method ('removeEventListener ' )
142- ->with ([Events::onClear], $ this ->hydrator )
143- ->willReturnCallback (function () use (&$ eventListenerHasBeenRegistered ): void {
144- $ this ->assertTrue ($ eventListenerHasBeenRegistered );
145- });
146-
14789 $ this ->hydrator ->throwException = true ;
14890
14991 $ this ->expectException (ORMException::class);
15092 $ this ->hydrator ->hydrateAll ($ this ->mockResult , $ this ->mockResultMapping );
93+ self ::assertTrue ($ this ->hydrator ->hasListener );
94+ self ::assertFalse ($ this ->eventManager ->hasListeners (Events::onClear));
15195 }
15296
15397 public function testToIterableIfYieldAndBreakBeforeFinishAlwaysCleansUp (): void
@@ -185,6 +129,9 @@ class DummyHydrator extends AbstractHydrator
185129 /** @var bool */
186130 public $ throwException = false ;
187131
132+ /** @var bool */
133+ public $ hasListener = false ;
134+
188135 /** {@inheritDoc} */
189136 protected function hydrateAllData ()
190137 {
@@ -194,4 +141,9 @@ protected function hydrateAllData()
194141
195142 return [];
196143 }
144+
145+ public function prepare (): void
146+ {
147+ $ this ->hasListener = $ this ->_em ->getEventManager ()->hasListeners (Events::onClear);
148+ }
197149}
0 commit comments