diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md
index e73925c..d399eaa 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.md
+++ b/.github/ISSUE_TEMPLATE/bug_report.md
@@ -20,7 +20,7 @@ A clear and concise description of what you expected to happen.
## System
- OS: [e.g. macOS 11, iOS 14]
- - Conbini: [e.g. 0.7.0]
+ - Conbini: [e.g. 0.6.1]
You can check this in your SPM `Package.swift` file (or `Package.resolved` file). Alternatively, go to Xcode's Source Control Navigator (`⌘+2`) and click on `Conbini`.
## Additional context
diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md
index 5d84142..9719643 100644
--- a/.github/ISSUE_TEMPLATE/question.md
+++ b/.github/ISSUE_TEMPLATE/question.md
@@ -16,5 +16,5 @@ Add any other context about the question here.
## System
Delete section if not applicable
- OS: [e.g. macOS 11, iOS 14]
- - Conbini: [e.g. 0.7.0]
+ - Conbini: [e.g. 0.6.1]
You can check this in your SPM `Package.swift` file (or `Package.resolved` file). Alternatively, go to Xcode's Source Control Navigator (`⌘+2`) and click on `Conbini`.
diff --git a/Package.swift b/Package.swift
index af9a047..ab87817 100644
--- a/Package.swift
+++ b/Package.swift
@@ -1,17 +1,20 @@
// swift-tools-version:5.1
import PackageDescription
-let package = Package(
+var package = Package(
name: "Conbini",
platforms: [
.macOS(.v10_15), .iOS(.v13), .tvOS(.v13), .watchOS(.v6)
],
products: [
.library(name: "Conbini", targets: ["Conbini"]),
+ .library(name: "ConbiniForTesting", targets: ["ConbiniForTesting"])
],
dependencies: [],
targets: [
- .target(name: "Conbini", dependencies: [], path: "sources"),
- .testTarget(name: "ConbiniTests", dependencies: ["Conbini"], path: "tests"),
+ .target(name: "Conbini", path: "sources/runtime"),
+ .target(name: "ConbiniForTesting", path: "sources/testing"),
+ .testTarget(name: "ConbiniTests", dependencies: ["Conbini"], path: "tests/runtime"),
+ .testTarget(name: "ConbiniForTestingTests", dependencies: ["Conbini", "ConbiniForTesting"], path: "tests/testing"),
]
)
diff --git a/README.md b/README.md
index acc124c..4f5eb92 100644
--- a/README.md
+++ b/README.md
@@ -24,7 +24,7 @@ import PackageDescription
let package = Package(
/* Your package name, supported platforms, and generated products go here */
dependencies: [
- .package(url: "https://github.com/dehesa/Conbini.git", from: "0.7.0")
+ .package(url: "https://github.com/dehesa/Conbini.git", from: "0.6.1")
],
targets: [
.target(name: /* Your target name here */, dependencies: ["Conbini"])
@@ -32,6 +32,14 @@ let package = Package(
)
```
+If you want to use Conbini's [testing](#testing) extension, you need to define the `CONBINI_FOR_TESTING` flag on your SPM targets or testing targets. Conbini testing extensions require `XCTest`, which is not available in runtime on some platforms (such as watchOS), or you may not want to link to such dynamic library (e.g. when building command-line tools).
+
+```swift
+targets: [
+ .testTarget(name: /* Your target name here */, dependencies: ["Conbini"], swiftSettings: [.define("CONBINI_FOR_TESTING")])
+]
+```
+
Import Conbini
in the file that needs it.
@@ -40,6 +48,11 @@ let package = Package(
import Conbini
```
+The testing conveniences depend on [XCTest](https://developer.apple.com/documentation/xctest), which is not available on regular execution. That is why Conbini is offered in two flavors:
+
+- `import Conbini` includes all code excepts the testing conveniences.
+- `import ConbiniForTesting` includes the testing functionality only.
+
diff --git a/sources/operators/Assign.swift b/sources/runtime/operators/Assign.swift
similarity index 100%
rename from sources/operators/Assign.swift
rename to sources/runtime/operators/Assign.swift
diff --git a/sources/operators/HandleEndOp.swift b/sources/runtime/operators/HandleEndOp.swift
similarity index 100%
rename from sources/operators/HandleEndOp.swift
rename to sources/runtime/operators/HandleEndOp.swift
diff --git a/sources/operators/ResultOp.swift b/sources/runtime/operators/ResultOp.swift
similarity index 100%
rename from sources/operators/ResultOp.swift
rename to sources/runtime/operators/ResultOp.swift
diff --git a/sources/operators/RetryOp.swift b/sources/runtime/operators/RetryOp.swift
similarity index 100%
rename from sources/operators/RetryOp.swift
rename to sources/runtime/operators/RetryOp.swift
diff --git a/sources/operators/SinkOp.swift b/sources/runtime/operators/SinkOp.swift
similarity index 100%
rename from sources/operators/SinkOp.swift
rename to sources/runtime/operators/SinkOp.swift
diff --git a/sources/operators/ThenOp.swift b/sources/runtime/operators/ThenOp.swift
similarity index 100%
rename from sources/operators/ThenOp.swift
rename to sources/runtime/operators/ThenOp.swift
diff --git a/sources/publishers/DeferredComplete.swift b/sources/runtime/publishers/DeferredComplete.swift
similarity index 100%
rename from sources/publishers/DeferredComplete.swift
rename to sources/runtime/publishers/DeferredComplete.swift
diff --git a/sources/publishers/DeferredFuture.swift b/sources/runtime/publishers/DeferredFuture.swift
similarity index 100%
rename from sources/publishers/DeferredFuture.swift
rename to sources/runtime/publishers/DeferredFuture.swift
diff --git a/sources/publishers/DeferredPassthrough.swift b/sources/runtime/publishers/DeferredPassthrough.swift
similarity index 100%
rename from sources/publishers/DeferredPassthrough.swift
rename to sources/runtime/publishers/DeferredPassthrough.swift
diff --git a/sources/publishers/DeferredResult.swift b/sources/runtime/publishers/DeferredResult.swift
similarity index 100%
rename from sources/publishers/DeferredResult.swift
rename to sources/runtime/publishers/DeferredResult.swift
diff --git a/sources/publishers/DeferredTryComplete.swift b/sources/runtime/publishers/DeferredTryComplete.swift
similarity index 100%
rename from sources/publishers/DeferredTryComplete.swift
rename to sources/runtime/publishers/DeferredTryComplete.swift
diff --git a/sources/publishers/DeferredTryValue.swift b/sources/runtime/publishers/DeferredTryValue.swift
similarity index 100%
rename from sources/publishers/DeferredTryValue.swift
rename to sources/runtime/publishers/DeferredTryValue.swift
diff --git a/sources/publishers/DeferredValue.swift b/sources/runtime/publishers/DeferredValue.swift
similarity index 100%
rename from sources/publishers/DeferredValue.swift
rename to sources/runtime/publishers/DeferredValue.swift
diff --git a/sources/publishers/HandleEnd.swift b/sources/runtime/publishers/HandleEnd.swift
similarity index 100%
rename from sources/publishers/HandleEnd.swift
rename to sources/runtime/publishers/HandleEnd.swift
diff --git a/sources/publishers/Retry.swift b/sources/runtime/publishers/Retry.swift
similarity index 100%
rename from sources/publishers/Retry.swift
rename to sources/runtime/publishers/Retry.swift
diff --git a/sources/publishers/Then.swift b/sources/runtime/publishers/Then.swift
similarity index 100%
rename from sources/publishers/Then.swift
rename to sources/runtime/publishers/Then.swift
diff --git a/sources/subscribers/FixedSink.swift b/sources/runtime/subscribers/FixedSink.swift
similarity index 100%
rename from sources/subscribers/FixedSink.swift
rename to sources/runtime/subscribers/FixedSink.swift
diff --git a/sources/subscribers/GraduatedSink.swift b/sources/runtime/subscribers/GraduatedSink.swift
similarity index 100%
rename from sources/subscribers/GraduatedSink.swift
rename to sources/runtime/subscribers/GraduatedSink.swift
diff --git a/sources/utils/Buffer.swift b/sources/runtime/utils/Buffer.swift
similarity index 100%
rename from sources/utils/Buffer.swift
rename to sources/runtime/utils/Buffer.swift
diff --git a/sources/utils/Lock.swift b/sources/runtime/utils/Lock.swift
similarity index 100%
rename from sources/utils/Lock.swift
rename to sources/runtime/utils/Lock.swift
diff --git a/sources/utils/State.swift b/sources/runtime/utils/State.swift
similarity index 100%
rename from sources/utils/State.swift
rename to sources/runtime/utils/State.swift
diff --git a/sources/subscribers/Expectations.swift b/sources/testing/Expectations.swift
similarity index 99%
rename from sources/subscribers/Expectations.swift
rename to sources/testing/Expectations.swift
index d9e250d..6b6e1f3 100644
--- a/sources/subscribers/Expectations.swift
+++ b/sources/testing/Expectations.swift
@@ -1,4 +1,4 @@
-#if !os(watchOS) && canImport(XCTest)
+#if !os(watchOS)
import XCTest
import Combine
diff --git a/sources/subscribers/XCTestCase.swift b/sources/testing/XCTestCase.swift
similarity index 94%
rename from sources/subscribers/XCTestCase.swift
rename to sources/testing/XCTestCase.swift
index 65ea3ef..ca478d9 100644
--- a/sources/subscribers/XCTestCase.swift
+++ b/sources/testing/XCTestCase.swift
@@ -1,4 +1,4 @@
-#if !os(watchOS) && canImport(XCTest)
+#if !os(watchOS)
import XCTest
import Combine
import Foundation
diff --git a/tests/operators/AssignOpTests.swift b/tests/runtime/operators/AssignOpTests.swift
similarity index 98%
rename from tests/operators/AssignOpTests.swift
rename to tests/runtime/operators/AssignOpTests.swift
index 81c7c16..ad6c938 100644
--- a/tests/operators/AssignOpTests.swift
+++ b/tests/runtime/operators/AssignOpTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -54,4 +53,3 @@ extension AssignOpTests {
XCTAssert(objC.value == data.last!)
}
}
-#endif
diff --git a/tests/operators/DelayedRetryOpTests.swift b/tests/runtime/operators/DelayedRetryOpTests.swift
similarity index 99%
rename from tests/operators/DelayedRetryOpTests.swift
rename to tests/runtime/operators/DelayedRetryOpTests.swift
index ec26669..c189685 100644
--- a/tests/operators/DelayedRetryOpTests.swift
+++ b/tests/runtime/operators/DelayedRetryOpTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -101,4 +100,3 @@ extension DelayedRetryOpTests {
cancellable.cancel()
}
}
-#endif
diff --git a/tests/operators/HandleEndOpTests.swift b/tests/runtime/operators/HandleEndOpTests.swift
similarity index 99%
rename from tests/operators/HandleEndOpTests.swift
rename to tests/runtime/operators/HandleEndOpTests.swift
index 8e4bf1b..11c980c 100644
--- a/tests/operators/HandleEndOpTests.swift
+++ b/tests/runtime/operators/HandleEndOpTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -132,4 +131,3 @@ extension HandleEndOpTests {
cancellable.cancel()
}
}
-#endif
diff --git a/tests/operators/ResultOpTests.swift b/tests/runtime/operators/ResultOpTests.swift
similarity index 99%
rename from tests/operators/ResultOpTests.swift
rename to tests/runtime/operators/ResultOpTests.swift
index 23b4ae3..76e507c 100644
--- a/tests/operators/ResultOpTests.swift
+++ b/tests/runtime/operators/ResultOpTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -74,4 +73,3 @@ extension ResultOpTests {
self.wait(for: [expA], timeout: 0.2)
}
}
-#endif
diff --git a/tests/operators/ThenOpTests.swift b/tests/runtime/operators/ThenOpTests.swift
similarity index 98%
rename from tests/operators/ThenOpTests.swift
rename to tests/runtime/operators/ThenOpTests.swift
index f36c903..863049c 100644
--- a/tests/operators/ThenOpTests.swift
+++ b/tests/runtime/operators/ThenOpTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -55,4 +54,3 @@ extension ThenOpTests {
cancellable.cancel()
}
}
-#endif
diff --git a/tests/publishers/DeferredCompleteTests.swift b/tests/runtime/publishers/DeferredCompleteTests.swift
similarity index 99%
rename from tests/publishers/DeferredCompleteTests.swift
rename to tests/runtime/publishers/DeferredCompleteTests.swift
index b169cca..bc8beae 100644
--- a/tests/publishers/DeferredCompleteTests.swift
+++ b/tests/runtime/publishers/DeferredCompleteTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -90,4 +89,3 @@ extension DeferredCompleteTests {
cancellable.cancel()
}
}
-#endif
diff --git a/tests/publishers/DeferredFutureTests.swift b/tests/runtime/publishers/DeferredFutureTests.swift
similarity index 99%
rename from tests/publishers/DeferredFutureTests.swift
rename to tests/runtime/publishers/DeferredFutureTests.swift
index a19afee..da8c8e1 100644
--- a/tests/publishers/DeferredFutureTests.swift
+++ b/tests/runtime/publishers/DeferredFutureTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -80,4 +79,3 @@ extension DeferredFutureTests {
cancellable.cancel()
}
}
-#endif
diff --git a/tests/publishers/DeferredPassthroughTests.swift b/tests/runtime/publishers/DeferredPassthroughTests.swift
similarity index 99%
rename from tests/publishers/DeferredPassthroughTests.swift
rename to tests/runtime/publishers/DeferredPassthroughTests.swift
index 32b2f68..a717e28 100644
--- a/tests/publishers/DeferredPassthroughTests.swift
+++ b/tests/runtime/publishers/DeferredPassthroughTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -87,4 +86,3 @@ extension DeferredPassthroughTests {
XCTAssertEqual(.init(values.prefix(upTo: 2)), receivedValues)
}
}
-#endif
diff --git a/tests/publishers/DeferredResultTests.swift b/tests/runtime/publishers/DeferredResultTests.swift
similarity index 98%
rename from tests/publishers/DeferredResultTests.swift
rename to tests/runtime/publishers/DeferredResultTests.swift
index feaedb5..eff95f9 100644
--- a/tests/publishers/DeferredResultTests.swift
+++ b/tests/runtime/publishers/DeferredResultTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -53,4 +52,3 @@ extension DeferredResultTests {
self.wait(for: [exp], timeout: 0.2)
}
}
-#endif
diff --git a/tests/publishers/DeferredTryCompleteTests.swift b/tests/runtime/publishers/DeferredTryCompleteTests.swift
similarity index 99%
rename from tests/publishers/DeferredTryCompleteTests.swift
rename to tests/runtime/publishers/DeferredTryCompleteTests.swift
index 9dabb22..84026f1 100644
--- a/tests/publishers/DeferredTryCompleteTests.swift
+++ b/tests/runtime/publishers/DeferredTryCompleteTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -83,4 +82,3 @@ extension DeferredTryCompleteTests {
self.wait(for: [exp], timeout: 0.2)
}
}
-#endif
diff --git a/tests/publishers/DeferredTryValueTests.swift b/tests/runtime/publishers/DeferredTryValueTests.swift
similarity index 98%
rename from tests/publishers/DeferredTryValueTests.swift
rename to tests/runtime/publishers/DeferredTryValueTests.swift
index a3a59ad..3216c24 100644
--- a/tests/publishers/DeferredTryValueTests.swift
+++ b/tests/runtime/publishers/DeferredTryValueTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -51,4 +50,3 @@ extension DeferredTryValueTests {
self.wait(for: [exp], timeout: 0.2)
}
}
-#endif
diff --git a/tests/publishers/DeferredValueTests.swift b/tests/runtime/publishers/DeferredValueTests.swift
similarity index 97%
rename from tests/publishers/DeferredValueTests.swift
rename to tests/runtime/publishers/DeferredValueTests.swift
index 6e71e59..19778bc 100644
--- a/tests/publishers/DeferredValueTests.swift
+++ b/tests/runtime/publishers/DeferredValueTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -37,4 +36,3 @@ extension DeferredValueTests {
self.wait(for: [exp], timeout: 0.2)
}
}
-#endif
diff --git a/tests/subscribers/FixedSinkTests.swift b/tests/runtime/subscribers/FixedSinkTests.swift
similarity index 99%
rename from tests/subscribers/FixedSinkTests.swift
rename to tests/runtime/subscribers/FixedSinkTests.swift
index 3a247fd..f7affbf 100644
--- a/tests/subscribers/FixedSinkTests.swift
+++ b/tests/runtime/subscribers/FixedSinkTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -86,4 +85,3 @@ extension FixedSinkTests {
subscriber.cancel()
}
}
-#endif
diff --git a/tests/subscribers/GraduatedSinkTests.swift b/tests/runtime/subscribers/GraduatedSinkTests.swift
similarity index 99%
rename from tests/subscribers/GraduatedSinkTests.swift
rename to tests/runtime/subscribers/GraduatedSinkTests.swift
index f893384..5178fde 100644
--- a/tests/subscribers/GraduatedSinkTests.swift
+++ b/tests/runtime/subscribers/GraduatedSinkTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -65,4 +64,3 @@ extension GraduatedSinkTests {
subscriber.cancel()
}
}
-#endif
diff --git a/tests/utils/BufferTests.swift b/tests/runtime/utils/BufferTests.swift
similarity index 99%
rename from tests/utils/BufferTests.swift
rename to tests/runtime/utils/BufferTests.swift
index b5363e2..18b6bbd 100644
--- a/tests/utils/BufferTests.swift
+++ b/tests/runtime/utils/BufferTests.swift
@@ -1,4 +1,3 @@
-#if !os(watchOS)
import XCTest
import Conbini
import Combine
@@ -70,4 +69,3 @@ extension BufferTests {
XCTAssertEqual(input.map { $0 * 4 }, output)
}
}
-#endif
diff --git a/tests/subscribers/ExpectationsTests.swift b/tests/testing/ExpectationsTests.swift
similarity index 99%
rename from tests/subscribers/ExpectationsTests.swift
rename to tests/testing/ExpectationsTests.swift
index 84ccd72..84f5046 100644
--- a/tests/subscribers/ExpectationsTests.swift
+++ b/tests/testing/ExpectationsTests.swift
@@ -1,6 +1,6 @@
-#if !os(watchOS)
import XCTest
import Conbini
+import ConbiniForTesting
import Combine
/// Tests the correct behavior of the *expectation* conveniences.
@@ -82,4 +82,3 @@ extension ExpectationsTests {
XCTAssertEqual(.init(values[0..<2]), subjectEmitted)
}
}
-#endif