@@ -140,6 +140,76 @@ final class DependencyValuesTests: XCTestCase {
140
140
}
141
141
}
142
142
}
143
+
144
+ func testBinding( ) {
145
+ @Dependency ( \. childDependencyEarlyBinding) var childDependencyEarlyBinding ;
146
+ @Dependency ( \. childDependencyLateBinding) var childDependencyLateBinding ;
147
+
148
+ XCTAssertEqual ( childDependencyEarlyBinding. fetch ( ) , 42 )
149
+ XCTAssertEqual ( childDependencyLateBinding. fetch ( ) , 42 )
150
+
151
+ DependencyValues . withValue ( \. someDependency. fetch, { 1729 } ) {
152
+ XCTAssertEqual ( childDependencyEarlyBinding. fetch ( ) , 1729 )
153
+ XCTAssertEqual ( childDependencyLateBinding. fetch ( ) , 1729 )
154
+ }
155
+
156
+ var childDependencyEarlyBindingEscaped : ChildDependencyEarlyBinding !
157
+ var childDependencyLateBindingEscaped : ChildDependencyLateBinding !
158
+
159
+ DependencyValues . withValue ( \. someDependency. fetch, { 999 } ) {
160
+ @Dependency ( \. childDependencyEarlyBinding) var childDependencyEarlyBinding2 ;
161
+ @Dependency ( \. childDependencyLateBinding) var childDependencyLateBinding2 ;
162
+
163
+ childDependencyEarlyBindingEscaped = childDependencyEarlyBinding
164
+ childDependencyLateBindingEscaped = childDependencyLateBinding
165
+
166
+ XCTAssertEqual ( childDependencyEarlyBinding2. fetch ( ) , 999 )
167
+ XCTAssertEqual ( childDependencyLateBinding2. fetch ( ) , 999 )
168
+ }
169
+
170
+ XCTAssertEqual ( childDependencyEarlyBindingEscaped. fetch ( ) , 42 )
171
+ XCTAssertEqual ( childDependencyLateBindingEscaped. fetch ( ) , 42 )
172
+
173
+ DependencyValues . withValue ( \. someDependency. fetch, { 1_000 } ) {
174
+ XCTAssertEqual ( childDependencyEarlyBindingEscaped. fetch ( ) , 1_000 )
175
+ XCTAssertEqual ( childDependencyLateBindingEscaped. fetch ( ) , 1_000 )
176
+ }
177
+ }
178
+ }
179
+
180
+ struct SomeDependency : TestDependencyKey {
181
+ var fetch : ( ) -> Int
182
+ static let testValue = Self { 42 }
183
+ }
184
+ struct ChildDependencyEarlyBinding : TestDependencyKey {
185
+ var fetch : ( ) -> Int
186
+ static var testValue : Self {
187
+ @Dependency ( \. someDependency) var someDependency
188
+ return Self { someDependency. fetch ( ) }
189
+ }
190
+ }
191
+ struct ChildDependencyLateBinding : TestDependencyKey {
192
+ var fetch : ( ) -> Int
193
+ static var testValue : Self {
194
+ return Self {
195
+ @Dependency ( \. someDependency) var someDependency
196
+ return someDependency. fetch ( )
197
+ }
198
+ }
199
+ }
200
+ extension DependencyValues {
201
+ var someDependency : SomeDependency {
202
+ get { self [ SomeDependency . self] }
203
+ set { self [ SomeDependency . self] = newValue }
204
+ }
205
+ var childDependencyEarlyBinding : ChildDependencyEarlyBinding {
206
+ get { self [ ChildDependencyEarlyBinding . self] }
207
+ set { self [ ChildDependencyEarlyBinding . self] = newValue }
208
+ }
209
+ var childDependencyLateBinding : ChildDependencyLateBinding {
210
+ get { self [ ChildDependencyLateBinding . self] }
211
+ set { self [ ChildDependencyLateBinding . self] = newValue }
212
+ }
143
213
}
144
214
145
215
private let someDate = Date ( timeIntervalSince1970: 1_234_567_890 )
0 commit comments