Skip to content

Commit 73c9e4a

Browse files
committed
[fix]: update RxSwift bindings to observe on main thread
1 parent 8b7c069 commit 73c9e4a

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

WorkflowRxSwift/Sources/ObservableWorkflow.swift

+2-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import class Workflow.Lifetime
2020

2121
extension Observable: AnyWorkflowConvertible {
2222
public func asAnyWorkflow() -> AnyWorkflow<Void, Element> {
23-
return ObservableWorkflow(observable: self).asAnyWorkflow()
23+
ObservableWorkflow(observable: self).asAnyWorkflow()
2424
}
2525
}
2626

@@ -41,6 +41,7 @@ struct ObservableWorkflow<Value>: Workflow {
4141
let disposable = observable
4242
.map { AnyWorkflowAction(sendingOutput: $0) }
4343
.subscribe(on: MainScheduler.asyncInstance)
44+
.observe(on: MainScheduler.asyncInstance)
4445
.subscribe(onNext: { value in
4546
sink.send(value)
4647
})

WorkflowRxSwift/Tests/Rx+ReactiveWorkers.swift

+48
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,54 @@ class Rx_ReactiveWorkersTests: XCTestCase {
3838

3939
disposable?.dispose()
4040
}
41+
42+
func test_observes_on_main_queue() {
43+
struct TestWorkflow: Workflow {
44+
enum Action: WorkflowAction {
45+
typealias WorkflowType = TestWorkflow
46+
case complete
47+
48+
func apply(toState state: inout State) -> Output? {
49+
switch self {
50+
case .complete:
51+
return .finished
52+
}
53+
}
54+
}
55+
56+
enum Output {
57+
case finished
58+
}
59+
60+
func render(state: Void, context: RenderContext<Self>) {
61+
Single<Void>.create { observer in
62+
DispatchQueue.global().async {
63+
observer(.success(()))
64+
}
65+
return Disposables.create()
66+
}
67+
.asObservable()
68+
.running(in: context) { _ in
69+
XCTAssert(Thread.isMainThread)
70+
return Action.complete
71+
}
72+
}
73+
}
74+
75+
let host = WorkflowHost(
76+
workflow: TestWorkflow()
77+
)
78+
79+
let expectation = XCTestExpectation()
80+
let disposable = host.output.signal.observeValues { output in
81+
if output == .finished {
82+
expectation.fulfill()
83+
}
84+
}
85+
86+
wait(for: [expectation], timeout: 1.0)
87+
disposable?.dispose()
88+
}
4189
}
4290

4391
struct CombinedWorkflow: Workflow {

0 commit comments

Comments
 (0)