Skip to content

Commit 859256d

Browse files
committed
Add control tests for ReplaySubject
Control tests to ensure ReplaySubject's send(subscription:) behaviour matches that of PassthroughSubject
1 parent d6b6087 commit 859256d

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

Tests/EntwineTests/ReplaySubjectTests.swift

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)