From 1ea705f093d5bbb451bccae80daf1c534801027f Mon Sep 17 00:00:00 2001 From: Jordan Kay Date: Thu, 7 Apr 2022 10:03:23 -0400 Subject: [PATCH 1/4] Support Linux using CombineX --- Package.swift | 34 ++++++++++- Sources/Combine+Rx/Publisher+Rx.swift | 4 +- Sources/Combine+Rx/Subject+Rx.swift | 9 ++- Sources/Common/DemandBuffer.swift | 4 +- .../Rx+Combine/BehaviorRelay+Combine.swift | 6 +- .../Rx+Combine/BehaviorSubject+Combine.swift | 6 +- Sources/Rx+Combine/Observable+Combine.swift | 4 +- Sources/Rx+Combine/PublishRelay+Combine.swift | 6 +- .../Rx+Combine/PublishSubject+Combine.swift | 6 +- Sources/Rx+Combine/Relays+Combine.swift | 4 +- Sources/Rx+Combine/RxSubscription.swift | 11 +++- Tests/PublisherAsObservableTests.swift | 57 ++++++++++++++++++- 12 files changed, 129 insertions(+), 22 deletions(-) diff --git a/Package.swift b/Package.swift index dc7e3a1..cbc9d97 100644 --- a/Package.swift +++ b/Package.swift @@ -2,6 +2,7 @@ import PackageDescription +#if os(Linux) let package = Package( name: "RxCombine", platforms: [ @@ -13,12 +14,14 @@ let package = Package( targets: ["RxCombine"]), ], dependencies: [ - .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.0.0") + .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.0.0"), + .package(url: "https://github.com/cx-org/CombineX", from: "0.4.0") + ], targets: [ .target( name: "RxCombine", - dependencies: ["RxSwift", "RxRelay"], + dependencies: ["RxSwift", "RxRelay", "CombineX"], path: "Sources"), .testTarget( name: "RxCombineTests", @@ -27,3 +30,30 @@ let package = Package( ) ] ) +#else +let package = Package( + name: "RxCombine", + platforms: [ + .macOS(.v10_10), .iOS(.v9), .tvOS(.v9), .watchOS(.v3) + ], + products: [ + .library( + name: "RxCombine", + targets: ["RxCombine"]), + ], + dependencies: [ + .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.0.0") + ], + targets: [ + .target( + name: "RxCombine", + dependencies: ["RxSwift", "RxRelay"], + path: "Sources"), + .testTarget( + name: "RxCombineTests", + dependencies: ["RxCombine"], + path: "Tests" + ) + ] +) +#endif diff --git a/Sources/Combine+Rx/Publisher+Rx.swift b/Sources/Combine+Rx/Publisher+Rx.swift index 771e280..1ef3931 100644 --- a/Sources/Combine+Rx/Publisher+Rx.swift +++ b/Sources/Combine+Rx/Publisher+Rx.swift @@ -8,6 +8,9 @@ #if canImport(Combine) import Combine +#else +import CombineX +#endif import RxSwift @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) @@ -60,4 +63,3 @@ public extension Publisher where Failure == Never { } } } -#endif diff --git a/Sources/Combine+Rx/Subject+Rx.swift b/Sources/Combine+Rx/Subject+Rx.swift index 5d48d70..a8f23ca 100644 --- a/Sources/Combine+Rx/Subject+Rx.swift +++ b/Sources/Combine+Rx/Subject+Rx.swift @@ -8,6 +8,12 @@ #if canImport(Combine) import Combine +@available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) +public typealias Subject = Combine.Subject +#else +import CombineX +public typealias Subject = CombineX.Subject +#endif import RxSwift import RxRelay @@ -17,7 +23,7 @@ import RxRelay /// - note: This only works when the underlying Failure is Swift.Error, /// since RxSwift has no typed errors. @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -public protocol AnyObserverConvertible: Combine.Subject where Failure == Swift.Error { +public protocol AnyObserverConvertible: Subject where Failure == Swift.Error { associatedtype Output /// Returns a RxSwift `AnyObserver` wrapping the Subject @@ -64,4 +70,3 @@ public extension ObservableConvertibleType { asObservable().subscribe(subject.asAnyObserver()) } } -#endif diff --git a/Sources/Common/DemandBuffer.swift b/Sources/Common/DemandBuffer.swift index 0c8807a..efa2dda 100644 --- a/Sources/Common/DemandBuffer.swift +++ b/Sources/Common/DemandBuffer.swift @@ -8,6 +8,9 @@ #if canImport(Combine) import Combine +#else +import CombineX +#endif import class Foundation.NSRecursiveLock /// A buffer responsible for managing the demand of a downstream @@ -127,4 +130,3 @@ private extension DemandBuffer { var sent: Subscribers.Demand = .none } } -#endif diff --git a/Sources/Rx+Combine/BehaviorRelay+Combine.swift b/Sources/Rx+Combine/BehaviorRelay+Combine.swift index 85d31e4..54f16d7 100644 --- a/Sources/Rx+Combine/BehaviorRelay+Combine.swift +++ b/Sources/Rx+Combine/BehaviorRelay+Combine.swift @@ -7,6 +7,9 @@ #if canImport(Combine) import Combine +#else +import CombineX +#endif import RxSwift import RxRelay @@ -14,7 +17,7 @@ import RxRelay /// A bi-directional wrapper for a RxSwift Behavior Relay @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -public final class RxCurrentValueRelay: Combine.Subject { +public final class RxCurrentValueRelay: Subject { private let rxRelay: BehaviorRelay private let subject: CurrentValueSubject private let subscription: AnyCancellable? @@ -57,4 +60,3 @@ public extension BehaviorRelay { RxCurrentValueRelay(rxRelay: self) } } -#endif diff --git a/Sources/Rx+Combine/BehaviorSubject+Combine.swift b/Sources/Rx+Combine/BehaviorSubject+Combine.swift index 62eea2d..2c18bc7 100644 --- a/Sources/Rx+Combine/BehaviorSubject+Combine.swift +++ b/Sources/Rx+Combine/BehaviorSubject+Combine.swift @@ -8,13 +8,16 @@ #if canImport(Combine) import Combine +#else +import CombineX +#endif import RxSwift // MARK: - Behavior Subject as Combine Subject /// A bi-directional wrapper for a RxSwift Behavior Subject @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -public final class RxCurrentValueSubject: Combine.Subject { +public final class RxCurrentValueSubject: Subject { private let rxSubject: BehaviorSubject private let subject: CurrentValueSubject private let subscription: AnyCancellable? @@ -62,4 +65,3 @@ public extension BehaviorSubject { RxCurrentValueSubject(rxSubject: self) } } -#endif diff --git a/Sources/Rx+Combine/Observable+Combine.swift b/Sources/Rx+Combine/Observable+Combine.swift index 7c609c0..40a14e9 100644 --- a/Sources/Rx+Combine/Observable+Combine.swift +++ b/Sources/Rx+Combine/Observable+Combine.swift @@ -8,6 +8,9 @@ #if canImport(Combine) import Combine +#else +import CombineX +#endif import RxSwift @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) @@ -45,4 +48,3 @@ public class RxPublisher: Publisher { downstream: subscriber)) } } -#endif diff --git a/Sources/Rx+Combine/PublishRelay+Combine.swift b/Sources/Rx+Combine/PublishRelay+Combine.swift index 196043c..4454eb0 100644 --- a/Sources/Rx+Combine/PublishRelay+Combine.swift +++ b/Sources/Rx+Combine/PublishRelay+Combine.swift @@ -7,6 +7,9 @@ #if canImport(Combine) import Combine +#else +import CombineX +#endif import RxSwift import RxRelay @@ -14,7 +17,7 @@ import RxRelay /// A bi-directional wrapper for a RxSwift Publish Relay @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -public final class RxPassthroughRelay: Combine.Subject { +public final class RxPassthroughRelay: Subject { private let rxRelay: PublishRelay private let subject = PassthroughSubject() private let subscription: AnyCancellable? @@ -51,4 +54,3 @@ public extension PublishRelay { RxPassthroughRelay(rxRelay: self) } } -#endif diff --git a/Sources/Rx+Combine/PublishSubject+Combine.swift b/Sources/Rx+Combine/PublishSubject+Combine.swift index 41770cb..d39671d 100644 --- a/Sources/Rx+Combine/PublishSubject+Combine.swift +++ b/Sources/Rx+Combine/PublishSubject+Combine.swift @@ -8,13 +8,16 @@ #if canImport(Combine) import Combine +#else +import CombineX +#endif import RxSwift // MARK: - Behavior Subject as Combine Subject /// A bi-directional wrapper for a RxSwift Publish Subject @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -public final class RxPassthroughSubject: Combine.Subject { +public final class RxPassthroughSubject: Subject { private let rxSubject: PublishSubject private let subject = PassthroughSubject() private let subscription: AnyCancellable? @@ -56,4 +59,3 @@ public extension PublishSubject { RxPassthroughSubject(rxSubject: self) } } -#endif diff --git a/Sources/Rx+Combine/Relays+Combine.swift b/Sources/Rx+Combine/Relays+Combine.swift index 6a56598..213d3b4 100644 --- a/Sources/Rx+Combine/Relays+Combine.swift +++ b/Sources/Rx+Combine/Relays+Combine.swift @@ -8,6 +8,9 @@ #if canImport(Combine) import Combine +#else +import CombineX +#endif import RxSwift import RxRelay @@ -48,4 +51,3 @@ extension PublishRelay { publisher } } -#endif diff --git a/Sources/Rx+Combine/RxSubscription.swift b/Sources/Rx+Combine/RxSubscription.swift index 3d91787..7f354df 100644 --- a/Sources/Rx+Combine/RxSubscription.swift +++ b/Sources/Rx+Combine/RxSubscription.swift @@ -8,11 +8,17 @@ #if canImport(Combine) import Combine +@available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) +private typealias Subscription = Combine.Subscription +#else +import CombineX +private typealias Subscription = CombineX.Subscription +#endif import RxSwift // MARK: - Fallible @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -class RxSubscription: Combine.Subscription where Downstream.Input == Upstream.Element, Downstream.Failure == Swift.Error { +class RxSubscription: Subscription where Downstream.Input == Upstream.Element, Downstream.Failure == Swift.Error { private var disposable: Disposable? private let buffer: DemandBuffer @@ -52,7 +58,7 @@ extension RxSubscription: CustomStringConvertible { // MARK: - Infallible @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) -class RxInfallibleSubscription: Combine.Subscription where Downstream.Input == Upstream.Element, Downstream.Failure == Never { +class RxInfallibleSubscription: Subscription where Downstream.Input == Upstream.Element, Downstream.Failure == Never { private var disposable: Disposable? private let buffer: DemandBuffer @@ -89,4 +95,3 @@ extension RxInfallibleSubscription: CustomStringConvertible { return "RxInfallibleSubscription<\(Upstream.self)>" } } -#endif diff --git a/Tests/PublisherAsObservableTests.swift b/Tests/PublisherAsObservableTests.swift index 1b34ceb..f1e2470 100644 --- a/Tests/PublisherAsObservableTests.swift +++ b/Tests/PublisherAsObservableTests.swift @@ -9,7 +9,12 @@ import XCTest import RxCombine import RxSwift + +#if canImport(Combine) import Combine +#else +import CombineX +#endif @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) class PublisherAsObservableTests: XCTestCase { @@ -19,8 +24,9 @@ class PublisherAsObservableTests: XCTestCase { disposeBag = .init() } +#if canImport(Combine) func testIntPublisher() { - let source = (1...100).publisher + let source = (1...100).publisher var events = [RxSwift.Event]() source @@ -34,7 +40,7 @@ class PublisherAsObservableTests: XCTestCase { func testStringPublisher() { let input = "Hello world I'm a RxSwift Observable".components(separatedBy: " ") - let source = input.publisher + let source = input.publisher var events = [RxSwift.Event]() source @@ -46,7 +52,7 @@ class PublisherAsObservableTests: XCTestCase { } func testFailingPublisher() { - let source = (1...100).publisher + let source = (1...100).publisher var events = [RxSwift.Event]() source @@ -62,6 +68,51 @@ class PublisherAsObservableTests: XCTestCase { XCTAssertEqual(events, (1...14).map { .next($0) } + [.error(FakeError.ohNo)]) } +#else + func testIntPublisher() { + let source = (1...100).cx.publisher + var events = [RxSwift.Event]() + + source + .asObservable() + .subscribe { events.append($0) } + .disposed(by: disposeBag) + + XCTAssertEqual(events, + (1...100).map { .next($0) } + [.completed]) + } + + func testStringPublisher() { + let input = "Hello world I'm a RxSwift Observable".components(separatedBy: " ") + let source = input.cx.publisher + var events = [RxSwift.Event]() + + source + .asObservable() + .subscribe { events.append($0) } + .disposed(by: disposeBag) + + XCTAssertEqual(events, input.map { .next($0) } + [.completed]) + } + + func testFailingPublisher() { + let source = (1...100).cx.publisher + var events = [RxSwift.Event]() + + source + .setFailureType(to: FakeError.self) + .tryMap { val -> Int in + guard val < 15 else { throw FakeError.ohNo } + return val + } + .asObservable() + .subscribe { events.append($0) } + .disposed(by: disposeBag) + + + XCTAssertEqual(events, (1...14).map { .next($0) } + [.error(FakeError.ohNo)]) + } +#endif } From 152e687d793b42cec895d0ff74682c4b9ed2161e Mon Sep 17 00:00:00 2001 From: Jordan Kay Date: Thu, 7 Apr 2022 18:30:53 -0400 Subject: [PATCH 2/4] Update imports --- Sources/Combine+Rx/Publisher+Rx.swift | 4 +++- Sources/Combine+Rx/Subject+Rx.swift | 4 +++- Sources/Common/DemandBuffer.swift | 4 +++- Sources/Rx+Combine/BehaviorRelay+Combine.swift | 4 +++- Sources/Rx+Combine/BehaviorSubject+Combine.swift | 4 +++- Sources/Rx+Combine/Observable+Combine.swift | 4 +++- Sources/Rx+Combine/PublishRelay+Combine.swift | 4 +++- Sources/Rx+Combine/PublishSubject+Combine.swift | 4 +++- Sources/Rx+Combine/Relays+Combine.swift | 4 +++- Sources/Rx+Combine/RxSubscription.swift | 4 +++- Tests/ObservableAsPublisherTests.swift | 7 ++++++- Tests/PublisherAsObservableTests.swift | 6 +++--- Tests/RxRelaysToCombineTests.swift | 7 ++++++- Tests/RxSubjectsToCombineTests.swift | 7 ++++++- 14 files changed, 51 insertions(+), 16 deletions(-) diff --git a/Sources/Combine+Rx/Publisher+Rx.swift b/Sources/Combine+Rx/Publisher+Rx.swift index 1ef3931..2cff8a0 100644 --- a/Sources/Combine+Rx/Publisher+Rx.swift +++ b/Sources/Combine+Rx/Publisher+Rx.swift @@ -6,9 +6,10 @@ // Copyright © 2019 Combine Community. All rights reserved. // +#if canImport(Combine) || canImport(CombineX) #if canImport(Combine) import Combine -#else +#elseif canImport(CombineX) import CombineX #endif import RxSwift @@ -63,3 +64,4 @@ public extension Publisher where Failure == Never { } } } +#endif diff --git a/Sources/Combine+Rx/Subject+Rx.swift b/Sources/Combine+Rx/Subject+Rx.swift index a8f23ca..811a77f 100644 --- a/Sources/Combine+Rx/Subject+Rx.swift +++ b/Sources/Combine+Rx/Subject+Rx.swift @@ -6,11 +6,12 @@ // Copyright © 2019 Combine Community. All rights reserved. // +#if canImport(Combine) || canImport(CombineX) #if canImport(Combine) import Combine @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) public typealias Subject = Combine.Subject -#else +#elseif canImport(CombineX) import CombineX public typealias Subject = CombineX.Subject #endif @@ -70,3 +71,4 @@ public extension ObservableConvertibleType { asObservable().subscribe(subject.asAnyObserver()) } } +#endif diff --git a/Sources/Common/DemandBuffer.swift b/Sources/Common/DemandBuffer.swift index efa2dda..3b8c27e 100644 --- a/Sources/Common/DemandBuffer.swift +++ b/Sources/Common/DemandBuffer.swift @@ -6,9 +6,10 @@ // Copyright © 2020 Combine Community. All rights reserved. // +#if canImport(Combine) || canImport(CombineX) #if canImport(Combine) import Combine -#else +#elseif canImport(CombineX) import CombineX #endif import class Foundation.NSRecursiveLock @@ -130,3 +131,4 @@ private extension DemandBuffer { var sent: Subscribers.Demand = .none } } +#endif diff --git a/Sources/Rx+Combine/BehaviorRelay+Combine.swift b/Sources/Rx+Combine/BehaviorRelay+Combine.swift index 54f16d7..5b04105 100644 --- a/Sources/Rx+Combine/BehaviorRelay+Combine.swift +++ b/Sources/Rx+Combine/BehaviorRelay+Combine.swift @@ -5,9 +5,10 @@ // Created by Shai Mishali on 10/05/2020. // +#if canImport(Combine) || canImport(CombineX) #if canImport(Combine) import Combine -#else +#elseif canImport(CombineX) import CombineX #endif import RxSwift @@ -60,3 +61,4 @@ public extension BehaviorRelay { RxCurrentValueRelay(rxRelay: self) } } +#endif diff --git a/Sources/Rx+Combine/BehaviorSubject+Combine.swift b/Sources/Rx+Combine/BehaviorSubject+Combine.swift index 2c18bc7..644a3a9 100644 --- a/Sources/Rx+Combine/BehaviorSubject+Combine.swift +++ b/Sources/Rx+Combine/BehaviorSubject+Combine.swift @@ -6,9 +6,10 @@ // Copyright © 2019 Combine Community. All rights reserved. // +#if canImport(Combine) || canImport(CombineX) #if canImport(Combine) import Combine -#else +#elseif canImport(CombineX) import CombineX #endif import RxSwift @@ -65,3 +66,4 @@ public extension BehaviorSubject { RxCurrentValueSubject(rxSubject: self) } } +#endif diff --git a/Sources/Rx+Combine/Observable+Combine.swift b/Sources/Rx+Combine/Observable+Combine.swift index 40a14e9..3d9872f 100644 --- a/Sources/Rx+Combine/Observable+Combine.swift +++ b/Sources/Rx+Combine/Observable+Combine.swift @@ -6,9 +6,10 @@ // Copyright © 2019 Combine Community. All rights reserved. // +#if canImport(Combine) || canImport(CombineX) #if canImport(Combine) import Combine -#else +#elseif canImport(CombineX) import CombineX #endif import RxSwift @@ -48,3 +49,4 @@ public class RxPublisher: Publisher { downstream: subscriber)) } } +#endif diff --git a/Sources/Rx+Combine/PublishRelay+Combine.swift b/Sources/Rx+Combine/PublishRelay+Combine.swift index 4454eb0..15c96ac 100644 --- a/Sources/Rx+Combine/PublishRelay+Combine.swift +++ b/Sources/Rx+Combine/PublishRelay+Combine.swift @@ -5,9 +5,10 @@ // Created by Shai Mishali on 10/05/2020. // +#if canImport(Combine) || canImport(CombineX) #if canImport(Combine) import Combine -#else +#elseif canImport(CombineX) import CombineX #endif import RxSwift @@ -54,3 +55,4 @@ public extension PublishRelay { RxPassthroughRelay(rxRelay: self) } } +#endif diff --git a/Sources/Rx+Combine/PublishSubject+Combine.swift b/Sources/Rx+Combine/PublishSubject+Combine.swift index d39671d..c15d92f 100644 --- a/Sources/Rx+Combine/PublishSubject+Combine.swift +++ b/Sources/Rx+Combine/PublishSubject+Combine.swift @@ -6,9 +6,10 @@ // Copyright © 2019 Combine Community. All rights reserved. // +#if canImport(Combine) || canImport(CombineX) #if canImport(Combine) import Combine -#else +#elseif canImport(CombineX) import CombineX #endif import RxSwift @@ -59,3 +60,4 @@ public extension PublishSubject { RxPassthroughSubject(rxSubject: self) } } +#endif diff --git a/Sources/Rx+Combine/Relays+Combine.swift b/Sources/Rx+Combine/Relays+Combine.swift index 213d3b4..0cc4844 100644 --- a/Sources/Rx+Combine/Relays+Combine.swift +++ b/Sources/Rx+Combine/Relays+Combine.swift @@ -6,9 +6,10 @@ // Copyright © 2019 Combine Community. All rights reserved. // +#if canImport(Combine) || canImport(CombineX) #if canImport(Combine) import Combine -#else +#elseif canImport(CombineX) import CombineX #endif import RxSwift @@ -51,3 +52,4 @@ extension PublishRelay { publisher } } +#endif diff --git a/Sources/Rx+Combine/RxSubscription.swift b/Sources/Rx+Combine/RxSubscription.swift index 7f354df..34f83b4 100644 --- a/Sources/Rx+Combine/RxSubscription.swift +++ b/Sources/Rx+Combine/RxSubscription.swift @@ -6,11 +6,12 @@ // Copyright © 2020 Combine Community. All rights reserved. // +#if canImport(Combine) || canImport(CombineX) #if canImport(Combine) import Combine @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) private typealias Subscription = Combine.Subscription -#else +#elseif canImport(CombineX) import CombineX private typealias Subscription = CombineX.Subscription #endif @@ -95,3 +96,4 @@ extension RxInfallibleSubscription: CustomStringConvertible { return "RxInfallibleSubscription<\(Upstream.self)>" } } +#endif diff --git a/Tests/ObservableAsPublisherTests.swift b/Tests/ObservableAsPublisherTests.swift index 838ec7b..738e624 100644 --- a/Tests/ObservableAsPublisherTests.swift +++ b/Tests/ObservableAsPublisherTests.swift @@ -6,11 +6,16 @@ // Copyright © 2019 Combine Community. All rights reserved. // -#if !os(watchOS) +#if !os(watchOS) && (canImport(Combine) || canImport(CombineX)) import XCTest import RxCombine import RxSwift + +#if canImport(Combine) import Combine +#elseif canImport(CombineX) +import CombineX +#endif @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) class ObservableAsPublisherTests: XCTestCase { diff --git a/Tests/PublisherAsObservableTests.swift b/Tests/PublisherAsObservableTests.swift index f1e2470..d1ecf3a 100644 --- a/Tests/PublisherAsObservableTests.swift +++ b/Tests/PublisherAsObservableTests.swift @@ -5,14 +5,14 @@ // Created by Shai Mishali on 21/03/2020. // -#if !os(watchOS) +#if !os(watchOS) && (canImport(Combine) || canImport(CombineX)) import XCTest import RxCombine import RxSwift #if canImport(Combine) import Combine -#else +#elseif canImport(CombineX) import CombineX #endif @@ -68,7 +68,7 @@ class PublisherAsObservableTests: XCTestCase { XCTAssertEqual(events, (1...14).map { .next($0) } + [.error(FakeError.ohNo)]) } -#else +#elseif canImport(CombineX) func testIntPublisher() { let source = (1...100).cx.publisher var events = [RxSwift.Event]() diff --git a/Tests/RxRelaysToCombineTests.swift b/Tests/RxRelaysToCombineTests.swift index 23db3ce..834744a 100644 --- a/Tests/RxRelaysToCombineTests.swift +++ b/Tests/RxRelaysToCombineTests.swift @@ -5,12 +5,17 @@ // Created by Shai Mishali on 21/03/2020. // -#if !os(watchOS) +#if !os(watchOS) && (canImport(Combine) || canImport(CombineX)) import XCTest import RxCombine import RxSwift import RxRelay + +#if canImport(Combine) import Combine +#elseif canImport(CombineX) +import CombineX +#endif @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) class RxRelaysToCombineTests: XCTestCase { diff --git a/Tests/RxSubjectsToCombineTests.swift b/Tests/RxSubjectsToCombineTests.swift index 9158d76..fbaf8ab 100644 --- a/Tests/RxSubjectsToCombineTests.swift +++ b/Tests/RxSubjectsToCombineTests.swift @@ -6,11 +6,16 @@ // Copyright © 2019 Combine Community. All rights reserved. // -#if !os(watchOS) +#if !os(watchOS) && (canImport(Combine) || canImport(CombineX)) import XCTest import RxCombine import RxSwift + +#if canImport(Combine) import Combine +#elseif canImport(CombineX) +import CombineX +#endif @available(OSX 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *) class RxBehaviorSubjectToCombineTests: XCTestCase { From 88d51d2dfa8d145043922b6cff14088e84218b1b Mon Sep 17 00:00:00 2001 From: Jordan Kay Date: Thu, 7 Apr 2022 18:41:38 -0400 Subject: [PATCH 3/4] Simplify Package.swift --- Package.swift | 42 ++++++++++-------------------------------- 1 file changed, 10 insertions(+), 32 deletions(-) diff --git a/Package.swift b/Package.swift index cbc9d97..a5aa590 100644 --- a/Package.swift +++ b/Package.swift @@ -2,35 +2,16 @@ import PackageDescription +var dependencies: [Package.Dependency] = [ + .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.0.0") +] +var targetDependencies: [Target.Dependency] = ["RxSwift", "RxRelay"] + #if os(Linux) -let package = Package( - name: "RxCombine", - platforms: [ - .macOS(.v10_10), .iOS(.v9), .tvOS(.v9), .watchOS(.v3) - ], - products: [ - .library( - name: "RxCombine", - targets: ["RxCombine"]), - ], - dependencies: [ - .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.0.0"), - .package(url: "https://github.com/cx-org/CombineX", from: "0.4.0") +dependencies.append(.package(url: "https://github.com/cx-org/CombineX", from: "0.4.0")) +targetDependencies.append("CombineX") +#endif - ], - targets: [ - .target( - name: "RxCombine", - dependencies: ["RxSwift", "RxRelay", "CombineX"], - path: "Sources"), - .testTarget( - name: "RxCombineTests", - dependencies: ["RxCombine"], - path: "Tests" - ) - ] -) -#else let package = Package( name: "RxCombine", platforms: [ @@ -41,13 +22,11 @@ let package = Package( name: "RxCombine", targets: ["RxCombine"]), ], - dependencies: [ - .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.0.0") - ], + dependencies: dependencies, targets: [ .target( name: "RxCombine", - dependencies: ["RxSwift", "RxRelay"], + dependencies: targetDependencies, path: "Sources"), .testTarget( name: "RxCombineTests", @@ -56,4 +35,3 @@ let package = Package( ) ] ) -#endif From aeceaa78b56d8e0b25aa12fa2428fa2979d054b4 Mon Sep 17 00:00:00 2001 From: Jordan Kay Date: Thu, 7 Apr 2022 18:46:14 -0400 Subject: [PATCH 4/4] Fix formatting --- Package.swift | 45 +++++++------ Tests/PublisherAsObservableTests.swift | 92 +++++++++++++------------- 2 files changed, 69 insertions(+), 68 deletions(-) diff --git a/Package.swift b/Package.swift index a5aa590..787fe5f 100644 --- a/Package.swift +++ b/Package.swift @@ -3,7 +3,7 @@ import PackageDescription var dependencies: [Package.Dependency] = [ - .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.0.0") + .package(url: "https://github.com/ReactiveX/RxSwift.git", from: "6.0.0") ] var targetDependencies: [Target.Dependency] = ["RxSwift", "RxRelay"] @@ -13,25 +13,26 @@ targetDependencies.append("CombineX") #endif let package = Package( - name: "RxCombine", - platforms: [ - .macOS(.v10_10), .iOS(.v9), .tvOS(.v9), .watchOS(.v3) - ], - products: [ - .library( - name: "RxCombine", - targets: ["RxCombine"]), - ], - dependencies: dependencies, - targets: [ - .target( - name: "RxCombine", - dependencies: targetDependencies, - path: "Sources"), - .testTarget( - name: "RxCombineTests", - dependencies: ["RxCombine"], - path: "Tests" - ) - ] + name: "RxCombine", + platforms: [ + .macOS(.v10_10), .iOS(.v9), .tvOS(.v9), .watchOS(.v3) + ], + products: [ + .library( + name: "RxCombine", + targets: ["RxCombine"] + ), + ], + dependencies: dependencies, + targets: [ + .target( + name: "RxCombine", + dependencies: targetDependencies, + path: "Sources"), + .testTarget( + name: "RxCombineTests", + dependencies: ["RxCombine"], + path: "Tests" + ) + ] ) diff --git a/Tests/PublisherAsObservableTests.swift b/Tests/PublisherAsObservableTests.swift index d1ecf3a..f7888d0 100644 --- a/Tests/PublisherAsObservableTests.swift +++ b/Tests/PublisherAsObservableTests.swift @@ -26,7 +26,7 @@ class PublisherAsObservableTests: XCTestCase { #if canImport(Combine) func testIntPublisher() { - let source = (1...100).publisher + let source = (1...100).publisher var events = [RxSwift.Event]() source @@ -40,7 +40,7 @@ class PublisherAsObservableTests: XCTestCase { func testStringPublisher() { let input = "Hello world I'm a RxSwift Observable".components(separatedBy: " ") - let source = input.publisher + let source = input.publisher var events = [RxSwift.Event]() source @@ -52,7 +52,7 @@ class PublisherAsObservableTests: XCTestCase { } func testFailingPublisher() { - let source = (1...100).publisher + let source = (1...100).publisher var events = [RxSwift.Event]() source @@ -69,49 +69,49 @@ class PublisherAsObservableTests: XCTestCase { XCTAssertEqual(events, (1...14).map { .next($0) } + [.error(FakeError.ohNo)]) } #elseif canImport(CombineX) - func testIntPublisher() { - let source = (1...100).cx.publisher - var events = [RxSwift.Event]() - - source - .asObservable() - .subscribe { events.append($0) } - .disposed(by: disposeBag) - - XCTAssertEqual(events, - (1...100).map { .next($0) } + [.completed]) - } - - func testStringPublisher() { - let input = "Hello world I'm a RxSwift Observable".components(separatedBy: " ") - let source = input.cx.publisher - var events = [RxSwift.Event]() - - source - .asObservable() - .subscribe { events.append($0) } - .disposed(by: disposeBag) - - XCTAssertEqual(events, input.map { .next($0) } + [.completed]) - } - - func testFailingPublisher() { - let source = (1...100).cx.publisher - var events = [RxSwift.Event]() - - source - .setFailureType(to: FakeError.self) - .tryMap { val -> Int in - guard val < 15 else { throw FakeError.ohNo } - return val - } - .asObservable() - .subscribe { events.append($0) } - .disposed(by: disposeBag) - - - XCTAssertEqual(events, (1...14).map { .next($0) } + [.error(FakeError.ohNo)]) - } + func testIntPublisher() { + let source = (1...100).cx.publisher + var events = [RxSwift.Event]() + + source + .asObservable() + .subscribe { events.append($0) } + .disposed(by: disposeBag) + + XCTAssertEqual(events, + (1...100).map { .next($0) } + [.completed]) + } + + func testStringPublisher() { + let input = "Hello world I'm a RxSwift Observable".components(separatedBy: " ") + let source = input.cx.publisher + var events = [RxSwift.Event]() + + source + .asObservable() + .subscribe { events.append($0) } + .disposed(by: disposeBag) + + XCTAssertEqual(events, input.map { .next($0) } + [.completed]) + } + + func testFailingPublisher() { + let source = (1...100).cx.publisher + var events = [RxSwift.Event]() + + source + .setFailureType(to: FakeError.self) + .tryMap { val -> Int in + guard val < 15 else { throw FakeError.ohNo } + return val + } + .asObservable() + .subscribe { events.append($0) } + .disposed(by: disposeBag) + + + XCTAssertEqual(events, (1...14).map { .next($0) } + [.error(FakeError.ohNo)]) + } #endif }