@@ -184,4 +184,96 @@ class PausableBufferedTests: XCTestCase {
184
184
Subscription ( 200 , 230 )
185
185
] )
186
186
}
187
+
188
+ func testPausedReentrantPauser( ) {
189
+ let underlying = scheduler. createHotObservable ( [
190
+ next ( 110 , 1 ) ,
191
+ next ( 210 , 2 ) ,
192
+ next ( 310 , 3 ) ,
193
+ next ( 410 , 4 ) ,
194
+ completed ( 500 ) ,
195
+ ] )
196
+
197
+ let pauser = scheduler. createHotObservable ( [
198
+ next ( 301 , true ) ,
199
+ ] )
200
+
201
+ let res = scheduler. start ( disposed: 1000 ) { ( ) -> Observable < Int > in
202
+ return Observable . create { observer in
203
+ let pauserSubject = PublishSubject < Bool > ( )
204
+ let allPausers = Observable . merge (
205
+ pauser. asObservable ( ) ,
206
+ pauserSubject. asObservable ( ) )
207
+
208
+ let buffered = underlying
209
+ . pausableBuffered ( allPausers, limit: nil )
210
+ . share ( )
211
+
212
+ let pauserEcho = buffered
213
+ . take ( 2 )
214
+ . map { _ in true }
215
+ . bind ( to: pauserSubject)
216
+
217
+ return Disposables . create ( pauserEcho, buffered. subscribe ( observer) )
218
+ }
219
+ }
220
+
221
+ XCTAssertEqual ( res. events, [
222
+ next ( 301 , 2 ) ,
223
+ next ( 310 , 3 ) ,
224
+ next ( 410 , 4 ) ,
225
+ completed ( 500 ) ,
226
+ ] )
227
+
228
+ XCTAssertEqual ( underlying. subscriptions, [
229
+ Subscription ( 200 , 500 ) ,
230
+ ] )
231
+ }
232
+
233
+ func testPausedReentrantUnderlying( ) {
234
+ let underlying = scheduler. createHotObservable ( [
235
+ next ( 210 , 1 ) ,
236
+ next ( 210 , 2 ) ,
237
+ next ( 210 , 3 ) ,
238
+ next ( 310 , 4 ) ,
239
+ completed ( 500 ) ,
240
+ ] )
241
+
242
+ let pauser = scheduler. createHotObservable ( [
243
+ next ( 301 , true ) ,
244
+ ] )
245
+
246
+ let res = scheduler. start ( disposed: 1000 ) { ( ) -> Observable < Int > in
247
+ return Observable . create { observer in
248
+ let underlyingSubject = PublishSubject < Int > ( )
249
+ let allUnderlying = Observable . merge (
250
+ underlying. asObservable ( ) ,
251
+ underlyingSubject. asObservable ( ) )
252
+
253
+ let buffered = allUnderlying
254
+ . pausableBuffered ( pauser, limit: nil )
255
+ . share ( )
256
+
257
+ let underlyingEcho = buffered
258
+ . take ( 2 )
259
+ . bind ( to: underlyingSubject)
260
+
261
+ return Disposables . create ( underlyingEcho, buffered. subscribe ( observer) )
262
+ }
263
+ }
264
+
265
+ XCTAssertEqual ( res. events, [
266
+ next ( 301 , 1 ) ,
267
+ next ( 301 , 2 ) ,
268
+ next ( 301 , 3 ) ,
269
+ next ( 301 , 1 ) ,
270
+ next ( 301 , 2 ) ,
271
+ next ( 310 , 4 ) ,
272
+ completed ( 500 ) ,
273
+ ] )
274
+
275
+ XCTAssertEqual ( underlying. subscriptions, [
276
+ Subscription ( 200 , 500 ) ,
277
+ ] )
278
+ }
187
279
}
0 commit comments