diff --git a/RxSwift/Observables/Implementations/Timeout.swift b/RxSwift/Observables/Implementations/Timeout.swift index ebf70c49..db210ca3 100644 --- a/RxSwift/Observables/Implementations/Timeout.swift +++ b/RxSwift/Observables/Implementations/Timeout.swift @@ -89,9 +89,7 @@ class TimeoutSink: Sink : Producer { private let _source: Observable private let _dueTime: RxTimeInterval - private let _other: Observable? + private let _other: Observable private let _scheduler: SchedulerType - init(source: Observable, dueTime: RxTimeInterval, other: Observable?, scheduler: SchedulerType) { + init(source: Observable, dueTime: RxTimeInterval, other: Observable, scheduler: SchedulerType) { _source = source _dueTime = dueTime _other = other diff --git a/RxSwift/Observables/Observable+Time.swift b/RxSwift/Observables/Observable+Time.swift index dab8ef5e..30d6e504 100644 --- a/RxSwift/Observables/Observable+Time.swift +++ b/RxSwift/Observables/Observable+Time.swift @@ -354,13 +354,13 @@ extension ObservableType { @warn_unused_result(message="http://git.io/rxs.uo") public func timeout(dueTime: RxTimeInterval, scheduler: SchedulerType) -> Observable { - return Timeout(source: self.asObservable(), dueTime: dueTime, other: nil, scheduler: scheduler) + return Timeout(source: self.asObservable(), dueTime: dueTime, other: Observable.error(RxError.Timeout), scheduler: scheduler) } @available(*, deprecated=2.0.0, message="Please use version with named scheduler parameter.") public func timeout(dueTime: RxTimeInterval, _ scheduler: SchedulerType) -> Observable { - return Timeout(source: self.asObservable(), dueTime: dueTime, other: nil, scheduler: scheduler) + return Timeout(source: self.asObservable(), dueTime: dueTime, other: Observable.error(RxError.Timeout), scheduler: scheduler) } /** diff --git a/Tests/RxSwiftTests/Tests/Observable+TimeTest.swift b/Tests/RxSwiftTests/Tests/Observable+TimeTest.swift index a2ab447b..5c137f3b 100644 --- a/Tests/RxSwiftTests/Tests/Observable+TimeTest.swift +++ b/Tests/RxSwiftTests/Tests/Observable+TimeTest.swift @@ -1650,6 +1650,32 @@ extension ObservableTimeTest { Subscription(200, 270) ]) } + + func testTimeout_Duetime_Timeout() { + let scheduler = TestScheduler(initialClock: 0) + + let xs = scheduler.createColdObservable([ + next(10, 42), + next(20, 43), + next(50, 44), + next(60, 45), + completed(70) + ]) + + let res = scheduler.start { + xs.timeout(25, scheduler: scheduler) + } + + XCTAssertEqual(res.events, [ + next(210, 42), + next(220, 43), + error(245, RxError.Timeout) + ]) + + XCTAssertEqual(xs.subscriptions, [ + Subscription(200, 245) + ]) + } func testTimeout_Duetime_Disposed() { let scheduler = TestScheduler(initialClock: 0)