The AsyncExtensions target is a growing collection of useful functions and classes that take advantage of Swift's new Concurrency features.
The AsyncExtensions package also inlcudes the AsyncTestExtensions target, which contains async-friendly wrappers around XCTest assertions.
AsyncInputStream
: A convenient wrapper aroundInputStream
allowing for simple, type-safe access to stream data.AsyncOutputStream
: A convenient wrapper aroundOutputStream
allowing for simple, type-safe streaming of data.Publisher.allValues
: Creates anAsyncStream
from a Combine Publisher. It buffers all of the publisher's output, ensuring theAsyncStream
will produce everything the publisher publishes.Future
: A thread-safe implemention of a future that is useful when briding traditional Swift code with code employing Swift Concurrency.Sequence.asyncMap()
andSequence.concurrentMap()
: Extensions allowing for applying async transformations toSequence
.TaskStore
: A thread-safe store forTask
, which can help when migrating from Combine publishers to Swift Concurrency.TimeoutError
: A simple error intending to represent a timeout. Modelled afterCancellationError
.
AssertEqual()
AssertEqualEventually()
AssertTrue()
AssertTrueEventually()
AssertFalse()
AssertNil()
AssertNotNil()
AssertThrowsError()
AssertNoThrow()
XCTestCase.task()
XCTestCase.serialized()
XCTestCase.yield()
To use AsyncExtensions, add a dependency to your Package.swift file:
let package = Package(
dependencies: [
.package(
url: "https://github.com/shareup/async-extensions.git",
from: "4.3.0"
)
]
)
To use AsyncTestExtensions in a test target, add it as a dependency:
.testTarget(
name: "MyTests",
dependencies: [
.product(name: "AsyncTestExtensions", package: "async-extensions")
]
)
The license for AsyncExtensions is the standard MIT licence. You can find it in the LICENSE file.
SequenceExtensions were heavily inspired by CollectionConcurrencyKit by John Sundell at https://github.com/JohnSundell/CollectionConcurrencyKit.
The main serial executor XCTestCase extensions were taken from swift-concurrency-extras by Point-Free at https://github.com/pointfreeco/swift-concurrency-extras.