Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 5 additions & 3 deletions RxSwift/ObservableType+Extensions.swift
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,11 @@ public extension ObservableType {
guard let object else { return }
onNext?(object, $0)
},
onError: { [weak object] in
guard let object else { return }
onError?(object, $0)
onError: onError.map { onError in
{ [weak object] in
guard let object else { return }
onError(object, $0)
}
},
onCompleted: { [weak object] in
guard let object else { return }
Expand Down
8 changes: 5 additions & 3 deletions RxSwift/Traits/PrimitiveSequence/Completable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -95,9 +95,11 @@ public extension PrimitiveSequenceType where Trait == CompletableTrait, Element
onCompleted: { [weak object] in
guard let object else { return }
onCompleted?(object)
}, onError: { [weak object] in
guard let object else { return }
onError?(object, $0)
}, onError: onError.map { onError in
{ [weak object] in
guard let object else { return }
onError(object, $0)
}
}, onDisposed: { [weak object] in
guard let object else { return }
onDisposed?(object)
Expand Down
8 changes: 5 additions & 3 deletions RxSwift/Traits/PrimitiveSequence/Maybe.swift
Original file line number Diff line number Diff line change
Expand Up @@ -104,9 +104,11 @@ public extension PrimitiveSequenceType where Trait == MaybeTrait {
guard let object else { return }
onSuccess?(object, $0)
},
onError: { [weak object] in
guard let object else { return }
onError?(object, $0)
onError: onError.map { onError in
{ [weak object] in
guard let object else { return }
onError(object, $0)
}
},
onCompleted: { [weak object] in
guard let object else { return }
Expand Down
8 changes: 5 additions & 3 deletions RxSwift/Traits/PrimitiveSequence/Single.swift
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,11 @@ public extension PrimitiveSequenceType where Trait == SingleTrait {
guard let object else { return }
onSuccess?(object, $0)
},
onFailure: { [weak object] in
guard let object else { return }
onFailure?(object, $0)
onFailure: onFailure.map { onFailure in
{ [weak object] in
guard let object else { return }
onFailure(object, $0)
}
},
onDisposed: { [weak object] in
guard let object else { return }
Expand Down
4 changes: 4 additions & 0 deletions Sources/AllTestz/main.swift
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ final class CompletableTest_ : CompletableTest, RxTestCase {
("test_zip_array", CompletableTest.test_zip_array),
("test_zip_variadic", CompletableTest.test_zip_variadic),
("testDefaultErrorHandler", CompletableTest.testDefaultErrorHandler),
("testDefaultErrorHandlerWithObject", CompletableTest.testDefaultErrorHandlerWithObject),
] }
}

Expand Down Expand Up @@ -436,6 +437,7 @@ final class MaybeTest_ : MaybeTest, RxTestCase {
("test_zip_tuple", MaybeTest.test_zip_tuple),
("test_zip_resultSelector", MaybeTest.test_zip_resultSelector),
("testDefaultErrorHandler", MaybeTest.testDefaultErrorHandler),
("testDefaultErrorHandlerWithObject", MaybeTest.testDefaultErrorHandlerWithObject),
("testZip2_selector", MaybeTest.testZip2_selector),
("testZip2_tuple", MaybeTest.testZip2_tuple),
("testZip3_selector", MaybeTest.testZip3_selector),
Expand Down Expand Up @@ -1496,6 +1498,7 @@ final class ObservableSubscriptionTest_ : ObservableSubscriptionTest, RxTestCase

static var allTests: [(String, (ObservableSubscriptionTest_) -> () -> Void)] { return [
("testDefaultErrorHandler", ObservableSubscriptionTest.testDefaultErrorHandler),
("testDefaultErrorHandlerWithObject", ObservableSubscriptionTest.testDefaultErrorHandlerWithObject),
("testCustomCaptureSubscriptionCallstack", ObservableSubscriptionTest.testCustomCaptureSubscriptionCallstack),
] }
}
Expand Down Expand Up @@ -2175,6 +2178,7 @@ final class SingleTest_ : SingleTest, RxTestCase {
("testZipCollection_tuple", SingleTest.testZipCollection_tuple),
("testZipCollection_tuple_when_empty", SingleTest.testZipCollection_tuple_when_empty),
("testDefaultErrorHandler", SingleTest.testDefaultErrorHandler),
("testDefaultErrorHandlerWithObject", SingleTest.testDefaultErrorHandlerWithObject),
] }
}

Expand Down
22 changes: 22 additions & 0 deletions Tests/RxSwiftTests/CompletableTest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -601,6 +601,28 @@ extension CompletableTest {
_ = Completable.error(testError).subscribe()
XCTAssertEqual(loggedErrors, [testError])
}

func testDefaultErrorHandlerWithObject() {
var loggedErrors = [TestError]()
var handledErrors = [TestError]()
let originalErrorHandler = Hooks.defaultErrorHandler
defer { Hooks.defaultErrorHandler = originalErrorHandler }

Hooks.defaultErrorHandler = { _, error in
loggedErrors.append(error as! TestError)
}

_ = Completable.error(testError).subscribe(with: self, onError: { _, error in
handledErrors.append(error as! TestError)
})

XCTAssertEqual(handledErrors, [testError])
XCTAssertEqual(loggedErrors, [])

_ = Completable.error(testError).subscribe(with: self)

XCTAssertEqual(loggedErrors, [testError])
}
}

public func == (_: Never, _: Never) -> Bool {}
22 changes: 22 additions & 0 deletions Tests/RxSwiftTests/MaybeTest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -774,4 +774,26 @@ extension MaybeTest {
_ = Maybe<Int>.error(testError).subscribe()
XCTAssertEqual(loggedErrors, [testError])
}

func testDefaultErrorHandlerWithObject() {
var loggedErrors = [TestError]()
var handledErrors = [TestError]()
let originalErrorHandler = Hooks.defaultErrorHandler
defer { Hooks.defaultErrorHandler = originalErrorHandler }

Hooks.defaultErrorHandler = { _, error in
loggedErrors.append(error as! TestError)
}

_ = Maybe<Int>.error(testError).subscribe(with: self, onError: { _, error in
handledErrors.append(error as! TestError)
})

XCTAssertEqual(handledErrors, [testError])
XCTAssertEqual(loggedErrors, [])

_ = Maybe<Int>.error(testError).subscribe(with: self)

XCTAssertEqual(loggedErrors, [testError])
}
}
30 changes: 30 additions & 0 deletions Tests/RxSwiftTests/ObservableType+SubscriptionTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,38 @@ extension ObservableSubscriptionTest {
XCTAssertEqual(loggedErrors, [testError])
}

func testDefaultErrorHandlerWithObject() {
var loggedErrors = [TestError]()
var handledErrors = [TestError]()
let originalErrorHandler = Hooks.defaultErrorHandler
defer { Hooks.defaultErrorHandler = originalErrorHandler }

Hooks.defaultErrorHandler = { _, error in
loggedErrors.append(error as! TestError)
}

_ = Observable<Int>.error(testError).subscribe(with: self, onError: { _, error in
handledErrors.append(error as! TestError)
})

XCTAssertEqual(handledErrors, [testError])
XCTAssertEqual(loggedErrors, [])

_ = Observable<Int>.error(testError).subscribe(with: self)

XCTAssertEqual(loggedErrors, [testError])
}

func testCustomCaptureSubscriptionCallstack() {
var resultCallstack = [String]()
let originalErrorHandler = Hooks.defaultErrorHandler
let originalCaptureSubscriptionCallstack = Hooks.customCaptureSubscriptionCallstack
let originalRecordCallStackOnError = Hooks.recordCallStackOnError
defer {
Hooks.defaultErrorHandler = originalErrorHandler
Hooks.customCaptureSubscriptionCallstack = originalCaptureSubscriptionCallstack
Hooks.recordCallStackOnError = originalRecordCallStackOnError
}

Hooks.defaultErrorHandler = { callstack, _ in
resultCallstack = callstack
Expand Down
22 changes: 22 additions & 0 deletions Tests/RxSwiftTests/SingleTest.swift
Original file line number Diff line number Diff line change
Expand Up @@ -780,4 +780,26 @@ extension SingleTest {
_ = Single<Int>.error(testError).subscribe()
XCTAssertEqual(loggedErrors, [testError])
}

func testDefaultErrorHandlerWithObject() {
var loggedErrors = [TestError]()
var handledErrors = [TestError]()
let originalErrorHandler = Hooks.defaultErrorHandler
defer { Hooks.defaultErrorHandler = originalErrorHandler }

Hooks.defaultErrorHandler = { _, error in
loggedErrors.append(error as! TestError)
}

_ = Single<Int>.error(testError).subscribe(with: self, onFailure: { _, error in
handledErrors.append(error as! TestError)
})

XCTAssertEqual(handledErrors, [testError])
XCTAssertEqual(loggedErrors, [])

_ = Single<Int>.error(testError).subscribe(with: self)

XCTAssertEqual(loggedErrors, [testError])
}
}
Loading