Skip to content

Commit 55e8a4e

Browse files
committed
Updated TestStore DSL (#454)
* Update TestStore to support imperative DSL This gives us better XCTIssue-based error messaging since each line is captured in the stack. * Update examples to new testing DSL * Fix * Update README.md * 11.3 * fix * fix
1 parent dcab1c2 commit 55e8a4e

33 files changed

+1862
-2010
lines changed

Examples/CaseStudies/SwiftUICaseStudiesTests/01-GettingStarted-AlertsAndActionSheetsTests.swift

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -13,23 +13,21 @@ class AlertsAndActionSheetsTests: XCTestCase {
1313
environment: AlertAndSheetEnvironment()
1414
)
1515

16-
store.assert(
17-
.send(.alertButtonTapped) {
18-
$0.alert = .init(
19-
title: .init("Alert!"),
20-
message: .init("This is an alert"),
21-
primaryButton: .cancel(),
22-
secondaryButton: .default(.init("Increment"), send: .incrementButtonTapped)
23-
)
24-
},
25-
.send(.incrementButtonTapped) {
26-
$0.alert = .init(title: .init("Incremented!"))
27-
$0.count = 1
28-
},
29-
.send(.alertDismissed) {
30-
$0.alert = nil
31-
}
32-
)
16+
store.send(.alertButtonTapped) {
17+
$0.alert = .init(
18+
title: .init("Alert!"),
19+
message: .init("This is an alert"),
20+
primaryButton: .cancel(),
21+
secondaryButton: .default(.init("Increment"), send: .incrementButtonTapped)
22+
)
23+
}
24+
store.send(.incrementButtonTapped) {
25+
$0.alert = .init(title: .init("Incremented!"))
26+
$0.count = 1
27+
}
28+
store.send(.alertDismissed) {
29+
$0.alert = nil
30+
}
3331
}
3432

3533
func testActionSheet() {
@@ -39,25 +37,23 @@ class AlertsAndActionSheetsTests: XCTestCase {
3937
environment: AlertAndSheetEnvironment()
4038
)
4139

42-
store.assert(
43-
.send(.actionSheetButtonTapped) {
44-
$0.actionSheet = .init(
45-
title: .init("Action sheet"),
46-
message: .init("This is an action sheet."),
47-
buttons: [
48-
.cancel(),
49-
.default(.init("Increment"), send: .incrementButtonTapped),
50-
.default(.init("Decrement"), send: .decrementButtonTapped),
51-
]
52-
)
53-
},
54-
.send(.incrementButtonTapped) {
55-
$0.alert = .init(title: .init("Incremented!"))
56-
$0.count = 1
57-
},
58-
.send(.actionSheetDismissed) {
59-
$0.actionSheet = nil
60-
}
61-
)
40+
store.send(.actionSheetButtonTapped) {
41+
$0.actionSheet = .init(
42+
title: .init("Action sheet"),
43+
message: .init("This is an action sheet."),
44+
buttons: [
45+
.cancel(),
46+
.default(.init("Increment"), send: .incrementButtonTapped),
47+
.default(.init("Decrement"), send: .decrementButtonTapped),
48+
]
49+
)
50+
}
51+
store.send(.incrementButtonTapped) {
52+
$0.alert = .init(title: .init("Incremented!"))
53+
$0.count = 1
54+
}
55+
store.send(.actionSheetDismissed) {
56+
$0.actionSheet = nil
57+
}
6258
}
6359
}

Examples/CaseStudies/SwiftUICaseStudiesTests/01-GettingStarted-AnimationsTests.swift

Lines changed: 42 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -16,49 +16,47 @@ class AnimationTests: XCTestCase {
1616
)
1717
)
1818

