5
5
use GraphQL \Executor \Promise \Adapter \ReactPromiseAdapter ;
6
6
use PHPUnit \Framework \TestCase ;
7
7
use React \Promise \Deferred ;
8
- use React \Promise \FulfilledPromise ;
9
8
use React \Promise \Promise ;
10
9
use React \Promise \Promise as ReactPromise ;
11
- use React \Promise \RejectedPromise ;
12
10
13
11
use function React \Promise \reject ;
14
12
use function React \Promise \resolve ;
18
16
*/
19
17
final class ReactPromiseAdapterTest extends TestCase
20
18
{
19
+ /** @var class-string<object> */
20
+ private string $ classFulfilledPromise ;
21
+
22
+ /** @var class-string<object> */
23
+ private string $ classRejectedPromise ;
24
+
25
+ public function setUp (): void
26
+ {
27
+ /** @var class-string<object> $classFulfilledPromise */
28
+ $ classFulfilledPromise = \class_exists ('\React\Promise\FulfilledPromise ' )
29
+ ? '\React\Promise\FulfilledPromise '
30
+ : '\React\Promise\Internal\FulfilledPromise ' ;
31
+ $ this ->classFulfilledPromise = $ classFulfilledPromise ;
32
+
33
+ /** @var class-string<object> $classRejectedPromise */
34
+ $ classRejectedPromise = \class_exists ('\React\Promise\RejectedPromise ' )
35
+ ? '\React\Promise\RejectedPromise '
36
+ : '\React\Promise\Internal\RejectedPromise ' ;
37
+ $ this ->classRejectedPromise = $ classRejectedPromise ;
38
+ }
39
+
21
40
public function testIsThenableReturnsTrueWhenAReactPromiseIsGiven (): void
22
41
{
42
+ /** @var callable $reactPromiseSetRejectionHandler */
43
+ $ reactPromiseSetRejectionHandler = \function_exists ('\React\Promise\set_rejection_handler ' )
44
+ ? '\React\Promise\set_rejection_handler '
45
+ : fn ($ error ) => null ;
46
+
23
47
$ reactAdapter = new ReactPromiseAdapter ();
24
48
25
49
self ::assertTrue ($ reactAdapter ->isThenable (new ReactPromise (static fn () => null )));
26
- self ::assertTrue ($ reactAdapter ->isThenable (resolve ()));
27
- self ::assertTrue ($ reactAdapter ->isThenable (reject ()));
50
+ self ::assertTrue ($ reactAdapter ->isThenable (resolve (null )));
51
+ $ original = $ reactPromiseSetRejectionHandler (fn (\Throwable $ reason ) => null );
52
+ self ::assertTrue ($ reactAdapter ->isThenable (reject (new \Exception ())));
53
+ $ reactPromiseSetRejectionHandler ($ original );
28
54
self ::assertFalse ($ reactAdapter ->isThenable (static fn () => null ));
29
55
self ::assertFalse ($ reactAdapter ->isThenable (false ));
30
56
self ::assertFalse ($ reactAdapter ->isThenable (true ));
@@ -36,14 +62,14 @@ public function testIsThenableReturnsTrueWhenAReactPromiseIsGiven(): void
36
62
self ::assertFalse ($ reactAdapter ->isThenable (new \stdClass ()));
37
63
}
38
64
39
- public function testConvertsReactPromisesToGraphQlOnes (): void
65
+ public function testConvertsReactPromisesToGraphQLOnes (): void
40
66
{
41
67
$ reactAdapter = new ReactPromiseAdapter ();
42
68
$ reactPromise = resolve (1 );
43
69
44
70
$ promise = $ reactAdapter ->convertThenable ($ reactPromise );
45
71
46
- self ::assertInstanceOf (FulfilledPromise::class , $ promise ->adoptedPromise );
72
+ self ::assertInstanceOf ($ this -> classFulfilledPromise , $ promise ->adoptedPromise );
47
73
}
48
74
49
75
public function testThen (): void
@@ -61,7 +87,7 @@ static function ($value) use (&$result): void {
61
87
);
62
88
63
89
self ::assertSame (1 , $ result );
64
- self ::assertInstanceOf (FulfilledPromise::class , $ resultPromise ->adoptedPromise );
90
+ self ::assertInstanceOf ($ this -> classFulfilledPromise , $ resultPromise ->adoptedPromise );
65
91
}
66
92
67
93
public function testCreate (): void
@@ -86,7 +112,7 @@ public function testCreateFulfilled(): void
86
112
$ reactAdapter = new ReactPromiseAdapter ();
87
113
$ fulfilledPromise = $ reactAdapter ->createFulfilled (1 );
88
114
89
- self ::assertInstanceOf (FulfilledPromise::class , $ fulfilledPromise ->adoptedPromise );
115
+ self ::assertInstanceOf ($ this -> classFulfilledPromise , $ fulfilledPromise ->adoptedPromise );
90
116
91
117
$ result = null ;
92
118
$ fulfilledPromise ->then (static function ($ value ) use (&$ result ): void {
@@ -101,7 +127,7 @@ public function testCreateRejected(): void
101
127
$ reactAdapter = new ReactPromiseAdapter ();
102
128
$ rejectedPromise = $ reactAdapter ->createRejected (new \Exception ('I am a bad promise ' ));
103
129
104
- self ::assertInstanceOf (RejectedPromise::class , $ rejectedPromise ->adoptedPromise );
130
+ self ::assertInstanceOf ($ this -> classRejectedPromise , $ rejectedPromise ->adoptedPromise );
105
131
106
132
$ exception = null ;
107
133
$ rejectedPromise ->then (
@@ -122,7 +148,7 @@ public function testAll(): void
122
148
123
149
$ allPromise = $ reactAdapter ->all ($ promises );
124
150
125
- self ::assertInstanceOf (FulfilledPromise::class , $ allPromise ->adoptedPromise );
151
+ self ::assertInstanceOf ($ this -> classFulfilledPromise , $ allPromise ->adoptedPromise );
126
152
127
153
$ result = null ;
128
154
$ allPromise ->then (static function ($ values ) use (&$ result ): void {
0 commit comments