Workaround for Swift bug when compiler optimizes away `driverObserveOnScheduler` and `driverSubscribeOnScheduler` even though there is testability turned on.

This commit is contained in:
Krunoslav Zaher 2015-12-29 17:59:07 +01:00
parent a66badfdb7
commit 77d452db34
5 changed files with 20 additions and 19 deletions

View File

@ -99,7 +99,7 @@ extension Driver {
*/
@warn_unused_result(message="http://git.io/rxs.uo")
public static func empty() -> Driver<E> {
return Driver(raw: Observable.empty().subscribeOn(driverSubscribeOnScheduler))
return Driver(raw: Observable.empty().subscribeOn(driverSubscribeOnScheduler()))
}
/**
@ -109,7 +109,7 @@ extension Driver {
*/
@warn_unused_result(message="http://git.io/rxs.uo")
public static func never() -> Driver<E> {
return Driver(raw: Observable.never().subscribeOn(driverSubscribeOnScheduler))
return Driver(raw: Observable.never().subscribeOn(driverSubscribeOnScheduler()))
}
/**
@ -120,7 +120,7 @@ extension Driver {
*/
@warn_unused_result(message="http://git.io/rxs.uo")
public static func just(element: E) -> Driver<E> {
return Driver(raw: Observable.just(element).subscribeOn(driverSubscribeOnScheduler))
return Driver(raw: Observable.just(element).subscribeOn(driverSubscribeOnScheduler()))
}
/**
@ -137,7 +137,7 @@ extension Driver {
@warn_unused_result(message="http://git.io/rxs.uo")
public static func of(elements: E ...) -> Driver<E> {
let source = elements.toObservable().subscribeOn(driverSubscribeOnScheduler)
let source = elements.toObservable().subscribeOn(driverSubscribeOnScheduler())
return Driver(raw: source)
}
@ -147,17 +147,17 @@ public struct Drive {
@available(*, deprecated=2.0.0, message="Please use `Driver.empty` (`r` at the end).")
public static func empty<E>() -> Driver<E> {
return Driver(raw: Observable.empty().subscribeOn(driverSubscribeOnScheduler))
return Driver(raw: Observable.empty().subscribeOn(driverSubscribeOnScheduler()))
}
@available(*, deprecated=2.0.0, message="Please use `Driver.never` (`r` at the end).")
public static func never<E>() -> Driver<E> {
return Driver(raw: Observable.never().subscribeOn(driverSubscribeOnScheduler))
return Driver(raw: Observable.never().subscribeOn(driverSubscribeOnScheduler()))
}
@available(*, deprecated=2.0.0, message="Please use `Driver.just` (`r` at the end).")
public static func just<E>(element: E) -> Driver<E> {
return Driver(raw: Observable.just(element).subscribeOn(driverSubscribeOnScheduler))
return Driver(raw: Observable.just(element).subscribeOn(driverSubscribeOnScheduler()))
}
@available(*, deprecated=2.0.0, message="Please use `Driver.deferred` (`r` at the end).")
@ -168,7 +168,7 @@ public struct Drive {
@available(*, deprecated=2.0.0, message="Please use `Driver.of` (`r` at the end).")
public static func sequenceOf<E>(elements: E ...) -> Driver<E> {
let source = elements.toObservable().subscribeOn(driverSubscribeOnScheduler)
let source = elements.toObservable().subscribeOn(driverSubscribeOnScheduler())
return Driver(raw: source)
}
@ -186,8 +186,8 @@ func driveOnScheduler(scheduler: SchedulerType, action: () -> ()) {
let originalObserveOnScheduler = driverObserveOnScheduler
let originalSubscribeOnScheduler = driverSubscribeOnScheduler
driverObserveOnScheduler = scheduler
driverSubscribeOnScheduler = scheduler
driverObserveOnScheduler = { scheduler }
driverSubscribeOnScheduler = { scheduler }
action()
@ -195,5 +195,6 @@ func driveOnScheduler(scheduler: SchedulerType, action: () -> ()) {
driverSubscribeOnScheduler = originalSubscribeOnScheduler
}
var driverObserveOnScheduler: SchedulerType = MainScheduler.instance
var driverSubscribeOnScheduler: SchedulerType = ConcurrentMainScheduler.instance
// using lambas disables optimizations that break @testable (another Swift bug)
var driverObserveOnScheduler: () -> SchedulerType = { MainScheduler.instance }
var driverSubscribeOnScheduler: () -> SchedulerType = { ConcurrentMainScheduler.instance }

View File

@ -22,7 +22,7 @@ extension ObservableConvertibleType {
public func asDriver(onErrorJustReturn onErrorJustReturn: E) -> Driver<E> {
let source = self
.asObservable()
.observeOn(driverObserveOnScheduler)
.observeOn(driverObserveOnScheduler())
.catchErrorJustReturn(onErrorJustReturn)
return Driver(source)
}
@ -37,7 +37,7 @@ extension ObservableConvertibleType {
public func asDriver(onErrorDriveWith onErrorDriveWith: Driver<E>) -> Driver<E> {
let source = self
.asObservable()
.observeOn(driverObserveOnScheduler)
.observeOn(driverObserveOnScheduler())
.catchError { _ in
onErrorDriveWith.asObservable()
}
@ -54,7 +54,7 @@ extension ObservableConvertibleType {
public func asDriver(onErrorRecover onErrorRecover: (error: ErrorType) -> Driver<E>) -> Driver<E> {
let source = self
.asObservable()
.observeOn(driverObserveOnScheduler)
.observeOn(driverObserveOnScheduler())
.catchError { error in
onErrorRecover(error: error).asObservable()
}

View File

@ -20,7 +20,7 @@ extension Variable {
@warn_unused_result(message="http://git.io/rxs.uo")
public func asDriver() -> Driver<E> {
let source = self
.observeOn(driverObserveOnScheduler)
.observeOn(driverObserveOnScheduler())
return Driver(source)
}
}

View File

@ -42,7 +42,7 @@ extension TestScheduler {
*/
func parseEventsAndTimes<T>(timeline: String, values: [String: T], errors: [String: ErrorType] = [:]) -> [[Recorded<Event<T>>]] {
print("parsing: \(timeline)")
//print("parsing: \(timeline)")
typealias RecordedEvent = Recorded<Event<T>>
let timelines = timeline.componentsSeparatedByString("|")
@ -82,7 +82,7 @@ extension TestScheduler {
return (state.time + tickIncrement, state.events + [nextEvent])
}
print("parsed: \(events)")
//print("parsed: \(events)")
return events
}
}

View File

@ -23,7 +23,7 @@
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
buildConfiguration = "Release-Tests"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">