From b8ec4a3a38357772ad4088208d6a0af20503709f Mon Sep 17 00:00:00 2001 From: Daniel Tartaglia <danielt1263@gmail.com> Date: Sun, 13 Nov 2022 15:44:04 -0500 Subject: [PATCH] Update `testSuccessfulRetry` and code to make it pass. --- Sources/Operators/RetryWhen.swift | 5 ++--- Tests/RetryWhenTests.swift | 7 +++++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/Sources/Operators/RetryWhen.swift b/Sources/Operators/RetryWhen.swift index 5fae26f..fecad33 100644 --- a/Sources/Operators/RetryWhen.swift +++ b/Sources/Operators/RetryWhen.swift @@ -44,7 +44,7 @@ extension Publishers.RetryWhen { class Subscription<Downstream>: Combine.Subscription where Downstream: Subscriber, Downstream.Input == Upstream.Output, Downstream.Failure == Upstream.Failure { private let upstream: Upstream private let downstream: Downstream - private let errorSubject = PassthroughSubject<Upstream.Failure, Never>() + private let errorSubject = CurrentValueSubject<Upstream.Failure?, Never>(nil) private var sink: Sink<Upstream, Downstream>? private var cancellable: AnyCancellable? @@ -64,7 +64,7 @@ extension Publishers.RetryWhen { return nil } ) - self.cancellable = errorTrigger(errorSubject.eraseToAnyPublisher()) + self.cancellable = errorTrigger(errorSubject.compactMap { $0 }.eraseToAnyPublisher()) .sink( receiveCompletion: { [sink] completion in switch completion { @@ -81,7 +81,6 @@ extension Publishers.RetryWhen { upstream.subscribe(sink) } ) - upstream.subscribe(sink!) } func request(_ demand: Subscribers.Demand) { diff --git a/Tests/RetryWhenTests.swift b/Tests/RetryWhenTests.swift index 3f3fc65..23ff40d 100644 --- a/Tests/RetryWhenTests.swift +++ b/Tests/RetryWhenTests.swift @@ -42,7 +42,7 @@ class RetryWhenTests: XCTestCase { func testSuccessfulRetry() { var times = 0 - + var retriesCount = 0 var expectedOutput: Int? var completion: Subscribers.Completion<RetryWhenTests.MyError>? @@ -57,7 +57,9 @@ class RetryWhenTests: XCTestCase { } }) .retryWhen { error in - error.map { _ in } + error + .handleEvents(receiveOutput: { _ in retriesCount += 1}) + .map { _ in } } .sink( receiveCompletion: { completion = $0 }, @@ -70,6 +72,7 @@ class RetryWhenTests: XCTestCase { ) XCTAssertEqual(completion, .finished) XCTAssertEqual(times, 2) + XCTAssertEqual(retriesCount, 1) } func testRetryFailure() {