Skip to content

Commit d99b8ad

Browse files
author
Hadevs
committed
writed tests and added manual registration
1 parent aa26c40 commit d99b8ad

File tree

6 files changed

+104
-28
lines changed

6 files changed

+104
-28
lines changed

SwiftInjector/SwiftInjector.xcodeproj/project.pbxproj

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222
E676F73522C9688F00DC1282 /* TestClass.swift in Sources */ = {isa = PBXBuildFile; fileRef = E676F73422C9688F00DC1282 /* TestClass.swift */; };
2323
E6BF5C6322CD2A32009A9331 /* SILogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6BF5C6222CD2A32009A9331 /* SILogger.swift */; };
2424
E6BF5C6522CD45C0009A9331 /* RecursiveResolvingTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6BF5C6422CD45C0009A9331 /* RecursiveResolvingTests.swift */; };
25-
E6C8BEFF22CD592300D99B89 /* AutoRecursionContainer_2Parent.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6C8BEFE22CD592300D99B89 /* AutoRecursionContainer_2Parent.swift */; };
2625
E6F3F57B22D11056003D86FA /* ContainerablePropertyNameTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6F3F57A22D11056003D86FA /* ContainerablePropertyNameTests.swift */; };
2726
E6F3F57D22D111CB003D86FA /* ContainerableRegisterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6F3F57C22D111CB003D86FA /* ContainerableRegisterTests.swift */; };
2827
E6F3F57F22D11646003D86FA /* ContainerablePropertyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6F3F57E22D11646003D86FA /* ContainerablePropertyTests.swift */; };
2928
E6F3F58122D117EE003D86FA /* ContainerableFormattedStringTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6F3F58022D117EE003D86FA /* ContainerableFormattedStringTests.swift */; };
29+
E6F3F59622D3516D003D86FA /* ContainerableRecordRelationsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6F3F59522D3516D003D86FA /* ContainerableRecordRelationsTests.swift */; };
30+
E6F3F59A22D3783E003D86FA /* ContrainerableManualRegistrationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6F3F59922D3783E003D86FA /* ContrainerableManualRegistrationTests.swift */; };
3031
/* End PBXBuildFile section */
3132

3233
/* Begin PBXContainerItemProxy section */
@@ -59,11 +60,12 @@
5960
E676F73422C9688F00DC1282 /* TestClass.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestClass.swift; sourceTree = "<group>"; };
6061
E6BF5C6222CD2A32009A9331 /* SILogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SILogger.swift; sourceTree = "<group>"; };
6162
E6BF5C6422CD45C0009A9331 /* RecursiveResolvingTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecursiveResolvingTests.swift; sourceTree = "<group>"; };
62-
E6C8BEFE22CD592300D99B89 /* AutoRecursionContainer_2Parent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AutoRecursionContainer_2Parent.swift; sourceTree = "<group>"; };
6363
E6F3F57A22D11056003D86FA /* ContainerablePropertyNameTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContainerablePropertyNameTests.swift; sourceTree = "<group>"; };
6464
E6F3F57C22D111CB003D86FA /* ContainerableRegisterTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContainerableRegisterTests.swift; sourceTree = "<group>"; };
6565
E6F3F57E22D11646003D86FA /* ContainerablePropertyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContainerablePropertyTests.swift; sourceTree = "<group>"; };
6666
E6F3F58022D117EE003D86FA /* ContainerableFormattedStringTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContainerableFormattedStringTests.swift; sourceTree = "<group>"; };
67+
E6F3F59522D3516D003D86FA /* ContainerableRecordRelationsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContainerableRecordRelationsTests.swift; sourceTree = "<group>"; };
68+
E6F3F59922D3783E003D86FA /* ContrainerableManualRegistrationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContrainerableManualRegistrationTests.swift; sourceTree = "<group>"; };
6769
/* End PBXFileReference section */
6870

