@@ -140,6 +140,76 @@ final class DependencyValuesTests: XCTestCase {
140140 }
141141 }
142142 }
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+ }
143213}
144214
145215private let someDate = Date ( timeIntervalSince1970: 1_234_567_890 )
0 commit comments