19-
store.assert(
20-
.send(.rainbowButtonTapped),
21-
22-
.receive(.setColor(.red)) {
23-
$0.circleColor = .red
24-
},
25-
26-
.do { self.scheduler.advance(by: .seconds(1)) },
27-
.receive(.setColor(.blue)) {
28-
$0.circleColor = .blue
29-
},
30-
31-
.do { self.scheduler.advance(by: .seconds(1)) },
32-
.receive(.setColor(.green)) {
33-
$0.circleColor = .green
34-
},
35-
36-
.do { self.scheduler.advance(by: .seconds(1)) },
37-
.receive(.setColor(.orange)) {
38-
$0.circleColor = .orange
39-
},
40-
41-
.do { self.scheduler.advance(by: .seconds(1)) },
42-
.receive(.setColor(.pink)) {
43-
$0.circleColor = .pink
44-
},
45-
46-
.do { self.scheduler.advance(by: .seconds(1)) },
47-
.receive(.setColor(.purple)) {
48-
$0.circleColor = .purple
49-
},
50-
51-
.do { self.scheduler.advance(by: .seconds(1)) },
52-
.receive(.setColor(.yellow)) {
53-
$0.circleColor = .yellow
54-
},
55-
56-
.do { self.scheduler.advance(by: .seconds(1)) },
57-
.receive(.setColor(.white)) {
58-
$0.circleColor = .white
59-
},
60-
61-
.do { self.scheduler.run() }
62-
)
19+
store.send(.rainbowButtonTapped)
20+
21+
store.receive(.setColor(.red)) {
22+
$0.circleColor = .red
23+
}
24+
25+
self.scheduler.advance(by: .seconds(1))
26+
store.receive(.setColor(.blue)) {
27+
$0.circleColor = .blue
28+
}
29+
30+
self.scheduler.advance(by: .seconds(1))
31+
store.receive(.setColor(.green)) {
32+
$0.circleColor = .green
33+
}
34+
35+
self.scheduler.advance(by: .seconds(1))
36+
store.receive(.setColor(.orange)) {
37+
$0.circleColor = .orange
38+
}
39+
40+
self.scheduler.advance(by: .seconds(1))
41+
store.receive(.setColor(.pink)) {
42+
$0.circleColor = .pink
43+
}
44+
45+
self.scheduler.advance(by: .seconds(1))
46+
store.receive(.setColor(.purple)) {
47+
$0.circleColor = .purple
48+
}
49+
50+
self.scheduler.advance(by: .seconds(1))
51+
store.receive(.setColor(.yellow)) {
52+
$0.circleColor = .yellow
53+
}
54+
55+
self.scheduler.advance(by: .seconds(1))
56+
store.receive(.setColor(.white)) {
57+
$0.circleColor = .white
58+
}
59+
60+
self.scheduler.run()
6361
}
6462
}

Examples/CaseStudies/SwiftUICaseStudiesTests/01-GettingStarted-BindingBasicsTests.swift

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,23 +12,21 @@ class BindingFormTests: XCTestCase {
1212
environment: BindingFormEnvironment()
1313
)
1414

15-
store.assert(
16-
.send(.binding(.set(\.sliderValue, 2))) {
17-
$0.sliderValue = 2
18-
},
19-
.send(.binding(.set(\.stepCount, 1))) {
20-
$0.sliderValue = 1
21-
$0.stepCount = 1
22-
},
23-
.send(.binding(.set(\.text, "Blob"))) {
24-
$0.text = "Blob"
25-
},
26-
.send(.binding(.set(\.toggleIsOn, true))) {
27-
$0.toggleIsOn = true
28-
},
29-
.send(.resetButtonTapped) {
30-
$0 = .init(sliderValue: 5, stepCount: 10, text: "", toggleIsOn: false)
31-
}
32-
)
15+
store.send(.binding(.set(\.sliderValue, 2))) {
16+
$0.sliderValue = 2
17+
}
18+
store.send(.binding(.set(\.stepCount, 1))) {
19+
$0.sliderValue = 1
20+
$0.stepCount = 1
21+
}
22+
store.send(.binding(.set(\.text, "Blob"))) {
23+
$0.text = "Blob"
24+
}
25+
store.send(.binding(.set(\.toggleIsOn, true))) {
26+
$0.toggleIsOn = true
27+
}
28+
store.send(.resetButtonTapped) {
29+
$0 = .init(sliderValue: 5, stepCount: 10, text: "", toggleIsOn: false)
30+
}
3331
}
3432
}

Examples/CaseStudies/SwiftUICaseStudiesTests/01-GettingStarted-SharedStateTests.swift

Lines changed: 50 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,16 @@ class SharedStateTests: XCTestCase {
1212
environment: ()
1313
)
1414

15-
store.assert(
16-
.send(.selectTab(.profile)) {
17-
$0.currentTab = .profile
18-
$0.profile = .init(
19-
currentTab: .profile, count: 0, maxCount: 0, minCount: 0, numberOfCounts: 0)
20-
},
21-
.send(.profile(.resetCounterButtonTapped)) {
22-
$0.currentTab = .counter
23-
$0.profile = .init(
24-
currentTab: .counter, count: 0, maxCount: 0, minCount: 0, numberOfCounts: 0)
25-
})
15+
store.send(.selectTab(.profile)) {
16+
$0.currentTab = .profile
17+
$0.profile = .init(
18+
currentTab: .profile, count: 0, maxCount: 0, minCount: 0, numberOfCounts: 0)
19+
}
20+
store.send(.profile(.resetCounterButtonTapped)) {
21+
$0.currentTab = .counter
22+
$0.profile = .init(
23+
currentTab: .counter, count: 0, maxCount: 0, minCount: 0, numberOfCounts: 0)
24+
}
2625
}
2726

