Adds driveOnScheduler to enable using custom mock scheduler with Driver.

This commit is contained in:
Krunoslav Zaher 2015-12-29 16:59:55 +01:00
parent 5d677eaf91
commit 28d4e4d4bd
3 changed files with 48 additions and 1 deletions

View File

@ -147,7 +147,7 @@ extension DriverConvertibleType {
- returns: An observable sequence whose events are printed to standard output.
*/
@warn_unused_result(message="http://git.io/rxs.uo")
public func debug(identifier: String? = nil, file: String = __FILE__, line: Int = __LINE__, function: String = __FUNCTION__) -> Driver<E> {
public func debug(identifier: String? = nil, file: String = __FILE__, line: UInt = __LINE__, function: String = __FUNCTION__) -> Driver<E> {
let source = self.asObservable()
.debug(identifier, file: file, line: line, function: function)
return Driver(source)

View File

@ -166,5 +166,26 @@ public struct Drive {
}
/**
This method can be used in unit tests to ensure that driver is using mock schedulers instead of
maind schedulers.
To be able to use it, please import RxCocoa using testable attribute
@testable import RxCocoa
*/
func driveOnScheduler(scheduler: SchedulerType, action: () -> ()) {
let originalObserveOnScheduler = driverObserveOnScheduler
let originalSubscribeOnScheduler = driverSubscribeOnScheduler
driverObserveOnScheduler = scheduler
driverSubscribeOnScheduler = scheduler
action()
driverObserveOnScheduler = originalObserveOnScheduler
driverSubscribeOnScheduler = originalSubscribeOnScheduler
}
var driverObserveOnScheduler: SchedulerType = MainScheduler.instance
var driverSubscribeOnScheduler: SchedulerType = ConcurrentMainScheduler.instance

View File

@ -0,0 +1,26 @@
//
// Variable+Driver.swift
// Rx
//
// Created by Krunoslav Zaher on 12/28/15.
// Copyright © 2015 Krunoslav Zaher. All rights reserved.
//
import Foundation
#if !RX_NO_MODULE
import RxSwift
#endif
extension Variable {
/**
Converts `Variable` to `Driver` unit.
- returns: Driving observable sequence.
*/
@warn_unused_result(message="http://git.io/rxs.uo")
public func asDriver() -> Driver<E> {
let source = self
.observeOn(driverObserveOnScheduler)
return Driver(source)
}
}