Skip to content

Commit 7ef6a86

Browse files
mbrandonwp4checo
authored andcommitted
Add test for early vs late binding of @dependency. (#1596)
* Add test for early vs late binding of @dependency. * simplify * another assertion * add escaping test (cherry picked from commit 675969ef7c9b3ad6f23d84ee53185f449299d123)
1 parent 3c54ef6 commit 7ef6a86

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

Tests/DependenciesTests/DependencyValuesTests.swift

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

145215
private let someDate = Date(timeIntervalSince1970: 1_234_567_890)

0 commit comments

Comments
 (0)