-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathStoreBindingTests.swift
137 lines (114 loc) · 3.74 KB
/
StoreBindingTests.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
import Combine
import CombineExpectations
@testable import Recombine
import SwiftUI
import XCTest
private typealias StoreTestType = Store<TestFakes.IntTest.State, TestFakes.SetAction, TestFakes.SetAction>
private enum Redux: StoreParameter {
enum Action: ActionProtocol {
enum Async {
case noOp
}
enum Sync: BindableAction {
case goToFirstScreen
case goToSecondScreen
case binding(BindingAction<States.Main>)
}
}
enum Reducers: ReducerParameter {
static let main = Reducer<States.Main, Action.Sync, Void> { state, action, _ in
switch action {
case .goToFirstScreen:
state.screen = .primary
case .goToSecondScreen:
state.screen = .secondary
case .binding:
break
}
}.binding()
}
enum Middlewares: MiddlewareParameter {
static let main = Middleware<States.Main, Action.Async, Action.Sync, Void>()
}
enum Thunks: ThunkParameter {
static let main = Thunk<States.Main, Action.Async, Action.Sync, Void> { _, action, _ -> EitherAction<Action.Async, Action.Sync>.Publisher in
switch action {
case .noOp:
return Empty()
.eraseToAnyPublisher()
}
}
}
enum SideEffects: SideEffectParameter {
static let main = SideEffect<Action.Sync, Void>(logging)
static let logging = SideEffect<Action.Sync, Void> { action, _ in
print(action)
}
}
enum States: StateParameter {
struct Main: Equatable {
enum Route {
case primary
case secondary
}
@BindableState var username: String = ""
var screen: Route = .primary
}
static let initial: Main = .init()
}
static let scheduler = DispatchQueue.main
static let environment: Void = ()
static let store = Store(parameters: Self.self)
}
private enum Redux2: StoreParameter {
enum Action: ActionProtocol {
typealias Async = Never
enum Sync: BindableAction {
case goToFirstScreen
case goToSecondScreen
case binding(BindingAction<States.Main>)
}
}
enum Reducers: ReducerParameter {
static let main = Reducer<States.Main, Action.Sync, Void> { state, action, _ in
switch action {
case .goToFirstScreen:
state.screen = .primary
case .goToSecondScreen:
state.screen = .secondary
case .binding:
break
}
}.binding()
}
enum Middlewares: MiddlewareParameter {
static let main = Middleware<States.Main, Action.Async, Action.Sync, Void>()
}
enum Thunks: ThunkParameter {
static let main = Thunk<States.Main, Action.Async, Action.Sync, Void> { _, _, _ -> EitherAction<Action.Async, Action.Sync>.Publisher in
}
}
enum SideEffects: SideEffectParameter {
static let main = SideEffect<Action.Sync, Void>(logging)
static let logging = SideEffect<Action.Sync, Void> { action, _ in
print(action)
}
}
enum States: StateParameter {
struct Main: Equatable {
enum Route {
case primary
case secondary
}
@BindableState var username: String = ""
var screen: Route = .primary
}
static let initial: Main = .init()
}
static let scheduler = DispatchQueue.main
static let environment: Void = ()
static let store = Store(parameters: Self.self)
}
class StoreBindingTests: XCTestCase {
func testBinding() {}
}