Skip to content

Commit d459a9c

Browse files
committed
Assert expectations on the line they were expected on, not on the render call
1 parent 3ee0eb8 commit d459a9c

File tree

3 files changed

+53
-20
lines changed

3 files changed

+53
-20
lines changed

WorkflowTesting/Sources/Internal/RenderExpectations.swift

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,20 +22,25 @@
2222
internal class AnyExpectedWorkflow {
2323
let workflowType: Any.Type
2424
let key: String
25-
fileprivate init(workflowType: Any.Type, key: String) {
25+
let file: StaticString
26+
let line: UInt
27+
28+
fileprivate init(workflowType: Any.Type, key: String, file: StaticString, line: UInt) {
2629
self.workflowType = workflowType
2730
self.key = key
31+
self.file = file
32+
self.line = line
2833
}
2934
}
3035

3136
internal class ExpectedWorkflow<ExpectedWorkflowType: Workflow>: AnyExpectedWorkflow {
3237
let rendering: ExpectedWorkflowType.Rendering
3338
let output: ExpectedWorkflowType.Output?
3439

35-
init(key: String, rendering: ExpectedWorkflowType.Rendering, output: ExpectedWorkflowType.Output?) {
40+
init(key: String, rendering: ExpectedWorkflowType.Rendering, output: ExpectedWorkflowType.Output?, file: StaticString, line: UInt) {
3641
self.rendering = rendering
3742
self.output = output
38-
super.init(workflowType: ExpectedWorkflowType.self, key: key)
43+
super.init(workflowType: ExpectedWorkflowType.self, key: key, file: file, line: line)
3944
}
4045
}
4146
}
@@ -44,30 +49,39 @@
4449
internal class AnyExpectedWorker {
4550
let erasedWorker: Any
4651
let workerType: Any.Type
47-
fileprivate init(workerType: Any.Type, erasedWorker: Any) {
52+
let file: StaticString
53+
let line: UInt
54+
55+
fileprivate init(workerType: Any.Type, erasedWorker: Any, file: StaticString, line: UInt) {
4856
self.workerType = workerType
4957
self.erasedWorker = erasedWorker
58+
self.file = file
59+
self.line = line
5060
}
5161
}
5262

5363
internal final class ExpectedWorker<WorkerType: Worker>: AnyExpectedWorker {
5464
let worker: WorkerType
5565
let output: WorkerType.Output?
5666

57-
internal init(worker: WorkerType, output: WorkerType.Output?) {
67+
internal init(worker: WorkerType, output: WorkerType.Output?, file: StaticString, line: UInt) {
5868
self.worker = worker
5969
self.output = output
60-
super.init(workerType: WorkerType.self, erasedWorker: worker)
70+
super.init(workerType: WorkerType.self, erasedWorker: worker, file: file, line: line)
6171
}
6272
}
6373
}
6474

6575
extension RenderTester {
6676
internal class ExpectedSideEffect<WorkflowType: Workflow> {
6777
let key: AnyHashable
78+
let file: StaticString
79+
let line: UInt
6880

69-
init(key: AnyHashable) {
81+
init(key: AnyHashable, file: StaticString, line: UInt) {
7082
self.key = key
83+
self.file = file
84+
self.line = line
7185
}
7286

7387
func apply<ContextType>(context: ContextType) where ContextType: RenderContextType, ContextType.WorkflowType == WorkflowType {}
@@ -76,9 +90,9 @@
7690
internal final class ExpectedSideEffectWithAction<WorkflowType, ActionType: WorkflowAction>: ExpectedSideEffect<WorkflowType> where ActionType.WorkflowType == WorkflowType {
7791
let action: ActionType
7892

79-
internal init(key: AnyHashable, action: ActionType) {
93+
internal init(key: AnyHashable, action: ActionType, file: StaticString, line: UInt) {
8094
self.action = action
81-
super.init(key: key)
95+
super.init(key: key, file: file, line: line)
8296
}
8397

8498
override func apply<ContextType>(context: ContextType) where ContextType: RenderContextType, ContextType.WorkflowType == WorkflowType {

WorkflowTesting/Sources/Internal/RenderTester+TestContext.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -120,15 +120,15 @@
120120
/// Validate the expectations were fulfilled, or fail if not.
121121
func assertNoLeftOverExpectations() {
122122
for expectedWorker in expectedWorkers {
123-
XCTFail("Expected worker \(expectedWorker.erasedWorker)", file: file, line: line)
123+
XCTFail("Expected worker \(expectedWorker.erasedWorker)", file: expectedWorker.file, line: expectedWorker.line)
124124
}
125125

126126
for expectedWorkflow in expectedWorkflows {
127-
XCTFail("Expected child workflow of type: \(expectedWorkflow.workflowType), key: \"\(expectedWorkflow.key)\"", file: file, line: line)
127+
XCTFail("Expected child workflow of type: \(expectedWorkflow.workflowType), key: \"\(expectedWorkflow.key)\"", file: file, line: expectedWorkflow.line)
128128
}
129129

130-
for (key, _) in expectedSideEffects {
131-
XCTFail("Expected side-effect with key: \"\(key)\"", file: file, line: line)
130+
for (key, expectedSideEffect) in expectedSideEffects {
131+
XCTFail("Expected side-effect with key: \"\(key)\"", file: expectedSideEffect.file, line: expectedSideEffect.line)
132132
}
133133
}
134134

WorkflowTesting/Sources/WorkflowRenderTester.swift

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@
153153
key: String = "",
154154
producingRendering rendering: ExpectedWorkflowType.Rendering,
155155
producingOutput output: ExpectedWorkflowType.Output? = nil,
156+
file: StaticString = #file, line: UInt = #line,
156157
assertions: (ExpectedWorkflowType) -> Void = { _ in }
157158
) -> RenderTester<WorkflowType> {
158159
return RenderTester(
@@ -162,7 +163,9 @@
162163
ExpectedWorkflow<ExpectedWorkflowType>(
163164
key: key,
164165
rendering: rendering,
165-
output: output
166+
output: output,
167+
file: file,
168+
line: line
166169
)
167170
),
168171
expectedWorkers: expectedWorkers,
@@ -177,7 +180,8 @@
177180
/// - output: An output that should be returned when this worker is requested, if any.
178181
public func expect<ExpectedWorkerType: Worker>(
179182
worker: ExpectedWorkerType,
180-
producingOutput output: ExpectedWorkerType.Output? = nil
183+
producingOutput output: ExpectedWorkerType.Output? = nil,
184+
file: StaticString = #file, line: UInt = #line
181185
) -> RenderTester<WorkflowType> {
182186
return RenderTester(
183187
workflow: workflow,
@@ -186,7 +190,9 @@
186190
expectedWorkers: expectedWorkers.appending(
187191
ExpectedWorker(
188192
worker: worker,
189-
output: output
193+
output: output,
194+
file: file,
195+
line: line
190196
)
191197
),
192198
expectedSideEffects: expectedSideEffects
@@ -196,15 +202,22 @@
196202
/// Expect a side-effect for the given key.
197203
///
198204
/// - Parameter key: The key to expect.
199-
public func expectSideEffect(key: AnyHashable) -> RenderTester<WorkflowType> {
205+
public func expectSideEffect(
206+
key: AnyHashable,
207+
file: StaticString = #file, line: UInt = #line
208+
) -> RenderTester<WorkflowType> {
200209
return RenderTester(
201210
workflow: workflow,
202211
state: state,
203212
expectedWorkflows: expectedWorkflows,
204213
expectedWorkers: expectedWorkers,
205214
expectedSideEffects: expectedSideEffects.setting(
206215
key: key,
207-
value: ExpectedSideEffect(key: key)
216+
value: ExpectedSideEffect(
217+
key: key,
218+
file: file,
219+
line: line
220+
)
208221
)
209222
)
210223
}
@@ -216,7 +229,8 @@
216229
/// - action: The action to produce when this side-effect is requested.
217230
public func expectSideEffect<ActionType>(
218231
key: AnyHashable,
219-
producingAction action: ActionType
232+
producingAction action: ActionType,
233+
file: StaticString = #file, line: UInt = #line
220234
) -> RenderTester<WorkflowType> where ActionType: WorkflowAction, ActionType.WorkflowType == WorkflowType {
221235
return RenderTester(
222236
workflow: workflow,
@@ -225,7 +239,12 @@
225239
expectedWorkers: expectedWorkers,
226240
expectedSideEffects: expectedSideEffects.setting(
227241
key: key,
228-
value: ExpectedSideEffectWithAction(key: key, action: action)
242+
value: ExpectedSideEffectWithAction(
243+
key: key,
244+
action: action,
245+
file: file,
246+
line: line
247+
)
229248
)
230249
)
231250
}

0 commit comments

Comments
 (0)