33namespace React \Promise \PromiseTest ;
44
55use React \Promise \Deferred ;
6- use React \Promise \UnhandledRejectionException ;
76
87trait PromiseRejectedTestTrait
98{
@@ -185,7 +184,7 @@ function ($val) {
185184 }
186185
187186 /** @test */
188- public function doneShouldInvokeRejectionHandler ()
187+ public function doneShouldInvokeRejectionHandlerForRejectedPromise ()
189188 {
190189 $ adapter = $ this ->getPromiseTestAdapter ();
191190
@@ -200,20 +199,31 @@ public function doneShouldInvokeRejectionHandler()
200199 }
201200
202201 /** @test */
203- public function doneShouldBeFatalWhenRejectionHandlerThrows ()
202+ public function doneShouldThrowExceptionThrownByRejectionHandlerForRejectedPromise ()
204203 {
205204 $ adapter = $ this ->getPromiseTestAdapter ();
206205
207- $ this ->setExpectedException ('React \\ Promise \\ UnhandledRejectionException ' );
206+ $ this ->setExpectedException ('\Exception ' , ' UnhandledRejectionException ' );
208207
209208 $ adapter ->reject (1 );
210209 $ this ->assertNull ($ adapter ->promise ()->done (null , function () {
211- throw new \Exception ();
210+ throw new \Exception (' UnhandledRejectionException ' );
212211 }));
213212 }
214213
215214 /** @test */
216- public function doneShouldBeFatalWhenRejectionHandlerRejects ()
215+ public function doneShouldThrowUnhandledRejectionExceptionWhenRejectedWithNonExceptionForRejectedPromise ()
216+ {
217+ $ adapter = $ this ->getPromiseTestAdapter ();
218+
219+ $ this ->setExpectedException ('React \\Promise \\UnhandledRejectionException ' );
220+
221+ $ adapter ->reject (1 );
222+ $ this ->assertNull ($ adapter ->promise ()->done ());
223+ }
224+
225+ /** @test */
226+ public function doneShouldThrowUnhandledRejectionExceptionWhenRejectionHandlerRejectsForRejectedPromise ()
217227 {
218228 $ adapter = $ this ->getPromiseTestAdapter ();
219229
@@ -226,20 +236,35 @@ public function doneShouldBeFatalWhenRejectionHandlerRejects()
226236 }
227237
228238 /** @test */
229- public function doneShouldBeFatalWhenNoRejectionHandlerProvided ()
239+ public function doneShouldThrowRejectionExceptionWhenRejectionHandlerRejectsWithExceptionForRejectedPromise ()
230240 {
231241 $ adapter = $ this ->getPromiseTestAdapter ();
232242
233- $ this ->setExpectedException ('React \\ Promise \\ UnhandledRejectionException ' );
243+ $ this ->setExpectedException ('\Exception ' , ' UnhandledRejectionException ' );
234244
235245 $ adapter ->reject (1 );
246+ $ this ->assertNull ($ adapter ->promise ()->done (null , function () {
247+ return \React \Promise \reject (new \Exception ('UnhandledRejectionException ' ));
248+ }));
249+ }
250+
251+ /** @test */
252+ public function doneShouldThrowExceptionProvidedAsRejectionValueForRejectedPromise ()
253+ {
254+ $ adapter = $ this ->getPromiseTestAdapter ();
255+
256+ $ this ->setExpectedException ('\Exception ' , 'UnhandledRejectionException ' );
257+
258+ $ adapter ->reject (new \Exception ('UnhandledRejectionException ' ));
236259 $ this ->assertNull ($ adapter ->promise ()->done ());
237260 }
238261
239262 /** @test */
240- public function doneShouldBeFatalInDeepNestingPromiseChains ()
263+ public function doneShouldThrowWithDeepNestingPromiseChainsForRejectedPromise ()
241264 {
242- $ exception = new \Exception ('Fatal ' );
265+ $ this ->setExpectedException ('\Exception ' , 'UnhandledRejectionException ' );
266+
267+ $ exception = new \Exception ('UnhandledRejectionException ' );
243268
244269 $ d = new Deferred ();
245270 $ d ->resolve ();
@@ -248,24 +273,24 @@ public function doneShouldBeFatalInDeepNestingPromiseChains()
248273 $ d = new Deferred ();
249274 $ d ->resolve ();
250275
251- $ identity = function () {
252- };
253-
254- return \React \Promise \resolve ($ d ->promise ()->then ($ identity ))->then (
255- function () use ($ exception ) {
276+ return \React \Promise \resolve ($ d ->promise ()->then (function () {}))->then (
277+ function () use ($ exception ) {
256278 throw $ exception ;
257279 }
258280 );
259281 })));
260282
261- $ catchedException = null ;
283+ $ result ->done ();
284+ }
262285
263- try {
264- $ result ->done ();
265- } catch (UnhandledRejectionException $ e ) {
266- $ catchedException = $ e ->getReason ();
267- }
286+ /** @test */
287+ public function doneShouldRecoverWhenRejectionHandlerCatchesExceptionForRejectedPromise ()
288+ {
289+ $ adapter = $ this ->getPromiseTestAdapter ();
290+
291+ $ adapter ->reject (new \Exception ('UnhandledRejectionException ' ));
292+ $ this ->assertNull ($ adapter ->promise ()->done (null , function (\Exception $ e ) {
268293
269- $ this -> assertEquals ( $ exception , $ catchedException );
294+ }) );
270295 }
271296}
0 commit comments