mirror of
https://github.com/pointfreeco/swift-composable-architecture.git
synced 2025-12-20 09:11:33 +01:00
* Add support for naming tasks in .run effects * Cleanup * fix * typo * wip * wip --------- Co-authored-by: Stephen Celis <stephen@stephencelis.com>
154 lines
3.8 KiB
Swift
154 lines
3.8 KiB
Swift
#if DEBUG
|
|
import XCTest
|
|
|
|
@testable import ComposableArchitecture
|
|
|
|
class EffectOperationTests: BaseTCATestCase {
|
|
func testMergeDiscardsNones() async {
|
|
var effect = Effect<Int>.none
|
|
.merge(with: .none)
|
|
switch effect.operation {
|
|
case .none:
|
|
XCTAssertTrue(true)
|
|
default:
|
|
XCTFail()
|
|
}
|
|
|
|
effect = Effect<Int>.run { send in await send(42) }
|
|
.merge(with: .none)
|
|
switch effect.operation {
|
|
case let .run(_, _, send):
|
|
await send(.init(send: { XCTAssertEqual($0, 42) }))
|
|
default:
|
|
XCTFail()
|
|
}
|
|
|
|
effect = Effect<Int>.none
|
|
.merge(with: .run { send in await send(42) })
|
|
switch effect.operation {
|
|
case let .run(_, _, send):
|
|
await send(.init(send: { XCTAssertEqual($0, 42) }))
|
|
default:
|
|
XCTFail()
|
|
}
|
|
|
|
effect = Effect<Int>.run { await $0(42) }
|
|
.merge(with: .none)
|
|
switch effect.operation {
|
|
case let .run(_, _, send):
|
|
await send(.init(send: { XCTAssertEqual($0, 42) }))
|
|
default:
|
|
XCTFail()
|
|
}
|
|
|
|
effect = Effect<Int>.none
|
|
.merge(with: .run { await $0(42) })
|
|
switch effect.operation {
|
|
case let .run(_, _, send):
|
|
await send(.init(send: { XCTAssertEqual($0, 42) }))
|
|
default:
|
|
XCTFail()
|
|
}
|
|
}
|
|
|
|
func testConcatenateDiscardsNones() async {
|
|
var effect = Effect<Int>.none
|
|
.concatenate(with: .none)
|
|
switch effect.operation {
|
|
case .none:
|
|
XCTAssertTrue(true)
|
|
default:
|
|
XCTFail()
|
|
}
|
|
|
|
effect = Effect<Int>.run { send in await send(42) }
|
|
.concatenate(with: .none)
|
|
switch effect.operation {
|
|
case let .run(_, _, send):
|
|
await send(.init(send: { XCTAssertEqual($0, 42) }))
|
|
default:
|
|
XCTFail()
|
|
}
|
|
|
|
effect = Effect<Int>.none
|
|
.concatenate(with: .run { send in await send(42) })
|
|
switch effect.operation {
|
|
case let .run(_, _, send):
|
|
await send(.init(send: { XCTAssertEqual($0, 42) }))
|
|
default:
|
|
XCTFail()
|
|
}
|
|
|
|
effect = Effect<Int>.run { send in await send(42) }
|
|
.concatenate(with: .none)
|
|
switch effect.operation {
|
|
case let .run(_, _, send):
|
|
await send(.init(send: { XCTAssertEqual($0, 42) }))
|
|
default:
|
|
XCTFail()
|
|
}
|
|
|
|
effect = Effect<Int>.none
|
|
.concatenate(with: .run { send in await send(42) })
|
|
switch effect.operation {
|
|
case let .run(_, _, send):
|
|
await send(.init(send: { XCTAssertEqual($0, 42) }))
|
|
default:
|
|
XCTFail()
|
|
}
|
|
}
|
|
|
|
@MainActor
|
|
func testMergeFuses() async {
|
|
var values = [Int]()
|
|
|
|
let effect = Effect<Int>.run { send in
|
|
try await Task.sleep(nanoseconds: NSEC_PER_SEC / 10)
|
|
await send(42)
|
|
}
|
|
.merge(
|
|
with: .run { send in
|
|
try await Task.sleep(nanoseconds: NSEC_PER_SEC / 2)
|
|
await send(1729)
|
|
}
|
|
)
|
|
switch effect.operation {
|
|
case let .run(_, _, send):
|
|
await send(.init { values.append($0) })
|
|
default:
|
|
XCTFail()
|
|
}
|
|
|
|
XCTAssertEqual(values, [42, 1729])
|
|
}
|
|
|
|
@MainActor
|
|
func testConcatenateFuses() async {
|
|
var values = [Int]()
|
|
|
|
let effect = Effect<Int>.run { send in await send(42) }
|
|
.concatenate(with: .run { send in await send(1729) })
|
|
switch effect.operation {
|
|
case let .run(_, _, send):
|
|
await send(.init(send: { values.append($0) }))
|
|
default:
|
|
XCTFail()
|
|
}
|
|
|
|
XCTAssertEqual(values, [42, 1729])
|
|
}
|
|
|
|
func testMap() async {
|
|
let effect = Effect<Int>.run { send in await send(42) }
|
|
.map { "\($0)" }
|
|
|
|
switch effect.operation {
|
|
case let .run(_, _, send):
|
|
await send(.init(send: { XCTAssertEqual($0, "42") }))
|
|
default:
|
|
XCTFail()
|
|
}
|
|
}
|
|
}
|
|
#endif
|