Skip to content

Commit

Permalink
injected definitions copy resolvedDependencyBlock
Browse files Browse the repository at this point in the history
  • Loading branch information
ilyapuchka committed Nov 25, 2015
1 parent 75bbfd3 commit 1656389
Show file tree
Hide file tree
Showing 5 changed files with 49 additions and 10 deletions.
4 changes: 3 additions & 1 deletion Dip/Dip/Definition.swift
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,13 @@ public final class DefinitionOf<T, F>: Definition {
```
*/
public func resolveDependencies(container: DependencyContainer, block: (DependencyContainer, T) -> ()) -> DefinitionOf<T, F> {
public func resolveDependencies(block: (DependencyContainer, T) -> ()) -> DefinitionOf<T, F> {
guard resolveDependenciesBlock == nil else {
fatalError("You can not change resolveDependencies block after it was set.")
}
self.resolveDependenciesBlock = block
self.injectedDefinition?.resolveDependenciesBlock = { block($0, $1 as! T) }
self.injectedWeakDefinition?.resolveDependenciesBlock = { block($0, $1 as! T) }
return self
}

Expand Down
8 changes: 3 additions & 5 deletions Dip/Dip/Dip.swift
Original file line number Diff line number Diff line change
Expand Up @@ -304,18 +304,16 @@ extension DependencyContainer.Tag: IntegerLiteralConvertible {
}

extension DependencyContainer.Tag: StringLiteralConvertible {
public typealias ExtendedGraphemeClusterLiteralType = StringLiteralType
public typealias UnicodeScalarLiteralType = StringLiteralType


public init(stringLiteral value: StringLiteralType) {
self = .String(value)
}

public init(unicodeScalarLiteral value: UnicodeScalarLiteralType) {
public init(unicodeScalarLiteral value: StringLiteralType) {
self.init(stringLiteral: value)
}

public init(extendedGraphemeClusterLiteral value: ExtendedGraphemeClusterLiteralType) {
public init(extendedGraphemeClusterLiteral value: StringLiteralType) {
self.init(stringLiteral: value)
}
}
Expand Down
39 changes: 39 additions & 0 deletions Dip/DipTests/AutoInjectionTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ class AutoInjectionTests: XCTestCase {
}

var _client = InjectedWeak<Client>()
var _anotherClient = InjectedWeak<Client>()

weak var client: Client? {
return _client.value
Expand All @@ -58,10 +59,12 @@ class AutoInjectionTests: XCTestCase {
}

var _server = Injected<Server>()
var _anotherServer = Injected<Server>()

var server: Server? {
return _server.value
}

}

let container = DependencyContainer()
Expand Down Expand Up @@ -116,4 +119,40 @@ class AutoInjectionTests: XCTestCase {
XCTAssertTrue(server as! ServerImp === sharedServer as! ServerImp)
}

func testThatItCallsResolveDependencyBlockOnOriginalDefiniton() {
var serverBlockWasCalled = false
container.register(.ObjectGraph) { ServerImp() as Server }
.resolveDependencies { (container, server) -> () in
serverBlockWasCalled = true
}


container.resolve() as Client
XCTAssertTrue(serverBlockWasCalled)

var clientBlockWasCalled = false
container.register(.ObjectGraph) { ClientImp() as Client }
.resolveDependencies { (container, server) -> () in
clientBlockWasCalled = true
}
container.resolve() as Server

XCTAssertTrue(clientBlockWasCalled)
}

func testThatItReuseResolvedAutoInjectedInstences() {
let client = (container.resolve() as Client) as! ClientImp

let server = client.server as! ServerImp
let anotherServer = client._anotherServer.value as! ServerImp

XCTAssertTrue(server === anotherServer)

let oneClient = server.client as! ClientImp
let anotherClient = server._anotherClient.value as! ClientImp

XCTAssertTrue(oneClient === anotherClient)
XCTAssertTrue(client === anotherClient)
}

}
6 changes: 3 additions & 3 deletions Dip/DipTests/ComponentScopeTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ class ComponentScopeTests: XCTestCase {
//given
container.register(.ObjectGraph) { [unowned container] in Client(server: container.resolve()) as Client }

container.register(.ObjectGraph) { Server() as Server }.resolveDependencies(container) { container, server in
container.register(.ObjectGraph) { Server() as Server }.resolveDependencies { container, server in
server.client = container.resolve() as Client
}

Expand All @@ -101,7 +101,7 @@ class ComponentScopeTests: XCTestCase {
func testThatItDoesNotReuseInstanceInObjectGraphScopeInNextResolve() {
//given
container.register(.ObjectGraph) { [unowned container] in Client(server: container.resolve()) as Client }
container.register(.ObjectGraph) { Server() as Server }.resolveDependencies(container) { container, server in
container.register(.ObjectGraph) { Server() as Server }.resolveDependencies { container, server in
server.client = container.resolve() as Client
}

Expand All @@ -120,7 +120,7 @@ class ComponentScopeTests: XCTestCase {
func testThatItDoesNotReuseInstanceInObjectGraphScopeResolvedForNilTag() {
//given
var service2: Service?
container.register(.ObjectGraph) { ServiceImp1() as Service }.resolveDependencies(container) { (c, _) in
container.register(.ObjectGraph) { ServiceImp1() as Service }.resolveDependencies { (c, _) in
service2 = c.resolve(tag: "service") as Service
}
container.register(tag: "service", .ObjectGraph) { ServiceImp2() as Service}
Expand Down
2 changes: 1 addition & 1 deletion Dip/DipTests/DipTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ class DipTests: XCTestCase {
func testThatItCallsResolveDependenciesOnDefinition() {
//given
var resolveDependenciesCalled = false
container.register { ServiceImp1() as Service }.resolveDependencies(container) { (c, s) in
container.register { ServiceImp1() as Service }.resolveDependencies { (c, s) in
resolveDependenciesCalled = true
}

Expand Down

0 comments on commit 1656389

Please sign in to comment.