@@ -434,4 +434,71 @@ final class ReplaySubjectTests: XCTestCase {
434
434
subject. send ( i)
435
435
}
436
436
}
437
+
438
+ func testControlSubjectSendSubscriptionBehavior( ) {
439
+
440
+ let subscription = TestSubscription ( )
441
+ let subject = PassthroughSubject < Int , Never > ( )
442
+
443
+ let results1 = scheduler. createTestableSubscriber ( Int . self, Never . self)
444
+
445
+ scheduler. schedule ( after: 100 ) { subject. send ( subscription: subscription) }
446
+ scheduler. schedule ( after: 200 ) { subject. subscribe ( results1) }
447
+ scheduler. schedule ( after: 300 ) { XCTAssertEqual ( subscription. demand, . some( . unlimited) ) }
448
+ scheduler. schedule ( after: 400 ) { subject. send ( 1 ) }
449
+ scheduler. schedule ( after: 500 ) { subject. send ( 2 ) }
450
+ scheduler. schedule ( after: 600 ) { subject. send ( 3 ) }
451
+
452
+ scheduler. resume ( )
453
+
454
+ let expected1 : TestSequence < Int , Never > = [
455
+ ( 200 , . subscription) ,
456
+ ( 400 , . input( 1 ) ) ,
457
+ ( 500 , . input( 2 ) ) ,
458
+ ( 600 , . input( 3 ) ) ,
459
+ ]
460
+
461
+ XCTAssertFalse ( subscription. cancelled)
462
+ XCTAssertEqual ( expected1, results1. recordedOutput)
463
+ }
464
+
465
+ func testReplaySubjectSendSubscriptionBehavior( ) {
466
+
467
+ let subscription = TestSubscription ( )
468
+ let subject = ReplaySubject < Int , Never > ( maxBufferSize: 0 )
469
+
470
+ let results1 = scheduler. createTestableSubscriber ( Int . self, Never . self)
471
+
472
+ scheduler. schedule ( after: 100 ) { subject. send ( subscription: subscription) }
473
+ scheduler. schedule ( after: 200 ) { subject. subscribe ( results1) }
474
+ scheduler. schedule ( after: 300 ) { XCTAssertEqual ( subscription. demand, . some( . unlimited) ) }
475
+ scheduler. schedule ( after: 400 ) { subject. send ( 1 ) }
476
+ scheduler. schedule ( after: 500 ) { subject. send ( 2 ) }
477
+ scheduler. schedule ( after: 600 ) { subject. send ( 3 ) }
478
+
479
+ scheduler. resume ( )
480
+
481
+ let expected1 : TestSequence < Int , Never > = [
482
+ ( 200 , . subscription) ,
483
+ ( 400 , . input( 1 ) ) ,
484
+ ( 500 , . input( 2 ) ) ,
485
+ ( 600 , . input( 3 ) ) ,
486
+ ]
487
+
488
+ XCTAssertFalse ( subscription. cancelled)
489
+ XCTAssertEqual ( expected1, results1. recordedOutput)
490
+ }
491
+ }
492
+
493
+ fileprivate final class TestSubscription : Subscription {
494
+ func request( _ demand: Subscribers . Demand ) {
495
+ self . demand = demand
496
+ }
497
+
498
+ func cancel( ) {
499
+ cancelled = true
500
+ }
501
+
502
+ var cancelled = false
503
+ var demand : Subscribers . Demand ?
437
504
}
0 commit comments