@@ -434,4 +434,71 @@ final class ReplaySubjectTests: XCTestCase {
434434 subject. send ( i)
435435 }
436436 }
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 ?
437504}
0 commit comments