Skip to content

Commit 1594f28

Browse files
heyltsjaymluisbrown
authored andcommitted
Adds .sequence(Step) to StepType (#387)
1 parent 192d675 commit 1594f28

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

Sources/ComposableArchitecture/TestSupport/TestStore.swift

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,7 @@
257257
store.scope(state: self.toLocalState, action: TestAction.send)
258258
)
259259

260-
for step in steps {
260+
func assert(step: Step) {
261261
var expectedState = toLocalState(snapshotState)
262262

263263
func expectedStateShouldMatch(actualState: LocalState) {
@@ -381,9 +381,14 @@
381381
} catch {
382382
_XCTFail("Threw error: \(error)", file: step.file, line: step.line)
383383
}
384+
385+
case let .sequence(subSteps):
386+
subSteps.forEach(assert(step:))
384387
}
385388
}
386389

390+
steps.forEach(assert(step:))
391+
387392
if !receivedActions.isEmpty {
388393
_XCTFail(
389394
"""
@@ -540,11 +545,36 @@
540545
Step(.do(work), file: file, line: line)
541546
}
542547

543-
fileprivate enum StepType {
548+
/// A step that captures a sub-sequence of steps.
549+
///
550+
/// - Parameter steps: An array of `Step`
551+
/// - Returns: A step that captures a sub-sequence of steps.
552+
public static func sequence(
553+
_ steps: [Step],
554+
file: StaticString = #file,
555+
line: UInt = #line
556+
) -> Step {
557+
Step(.sequence(steps), file: file, line: line)
558+
}
559+
560+
/// A step that captures a sub-sequence of steps.
561+
///
562+
/// - Parameter steps: A variadic list of `Step`
563+
/// - Returns: A step that captures a sub-sequence of steps.
564+
public static func sequence(
565+
_ steps: Step...,
566+
file: StaticString = #file,
567+
line: UInt = #line
568+
) -> Step {
569+
Step(.sequence(steps), file: file, line: line)
570+
}
571+
572+
fileprivate indirect enum StepType {
544573
case send(LocalAction, (inout LocalState) throws -> Void)
545574
case receive(Action, (inout LocalState) throws -> Void)
546575
case environment((inout Environment) throws -> Void)
547576
case `do`(() throws -> Void)
577+
case sequence([Step])
548578
}
549579
}
550580

Tests/ComposableArchitectureTests/TestStoreTests.swift

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,11 @@ class TestStoreTests: XCTestCase {
5252
.receive(.b2),
5353
.receive(.b3),
5454

55-
.receive(.c1),
56-
.receive(.c2),
57-
.receive(.c3),
55+
.sequence([
56+
.receive(.c1),
57+
.receive(.c2),
58+
.receive(.c3),
59+
]),
5860

5961
.send(.d)
6062
)

0 commit comments

Comments
 (0)