@@ -13,7 +13,7 @@ class SchedulerTest extends TestCase
13
13
private function resetStaticScheduler ()
14
14
{
15
15
$ ref = new \ReflectionClass (Scheduler::class);
16
- foreach (['default ' , 'async ' , 'immediate ' ] as $ propertyName ) {
16
+ foreach (['default ' , 'async ' , 'immediate ' , ' defaultFactory ' , ' asyncFactory ' ] as $ propertyName ) {
17
17
$ prop = $ ref ->getProperty ($ propertyName );
18
18
$ prop ->setAccessible (true );
19
19
$ prop ->setValue (null );
@@ -28,7 +28,7 @@ public function setup()
28
28
29
29
/**
30
30
* @expectedException \Exception
31
- * @expectedExceptionMessage Please set a default scheduler (for react: Scheduler::setDefault(new EventLoopScheduler($loop));
31
+ * @expectedExceptionMessage Please set a default scheduler factory
32
32
*/
33
33
public function testGetDefaultThrowsIfNotSet ()
34
34
{
@@ -41,88 +41,152 @@ public function testSetDefault()
41
41
{
42
42
$ scheduler = new TestScheduler ();
43
43
44
- Scheduler::setDefault ($ scheduler );
44
+ Scheduler::setDefaultFactory (function () use ($ scheduler ) {
45
+ return $ scheduler ;
46
+ });
45
47
46
48
$ this ->assertSame ($ scheduler , Scheduler::getDefault ());
47
49
}
48
50
51
+ public function testSetDefaultTwiceBeforeGet ()
52
+ {
53
+ $ scheduler = new TestScheduler ();
54
+
55
+ Scheduler::setDefaultFactory (function () use ($ scheduler ) {
56
+ return $ scheduler ;
57
+ });
58
+
59
+ $ scheduler2 = new TestScheduler ();
60
+
61
+ Scheduler::setDefaultFactory (function () use ($ scheduler2 ) {
62
+ return $ scheduler2 ;
63
+ });
64
+
65
+ $ this ->assertSame ($ scheduler2 , Scheduler::getDefault ());
66
+ }
67
+
49
68
public function testSetAsync ()
50
69
{
51
70
$ scheduler = new TestScheduler ();
52
71
53
- Scheduler::setAsync ($ scheduler );
72
+ Scheduler::setAsyncFactory (function () use ($ scheduler ) {
73
+ return $ scheduler ;
74
+ });
54
75
55
76
$ this ->assertSame ($ scheduler , Scheduler::getAsync ());
56
77
}
57
78
58
- public function testSetImmediate ()
79
+ public function testSetAsyncTwiceBeforeGet ()
59
80
{
60
- $ scheduler = new ImmediateScheduler ();
81
+ $ scheduler = new TestScheduler ();
82
+
83
+ Scheduler::setAsyncFactory (function () use ($ scheduler ) {
84
+ return $ scheduler ;
85
+ });
61
86
62
- Scheduler:: setImmediate ( $ scheduler );
87
+ $ scheduler2 = new TestScheduler ( );
63
88
64
- $ this ->assertSame ($ scheduler , Scheduler::getImmediate ());
89
+ Scheduler::setAsyncFactory (function () use ($ scheduler2 ) {
90
+ return $ scheduler2 ;
91
+ });
92
+
93
+ $ this ->assertSame ($ scheduler2 , Scheduler::getAsync ());
65
94
}
66
95
67
96
/**
68
97
* @expectedException \Exception
69
98
*/
70
- public function testSetDefaultAfterDefaultStartThrowsException ()
99
+ public function testSetDefaultTwiceThrowsException ()
71
100
{
72
101
$ scheduler = new TestScheduler ();
73
102
74
- Scheduler::setDefault ($ scheduler );
103
+ Scheduler::setDefaultFactory (function () use ($ scheduler ) {
104
+ return $ scheduler ;
105
+ });
75
106
76
- $ scheduler -> start ();
107
+ Scheduler:: getDefault ();
77
108
78
- $ scheduler2 = new TestScheduler ();
79
-
80
- Scheduler:: setDefault ( $ scheduler2 );
109
+ Scheduler:: setDefaultFactory ( function () use ( $ scheduler ) {
110
+ return $ scheduler ;
111
+ } );
81
112
}
82
113
114
+
83
115
/**
84
116
* @expectedException \Exception
85
117
*/
86
118
public function testSetAsyncTwiceThrowsException ()
87
119
{
88
120
$ scheduler = new TestScheduler ();
89
121
90
- Scheduler::setAsync ($ scheduler );
122
+ Scheduler::setAsyncFactory (function () use ($ scheduler ) {
123
+ return $ scheduler ;
124
+ });
91
125
92
- $ scheduler2 = new TestScheduler ();
126
+ Scheduler:: getAsync ();
93
127
94
- Scheduler::setAsync ($ scheduler2 );
128
+ Scheduler::setAsyncFactory (function () use ($ scheduler ) {
129
+ return $ scheduler ;
130
+ });
95
131
}
96
132
97
133
/**
98
134
* @expectedException \Exception
135
+ * @expectedExceptionMessage Please set a default scheduler factory
99
136
*/
100
- public function testSetImmediateTwiceThrowsException ()
137
+ public function testGetAsyncBeforeSet ()
101
138
{
102
- $ scheduler = new ImmediateScheduler ();
139
+ Scheduler::getAsync ();
140
+ }
103
141
104
- Scheduler::setImmediate ($ scheduler );
142
+ public function testGetAsyncAfterSettingDefaultToAsync ()
143
+ {
144
+ $ asyncScheduler = new EventLoopScheduler (function () {
145
+ });
105
146
106
- $ scheduler2 = new ImmediateScheduler ();
147
+ Scheduler::setDefaultFactory (function () use ($ asyncScheduler ) {
148
+ return $ asyncScheduler ;
149
+ });
107
150
108
- Scheduler::setImmediate ( $ scheduler2 );
151
+ $ this -> assertSame ( $ asyncScheduler , Scheduler::getAsync () );
109
152
}
110
153
111
154
/**
112
- * @expectedException \Exception
113
- * @expectedExceptionMessage Please set an async scheduler (for react: Scheduler::setAsync(new EventLoopScheduler($loop));
155
+ * @expectedException \Throwable
156
+ * @expectedExceptionMessage Return value of Rx\Scheduler::getAsync() must implement interface Rx\AsyncSchedulerInterface, instance of Rx\ Scheduler\ImmediateScheduler returned
114
157
*/
115
- public function testGetAsyncBeforeSet ()
158
+ public function testAsyncSchedulerFactorReturnsNonAsyncScheduler ()
116
159
{
160
+ Scheduler::setAsyncFactory (function () {
161
+ return new ImmediateScheduler ();
162
+ });
163
+
117
164
Scheduler::getAsync ();
118
165
}
119
166
120
- public function testGetAsyncAfterSettingDefaultToAsync ()
167
+ /**
168
+ * @expectedException \Throwable
169
+ * @expectedExceptionMessage Return value of Rx\Scheduler::getDefault() must implement interface Rx\SchedulerInterface, instance of stdClass returned
170
+ */
171
+ public function testDefaultSchedulerFactorReturnsNonScheduler ()
121
172
{
122
- $ asyncScheduler = new EventLoopScheduler (function () {});
173
+ Scheduler::setDefaultFactory (function () {
174
+ return new \stdClass ();
175
+ });
123
176
124
- Scheduler::setDefault ($ asyncScheduler );
177
+ Scheduler::getDefault ();
178
+ }
125
179
126
- $ this ->assertSame ($ asyncScheduler , Scheduler::getAsync ());
180
+ /**
181
+ * @expectedException \Throwable
182
+ * @expectedExceptionMessage Please set an async scheduler factory
183
+ */
184
+ public function testAsyncSchedulerFactorThrowsNonAsyncDefaultScheduler ()
185
+ {
186
+ Scheduler::setDefaultFactory (function () {
187
+ return new ImmediateScheduler ();
188
+ });
189
+
190
+ Scheduler::getAsync ();
127
191
}
128
192
}
0 commit comments