2827
func testTabSelection() {
@@ -32,17 +31,16 @@ class SharedStateTests: XCTestCase {
3231
environment: ()
3332
)
3433

35-
store.assert(
36-
.send(.selectTab(.profile)) {
37-
$0.currentTab = .profile
38-
$0.profile = .init(
39-
currentTab: .profile, count: 0, maxCount: 0, minCount: 0, numberOfCounts: 0)
40-
},
41-
.send(.selectTab(.counter)) {
42-
$0.currentTab = .counter
43-
$0.profile = .init(
44-
currentTab: .counter, count: 0, maxCount: 0, minCount: 0, numberOfCounts: 0)
45-
})
34+
store.send(.selectTab(.profile)) {
35+
$0.currentTab = .profile
36+
$0.profile = .init(
37+
currentTab: .profile, count: 0, maxCount: 0, minCount: 0, numberOfCounts: 0)
38+
}
39+
store.send(.selectTab(.counter)) {
40+
$0.currentTab = .counter
41+
$0.profile = .init(
42+
currentTab: .counter, count: 0, maxCount: 0, minCount: 0, numberOfCounts: 0)
43+
}
4644
}
4745

4846
func testSharedCounts() {
@@ -52,21 +50,20 @@ class SharedStateTests: XCTestCase {
5250
environment: ()
5351
)
5452

55-
store.assert(
56-
.send(.counter(.incrementButtonTapped)) {
57-
$0.counter.count = 1
58-
$0.counter.maxCount = 1
59-
$0.counter.numberOfCounts = 1
60-
},
61-
.send(.counter(.decrementButtonTapped)) {
62-
$0.counter.count = 0
63-
$0.counter.numberOfCounts = 2
64-
},
65-
.send(.counter(.decrementButtonTapped)) {
66-
$0.counter.count = -1
67-
$0.counter.minCount = -1
68-
$0.counter.numberOfCounts = 3
69-
})
53+
store.send(.counter(.incrementButtonTapped)) {
54+
$0.counter.count = 1
55+
$0.counter.maxCount = 1
56+
$0.counter.numberOfCounts = 1
57+
}
58+
store.send(.counter(.decrementButtonTapped)) {
59+
$0.counter.count = 0
60+
$0.counter.numberOfCounts = 2
61+
}
62+
store.send(.counter(.decrementButtonTapped)) {
63+
$0.counter.count = -1
64+
$0.counter.minCount = -1
65+
$0.counter.numberOfCounts = 3
66+
}
7067
}
7168

7269
func testIsPrimeWhenPrime() {
@@ -77,16 +74,14 @@ class SharedStateTests: XCTestCase {
7774
environment: ()
7875
)
7976

80-
store.assert(
81-
.send(.isPrimeButtonTapped) {
82-
$0.alert = .init(
83-
title: .init("👍 The number \($0.count) is prime!")
84-
)
85-
},
86-
.send(.alertDismissed) {
87-
$0.alert = nil
88-
}
89-
)
77+
store.send(.isPrimeButtonTapped) {
78+
$0.alert = .init(
79+
title: .init("👍 The number \($0.count) is prime!")
80+
)
81+
}
82+
store.send(.alertDismissed) {
83+
$0.alert = nil
84+
}
9085
}
9186

9287
func testIsPrimeWhenNotPrime() {
@@ -97,15 +92,13 @@ class SharedStateTests: XCTestCase {
9792
environment: ()
9893
)
9994

100-
store.assert(
101-
.send(.isPrimeButtonTapped) {
102-
$0.alert = .init(
103-
title: .init("👎 The number \($0.count) is not prime :(")
104-
)
105-
},
106-
.send(.alertDismissed) {
107-
$0.alert = nil
108-
}
109-
)
95+
store.send(.isPrimeButtonTapped) {
96+
$0.alert = .init(
97+
title: .init("👎 The number \($0.count) is not prime :(")
98+
)
99+
}
100+
store.send(.alertDismissed) {
101+
$0.alert = nil
102+
}
110103
}
111104
}

0 commit comments

Comments
 (0)