Skip to content

Commit

Permalink
Use RxSwift 5 and RxExpect 2
Browse files Browse the repository at this point in the history
  • Loading branch information
devxoul committed Jun 15, 2019
1 parent 92bc1b2 commit d7cd75d
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 70 deletions.
8 changes: 4 additions & 4 deletions Package.resolved
Expand Up @@ -6,17 +6,17 @@
"repositoryURL": "https://github.com/devxoul/RxExpect.git", "repositoryURL": "https://github.com/devxoul/RxExpect.git",
"state": { "state": {
"branch": null, "branch": null,
"revision": "d27d2f730a41728e0f4ed7d8326e14296d3a2766", "revision": "c3a3bb3d46ee831582c6619ecc48cda1cdbff890",
"version": "1.1.0" "version": "2.0.0"
} }
}, },
{ {
"package": "RxSwift", "package": "RxSwift",
"repositoryURL": "https://github.com/ReactiveX/RxSwift.git", "repositoryURL": "https://github.com/ReactiveX/RxSwift.git",
"state": { "state": {
"branch": null, "branch": null,
"revision": "0df62b4d562f8620d4b795b18e4adf0b631527a1", "revision": "b3e888b4972d9bc76495dd74d30a8c7fad4b9395",
"version": "4.3.1" "version": "5.0.1"
} }
} }
] ]
Expand Down
4 changes: 2 additions & 2 deletions Package.swift
Expand Up @@ -11,8 +11,8 @@ let package = Package(
.library(name: "ReactorKit", targets: ["ReactorKit"]), .library(name: "ReactorKit", targets: ["ReactorKit"]),
], ],
dependencies: [ dependencies: [
.package(url: "https://github.com/ReactiveX/RxSwift.git", .upToNextMajor(from: "4.0.0")), .package(url: "https://github.com/ReactiveX/RxSwift.git", .upToNextMajor(from: "5.0.0")),
.package(url: "https://github.com/devxoul/RxExpect.git", .upToNextMajor(from: "1.0.0")) .package(url: "https://github.com/devxoul/RxExpect.git", .upToNextMajor(from: "2.0.0"))
], ],
targets: [ targets: [
.target(name: "ReactorKit", dependencies: ["ReactorKitRuntime", "RxSwift"]), .target(name: "ReactorKit", dependencies: ["ReactorKitRuntime", "RxSwift"]),
Expand Down
2 changes: 1 addition & 1 deletion ReactorKit.podspec
Expand Up @@ -10,7 +10,7 @@ Pod::Spec.new do |s|
s.source_files = "Sources/**/*.{swift,h,m}" s.source_files = "Sources/**/*.{swift,h,m}"
s.frameworks = "Foundation" s.frameworks = "Foundation"
s.swift_version = "5.0" s.swift_version = "5.0"
s.dependency "RxSwift", ">= 4.0.0" s.dependency "RxSwift", "~> 5.0"


s.ios.deployment_target = "8.0" s.ios.deployment_target = "8.0"
s.osx.deployment_target = "10.11" s.osx.deployment_target = "10.11"
Expand Down
3 changes: 1 addition & 2 deletions Sources/ReactorKit/ActionSubject.swift
Expand Up @@ -12,7 +12,6 @@ import RxSwift


/// A special subject for Reactor's Action. It only emits `.next` event. /// A special subject for Reactor's Action. It only emits `.next` event.
public final class ActionSubject<Element>: ObservableType, ObserverType, SubjectType { public final class ActionSubject<Element>: ObservableType, ObserverType, SubjectType {
public typealias E = Element
typealias Key = UInt typealias Key = UInt


var lock = NSRecursiveLock() var lock = NSRecursiveLock()
Expand All @@ -32,7 +31,7 @@ public final class ActionSubject<Element>: ObservableType, ObserverType, Subject
} }
#endif #endif


public func subscribe<O: ObserverType>(_ observer: O) -> Disposable where O.E == Element { public func subscribe<O: ObserverType>(_ observer: O) -> Disposable where O.Element == Element {
self.lock.lock() self.lock.lock()
let key = self.nextKey let key = self.nextKey
self.nextKey += 1 self.nextKey += 1
Expand Down
4 changes: 1 addition & 3 deletions Sources/ReactorKit/StateRelay.swift
Expand Up @@ -11,8 +11,6 @@ import RxSwift
/// ///
/// Unlike `BehaviorSubject` it can't terminate with error or completed. /// Unlike `BehaviorSubject` it can't terminate with error or completed.
public final class StateRelay<Element>: ObservableType { public final class StateRelay<Element>: ObservableType {
public typealias E = Element

private let _subject: BehaviorSubject<Element> private let _subject: BehaviorSubject<Element>


/// Accepts `event` and emits it to subscribers /// Accepts `event` and emits it to subscribers
Expand Down Expand Up @@ -41,7 +39,7 @@ public final class StateRelay<Element>: ObservableType {
} }


/// Subscribes observer /// Subscribes observer
public func subscribe<O: ObserverType>(_ observer: O) -> Disposable where O.E == E { public func subscribe<O: ObserverType>(_ observer: O) -> Disposable where O.Element == Element {
return _subject.subscribe(observer) return _subject.subscribe(observer)
} }


Expand Down
32 changes: 16 additions & 16 deletions Tests/ReactorKitTests/ActionSubjectTests.swift
Expand Up @@ -21,15 +21,15 @@ final class ActionSubjectTests: XCTestCase {
let test = RxExpect() let test = RxExpect()
let subject = ActionSubject<Int>() let subject = ActionSubject<Int>()
test.input(subject, [ test.input(subject, [
next(100, 1), .next(100, 1),
next(200, 2), .next(200, 2),
next(300, 3), .next(300, 3),
]) ])
test.assert(subject) { events in test.assert(subject) { events in
XCTAssertEqual(events, [ XCTAssertEqual(events, [
next(100, 1), .next(100, 1),
next(200, 2), .next(200, 2),
next(300, 3), .next(300, 3),
]) ])
} }
} }
Expand All @@ -38,14 +38,14 @@ final class ActionSubjectTests: XCTestCase {
let test = RxExpect() let test = RxExpect()
let subject = ActionSubject<Int>() let subject = ActionSubject<Int>()
test.input(subject, [ test.input(subject, [
next(100, 1), .next(100, 1),
error(200, TestError()), .error(200, TestError()),
next(300, 3), .next(300, 3),
]) ])
test.assert(subject) { events in test.assert(subject) { events in
XCTAssertEqual(events, [ XCTAssertEqual(events, [
next(100, 1), .next(100, 1),
next(300, 3), .next(300, 3),
]) ])
} }
} }
Expand All @@ -54,14 +54,14 @@ final class ActionSubjectTests: XCTestCase {
let test = RxExpect() let test = RxExpect()
let subject = ActionSubject<Int>() let subject = ActionSubject<Int>()
test.input(subject, [ test.input(subject, [
next(100, 1), .next(100, 1),
completed(200), .completed(200),
next(300, 3), .next(300, 3),
]) ])
test.assert(subject) { events in test.assert(subject) { events in
XCTAssertEqual(events, [ XCTAssertEqual(events, [
next(100, 1), .next(100, 1),
next(300, 3), .next(300, 3),
]) ])
} }
} }
Expand Down
84 changes: 42 additions & 42 deletions Tests/ReactorKitTests/ReactorTests.swift
Expand Up @@ -9,7 +9,7 @@ final class ReactorTests: XCTestCase {
let test = RxExpect() let test = RxExpect()
let reactor = test.retain(TestReactor()) let reactor = test.retain(TestReactor())
test.input(reactor.action, [ test.input(reactor.action, [
next(100, ["action"]), .next(100, ["action"]),
]) ])
test.assert(reactor.state) { events in test.assert(reactor.state) { events in
XCTAssertEqual(events.elements.count, 2) XCTAssertEqual(events.elements.count, 2)
Expand Down Expand Up @@ -47,26 +47,26 @@ final class ReactorTests: XCTestCase {
let test = RxExpect() let test = RxExpect()
let reactor = test.retain(CounterReactor()) let reactor = test.retain(CounterReactor())
let action1 = test.scheduler.createHotObservable([ let action1 = test.scheduler.createHotObservable([
next(100, Void()), .next(100, Void()),
next(200, Void()), .next(200, Void()),
error(300, TestError()), .error(300, TestError()),
next(400, Void()), .next(400, Void()),
]) ])
let action2 = test.scheduler.createHotObservable([ let action2 = test.scheduler.createHotObservable([
error(300, TestError()), .error(300, TestError()),
next(500, Void()), .next(500, Void()),
next(600, Void()), .next(600, Void()),
]) ])
action1.subscribe(reactor.action).disposed(by: test.disposeBag) action1.subscribe(reactor.action).disposed(by: test.disposeBag)
action2.subscribe(reactor.action).disposed(by: test.disposeBag) action2.subscribe(reactor.action).disposed(by: test.disposeBag)
test.assert(reactor.state) { events in test.assert(reactor.state) { events in
XCTAssertEqual(events, [ XCTAssertEqual(events, [
next(0, 0), .next(0, 0),
next(100, 1), .next(100, 1),
next(200, 2), .next(200, 2),
next(400, 3), .next(400, 3),
next(500, 4), .next(500, 4),
next(600, 5), .next(600, 5),
]) ])
} }
} }
Expand All @@ -76,11 +76,11 @@ final class ReactorTests: XCTestCase {
let reactor = test.retain(CounterReactor()) let reactor = test.retain(CounterReactor())
reactor.stateForTriggerError = 2 reactor.stateForTriggerError = 2
test.input(reactor.action, [ test.input(reactor.action, [
next(100, Void()), .next(100, Void()),
next(200, Void()), .next(200, Void()),
next(300, Void()), // error will be emit on this mutate .next(300, Void()), // error will be emit on this mutate
next(400, Void()), .next(400, Void()),
next(500, Void()), .next(500, Void()),
]) ])
test.assert(reactor.state) { events in test.assert(reactor.state) { events in
XCTAssertEqual(events.elements, [0, 1, 2, 3, 4, 5]) XCTAssertEqual(events.elements, [0, 1, 2, 3, 4, 5])
Expand All @@ -91,26 +91,26 @@ final class ReactorTests: XCTestCase {
let test = RxExpect() let test = RxExpect()
let reactor = test.retain(CounterReactor()) let reactor = test.retain(CounterReactor())
let action1 = test.scheduler.createHotObservable([ let action1 = test.scheduler.createHotObservable([
next(100, Void()), .next(100, Void()),
next(200, Void()), .next(200, Void()),
completed(300), .completed(300),
next(400, Void()), .next(400, Void()),
]) ])
let action2 = test.scheduler.createHotObservable([ let action2 = test.scheduler.createHotObservable([
completed(300), .completed(300),
next(500, Void()), .next(500, Void()),
next(600, Void()), .next(600, Void()),
]) ])
action1.subscribe(reactor.action).disposed(by: test.disposeBag) action1.subscribe(reactor.action).disposed(by: test.disposeBag)
action2.subscribe(reactor.action).disposed(by: test.disposeBag) action2.subscribe(reactor.action).disposed(by: test.disposeBag)
test.assert(reactor.state) { events in test.assert(reactor.state) { events in
XCTAssertEqual(events, [ XCTAssertEqual(events, [
next(0, 0), .next(0, 0),
next(100, 1), .next(100, 1),
next(200, 2), .next(200, 2),
next(400, 3), .next(400, 3),
next(500, 4), .next(500, 4),
next(600, 5), .next(600, 5),
]) ])
} }
} }
Expand All @@ -120,11 +120,11 @@ final class ReactorTests: XCTestCase {
let reactor = test.retain(CounterReactor()) let reactor = test.retain(CounterReactor())
reactor.stateForTriggerCompleted = 2 reactor.stateForTriggerCompleted = 2
test.input(reactor.action, [ test.input(reactor.action, [
next(100, Void()), .next(100, Void()),
next(200, Void()), .next(200, Void()),
next(300, Void()), // completed will be emit on this mutate .next(300, Void()), // completed will be emit on this mutate
next(400, Void()), .next(400, Void()),
next(500, Void()), .next(500, Void()),
]) ])
test.assert(reactor.state) { events in test.assert(reactor.state) { events in
XCTAssertEqual(events.elements, [0, 1, 2, 3, 4, 5]) XCTAssertEqual(events.elements, [0, 1, 2, 3, 4, 5])
Expand All @@ -135,10 +135,10 @@ final class ReactorTests: XCTestCase {
let test = RxExpect() let test = RxExpect()
let reactor = test.retain(StopwatchReactor(scheduler: test.scheduler)) let reactor = test.retain(StopwatchReactor(scheduler: test.scheduler))
test.input(reactor.action, [ test.input(reactor.action, [
next(1, .start), .next(1, .start),
next(5, .stop), .next(5, .stop),
next(6, .start), .next(6, .start),
next(9, .stop), .next(9, .stop),
]) ])
test.assert(reactor.state) { events in test.assert(reactor.state) { events in
XCTAssertEqual(events.elements, [ XCTAssertEqual(events.elements, [
Expand Down Expand Up @@ -295,7 +295,7 @@ private final class StopwatchReactor: Reactor {
switch action { switch action {
case .start: case .start:
let stopAction = self.action.filter { $0 == .stop } let stopAction = self.action.filter { $0 == .stop }
return Observable<Int>.interval(1, scheduler: self.scheduler) return Observable<Int>.interval(.seconds(1), scheduler: self.scheduler)
.map { _ in 1 } .map { _ in 1 }
.takeUntil(stopAction) .takeUntil(stopAction)


Expand Down

0 comments on commit d7cd75d

Please sign in to comment.