File tree 2 files changed +55
-0
lines changed
2 files changed +55
-0
lines changed Original file line number Diff line number Diff line change 4
4
5
5
namespace Rx ;
6
6
7
+ use React \Promise \PromiseInterface ;
8
+ use Rx \React \Promise ;
9
+
7
10
final class ObservableFactoryWrapper
8
11
{
9
12
private $ selector ;
@@ -17,6 +20,10 @@ public function __invoke(): Observable
17
20
{
18
21
$ result = call_user_func_array ($ this ->selector , func_get_args ());
19
22
23
+ if ($ result instanceof PromiseInterface) {
24
+ $ result = Promise::toObservable ($ result );
25
+ }
26
+
20
27
if (!$ result instanceof ObservableInterface) {
21
28
$ reflectCallable = new \ReflectionFunction ($ this ->selector );
22
29
throw new \Exception ("You must return an Observable or Promise in {$ reflectCallable ->getFileName ()} on line {$ reflectCallable ->getStartLine ()}\n" );
Original file line number Diff line number Diff line change
1
+ <?php
2
+
3
+ declare (strict_types = 1 );
4
+
5
+ namespace Rx ;
6
+
7
+ use React \Promise \PromiseInterface ;
8
+ use function React \Promise \resolve ;
9
+
10
+ class ObservableFactoryWrapperTest extends TestCase
11
+ {
12
+ public function testPromiseIsConvertedToObservable ()
13
+ {
14
+ $ afw = new ObservableFactoryWrapper (static function (): PromiseInterface {
15
+ return resolve (true );
16
+ });
17
+ $ true = null ;
18
+ $ afw ()->subscribe (function ($ v ) use (&$ true ) {
19
+ $ true = $ v ;
20
+ });
21
+
22
+ self ::assertTrue ($ true );
23
+ }
24
+
25
+ public function testObservable ()
26
+ {
27
+ $ afw = new ObservableFactoryWrapper (static function (): Observable {
28
+ return Observable::fromArray ([true ], Scheduler::getImmediate ());
29
+ });
30
+ $ true = null ;
31
+ $ afw ()->subscribe (function ($ v ) use (&$ true ) {
32
+ $ true = $ v ;
33
+ });
34
+
35
+ self ::assertTrue ($ true );
36
+ }
37
+
38
+ public function testNotAnObservableOrPromise ()
39
+ {
40
+ self ::expectException (\Exception::class);
41
+ self ::expectExceptionMessageMatches ('/You must return an Observable or Promise in/ ' );
42
+
43
+ $ afw = new ObservableFactoryWrapper (static function (): bool {
44
+ return true ;
45
+ });
46
+ $ afw ();
47
+ }
48
+ }
You can’t perform that action at this time.
0 commit comments