6971
/* Begin PBXFrameworksBuildPhase section */
@@ -121,6 +123,8 @@
121123
isa = PBXGroup;
122124
children = (
123125
E676F71A22C94F2E00DC1282 /* SwiftInjectorTests.swift */,
126+
E6F3F59922D3783E003D86FA /* ContrainerableManualRegistrationTests.swift */,
127+
E6F3F59522D3516D003D86FA /* ContainerableRecordRelationsTests.swift */,
124128
E676F72A22C9511200DC1282 /* ContainerableMainTests.swift */,
125129
E6F3F57C22D111CB003D86FA /* ContainerableRegisterTests.swift */,
126130
E6F3F58022D117EE003D86FA /* ContainerableFormattedStringTests.swift */,
@@ -138,7 +142,6 @@
138142
E676F72622C94F4700DC1282 /* RootContainer.swift */,
139143
E6BF5C6222CD2A32009A9331 /* SILogger.swift */,
140144
E676F73022C954BB00DC1282 /* TestContainer.swift */,
141-
E6C8BEFE22CD592300D99B89 /* AutoRecursionContainer_2Parent.swift */,
142145
E676F73222C955B200DC1282 /* DIContainer.swift */,
143146
E676F72E22C9548B00DC1282 /* Container.swift */,
144147
E676F72822C94F6000DC1282 /* Containerable.swift */,
@@ -247,7 +250,6 @@
247250
isa = PBXSourcesBuildPhase;
248251
buildActionMask = 2147483647;
249252
files = (
250-
E6C8BEFF22CD592300D99B89 /* AutoRecursionContainer_2Parent.swift in Sources */,
251253
E676F73522C9688F00DC1282 /* TestClass.swift in Sources */,
252254
E676F73322C955B200DC1282 /* DIContainer.swift in Sources */,
253255
E676F70822C94F2B00DC1282 /* ViewController.swift in Sources */,
@@ -267,7 +269,9 @@
267269
E6F3F57F22D11646003D86FA /* ContainerablePropertyTests.swift in Sources */,
268270
E6BF5C6522CD45C0009A9331 /* RecursiveResolvingTests.swift in Sources */,
269271
E676F72B22C9511200DC1282 /* ContainerableMainTests.swift in Sources */,
272+
E6F3F59A22D3783E003D86FA /* ContrainerableManualRegistrationTests.swift in Sources */,
270273
E6F3F58122D117EE003D86FA /* ContainerableFormattedStringTests.swift in Sources */,
274+
E6F3F59622D3516D003D86FA /* ContainerableRecordRelationsTests.swift in Sources */,
271275
E6F3F57D22D111CB003D86FA /* ContainerableRegisterTests.swift in Sources */,
272276
E676F71B22C94F2E00DC1282 /* SwiftInjectorTests.swift in Sources */,
273277
E6F3F57B22D11056003D86FA /* ContainerablePropertyNameTests.swift in Sources */,

SwiftInjector/SwiftInjector/Source/AutoRecursionContainer_2Parent.swift

Lines changed: 0 additions & 15 deletions
This file was deleted.

SwiftInjector/SwiftInjector/Source/Containerable.swift

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,25 @@ protocol Containerable: class {
2323
}
2424

2525
struct ContainerObject {
26+
enum RegistrationType {
27+
case manual
28+
case automatic
29+
}
2630
var name: String? = nil
31+
var registrationType: RegistrationType
2732
var registration: Containerable.Service
2833
var object: Containerable.Object? = nil
29-
init(_ registration: @escaping Containerable.Service, name: String? = nil) {
34+
init(_ registration: @escaping Containerable.Service,
35+
name: String? = nil,
36+
registrationType: RegistrationType) {
3037
self.registration = registration
3138
self.name = name
39+
self.registrationType = registrationType
3240
}
3341
}
3442

43+
44+
//MARK: TODO: MOVE IT TO DIContainer.swift
3545
extension Containerable {
3646
private func resolveAny(typeString: String, name: String? = nil) -> Object? {
3747
let array: [ContainerObject]? = {
@@ -57,8 +67,10 @@ extension Containerable {
5767
}
5868

5969
services[typeString] = objects ?? []
60-
autoresolve(on: object)
61-
finishRegistrations()
70+
if array?.first?.registrationType == .automatic {
71+
autoresolve(on: object)
72+
finishRegistrations()
73+
}
6274

6375
return object
6476
} else {
@@ -100,7 +112,6 @@ extension Containerable {
100112
return
101113
}
102114
if let value = resolveAny(typeString: typeString) {
103-
print("I SETTED VALUE FOR \(typeString)")
104115
object_setIvar(object, ivar, value)
105116
}
106117
}
@@ -112,6 +123,8 @@ extension Containerable {
112123
return "\(Unmanaged.passUnretained(object).toOpaque())"
113124
}
114125

126+
127+
// MARK: *TODO: Unable to test*
115128
private func recordRelations(relationIn: RelationIn, relationOut: RelationOut) {
116129
if let relationsOut = relations[relationIn], !relationsOut.contains(relationOut) {
117130
var newRelationsOut = relationsOut
@@ -155,16 +168,18 @@ extension Containerable {
155168
}
156169

157170
// MARK: *TESTED*
158-
func register<T: Object>(_ registration: @escaping (() -> T), name: String? = nil) {
171+
func register<T: Object>(_ registration: @escaping (() -> T),
172+
name: String? = nil,
173+
registrationType: ContainerObject.RegistrationType = .automatic) {
159174
dispatchRegistrationGroup.enter()
160175
let object = registration()
161176
let key = String(describing: type(of: object))
162177
if let array = services[key] {
163178
var newArray = array
164-
newArray.append(ContainerObject(registration, name: name))
179+
newArray.append(ContainerObject(registration, name: name, registrationType: registrationType))
165180
services[key] = newArray
166181
} else {
167-
services[key] = [ContainerObject(registration, name: name)]
182+
services[key] = [ContainerObject(registration, name: name, registrationType: registrationType)]
168183
}
169184
dispatchRegistrationGroup.leave()
170185
}

SwiftInjector/SwiftInjector/Source/DIContainer.swift

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ class DIContainer: Container {
1616
self.register()
1717
}
1818

19-
final func register<T: Containerable.Object>(name: String? = nil, _ registration: @escaping (() -> T)) {
20-
parentContainer.register(registration, name: name)
19+
final func register<T: Containerable.Object>(registrationType: ContainerObject.RegistrationType = .automatic,
20+
name: String? = nil,
21+
_ registration: @escaping (() -> T)) {
22+
parentContainer.register(registration, name: name, registrationType: registrationType)
2123
}
2224

2325
final func resolve<T: Containerable.Object>(name: String? = nil) -> T? {
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
//
2+
// ContainerableRecordRelationsTests.swift
3+
// SwiftInjectorTests
4+
//
5+
// Created by Ghost on 08.07.2019.
6+
// Copyright © 2019 Ghost. All rights reserved.
7+
//
8+
9+
import XCTest
10+
@testable import SwiftInjector
11+
12+
import XCTest
13+
@testable import SwiftInjector
14+
15+
class ContainerableRecordRelationsTests: XCTestCase {
16+
override func setUp() {
17+
18+
}
19+
20+
func testUsualRelation() {
21+
// let containerable: Containerable = RootContainer()
22+
// class FirstClass {
23+
// var secondClass: SecondClass?
24+
// }
25+
//
26+
// class SecondClass {
27+
// }
28+
//
29+
// containerable.register ({ FirstClass() })
30+
// containerable.register ({ SecondClass() })
31+
// let _: FirstClass? = containerable.resolve()
32+
// let records = containerable.relations
33+
// XCTAssertNotNil(records["FirstClass"])
34+
}
35+
}
36+
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
//
2+
// ContrainerableManualRegistrationTests.swift
3+
// SwiftInjectorTests
4+
//
5+
// Created by Ghost on 08.07.2019.
6+
// Copyright © 2019 Ghost. All rights reserved.
7+
//
8+
9+
10+
11+
import XCTest
12+
@testable import SwiftInjector
13+
14+
class ContainerableManualRegistrationTests: XCTestCase {
15+
override func setUp() {
16+
17+
}
18+
19+
func testManualRegistrationSample() {
20+
let contaienrable: Containerable = RootContainer()
21+
contaienrable.register({ () -> ViewController in
22+
let vc = ViewController()
23+
vc.testClass = TestClass()
24+
return vc
25+
}, registrationType: .manual)
26+
27+
let vc: ViewController? = contaienrable.resolve()
28+
XCTAssertNotNil(vc)
29+
XCTAssertNotNil(vc?.testClass)
30+
let testClass: TestClass? = contaienrable.resolve()
31+
XCTAssertNil(testClass)
32+
}
33+
}
34+

0 commit comments

Comments
 (0)