6
6
import Swinject
7
7
import XCTest
8
8
9
- private protocol ParentResolver : Knit . Resolver { }
10
- private protocol ChildResolver : ParentResolver { }
11
- private protocol GrandChildResolver : ChildResolver { }
12
-
13
- extension Knit . Container : ParentResolver , ChildResolver , GrandChildResolver { }
9
+ private class ParentResolver : RealResolver { }
10
+ private class ChildResolver : ParentResolver { }
11
+ private class GrandChildResolver : ChildResolver { }
14
12
15
13
private protocol ServiceProtocol { }
16
14
@@ -87,7 +85,7 @@ final class ServiceCollectorTests: XCTestCase {
87
85
@MainActor
88
86
func test_registerIntoCollection( ) {
89
87
let swinjectContainer = Swinject . Container ( )
90
- let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( Any . self)
88
+ let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( ParentResolver . self)
91
89
container. _unwrappedSwinjectContainer ( ) . addBehavior ( ServiceCollector ( ) )
92
90
93
91
// Register some services into a collection
@@ -99,12 +97,12 @@ final class ServiceCollectorTests: XCTestCase {
99
97
container. registerIntoCollection ( CustomService . self) { _ in CustomService ( name: " Custom 2 " ) }
100
98
101
99
// Resolving each collection should produce the expected services
102
- let serviceProtocolCollection = container. resolveCollection ( ServiceProtocol . self)
100
+ let serviceProtocolCollection = container. resolver . resolveCollection ( ServiceProtocol . self)
103
101
XCTAssertEqual ( serviceProtocolCollection. entries. count, 2 )
104
102
XCTAssert ( serviceProtocolCollection. entries. first is ServiceA )
105
103
XCTAssert ( serviceProtocolCollection. entries. last is ServiceB )
106
104
107
- let customServiceCollection = container. resolveCollection ( CustomService . self)
105
+ let customServiceCollection = container. resolver . resolveCollection ( CustomService . self)
108
106
XCTAssertEqual (
109
107
customServiceCollection. entries. map ( \. name) ,
110
108
[ " Custom 1 " , " Custom 2 " ]
@@ -114,19 +112,19 @@ final class ServiceCollectorTests: XCTestCase {
114
112
@MainActor
115
113
func test_registerIntoCollection_emptyWithBehavior( ) {
116
114
let swinjectContainer = Swinject . Container ( )
117
- let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( Any . self)
115
+ let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( ParentResolver . self)
118
116
container. _unwrappedSwinjectContainer ( ) . addBehavior ( ServiceCollector ( ) )
119
117
120
- let collection = container. resolveCollection ( ServiceProtocol . self)
118
+ let collection = container. resolver . resolveCollection ( ServiceProtocol . self)
121
119
XCTAssertEqual ( collection. entries. count, 0 )
122
120
}
123
121
124
122
@MainActor
125
123
func test_registerIntoCollection_emptyWithoutBehavior( ) {
126
124
let swinjectContainer = Swinject . Container ( )
127
- let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( Any . self)
125
+ let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( ParentResolver . self)
128
126
129
- let collection = container. resolveCollection ( ServiceProtocol . self)
127
+ let collection = container. resolver . resolveCollection ( ServiceProtocol . self)
130
128
XCTAssertEqual ( collection. entries. count, 0 )
131
129
}
132
130
@@ -135,7 +133,7 @@ final class ServiceCollectorTests: XCTestCase {
135
133
@MainActor
136
134
func test_registerIntoCollection_doesntConflictWithArray( ) throws {
137
135
let swinjectContainer = Swinject . Container ( )
138
- let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( Any . self)
136
+ let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( ParentResolver . self)
139
137
container. _unwrappedSwinjectContainer ( ) . addBehavior ( ServiceCollector ( ) )
140
138
141
139
// Register A into a collection
@@ -145,7 +143,7 @@ final class ServiceCollectorTests: XCTestCase {
145
143
container. register ( [ ServiceProtocol ] . self) { _ in [ ServiceB ( ) ] }
146
144
147
145
// Resolving the collection should produce A
148
- let collection = container. resolveCollection ( ServiceProtocol . self)
146
+ let collection = container. resolver . resolveCollection ( ServiceProtocol . self)
149
147
XCTAssertEqual ( collection. entries. count, 1 )
150
148
XCTAssert ( collection. entries. first is ServiceA )
151
149
@@ -158,7 +156,7 @@ final class ServiceCollectorTests: XCTestCase {
158
156
@MainActor
159
157
func test_registerIntoCollection_doesntImplicitlyAggregateInstances( ) throws {
160
158
let swinjectContainer = Swinject . Container ( )
161
- let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( Any . self)
159
+ let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( ParentResolver . self)
162
160
container. _unwrappedSwinjectContainer ( ) . addBehavior ( ServiceCollector ( ) )
163
161
164
162
// Register A and B into a collection
@@ -169,7 +167,7 @@ final class ServiceCollectorTests: XCTestCase {
169
167
_ = container. register ( ServiceProtocol . self) { _ in ServiceB ( ) }
170
168
171
169
// Resolving the collection should produce A and B
172
- let collection = container. resolveCollection ( ServiceProtocol . self)
170
+ let collection = container. resolver . resolveCollection ( ServiceProtocol . self)
173
171
XCTAssertEqual ( collection. entries. count, 2 )
174
172
XCTAssert ( collection. entries. first is ServiceA )
175
173
XCTAssert ( collection. entries. last is ServiceB )
@@ -181,7 +179,7 @@ final class ServiceCollectorTests: XCTestCase {
181
179
@MainActor
182
180
func test_registerIntoCollection_allowsDuplicates( ) {
183
181
let swinjectContainer = Swinject . Container ( )
184
- let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( Any . self)
182
+ let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( ParentResolver . self)
185
183
container. _unwrappedSwinjectContainer ( ) . addBehavior ( ServiceCollector ( ) )
186
184
187
185
// Register some duplicate services
@@ -190,7 +188,7 @@ final class ServiceCollectorTests: XCTestCase {
190
188
_ = container. registerIntoCollection ( ServiceProtocol . self) { _ in CustomService ( name: " Car Repair " ) }
191
189
192
190
// Resolving the collection should produce all services
193
- let collection = container. resolveCollection ( ServiceProtocol . self)
191
+ let collection = container. resolver . resolveCollection ( ServiceProtocol . self)
194
192
XCTAssertEqual (
195
193
collection. entries. compactMap { ( $0 as? CustomService ) ? . name } ,
196
194
[ " Dry Cleaning " , " Car Repair " , " Car Repair " ]
@@ -202,7 +200,7 @@ final class ServiceCollectorTests: XCTestCase {
202
200
@MainActor
203
201
func test_registerIntoCollection_supportsTransientScopedObjects( ) throws {
204
202
let swinjectContainer = Swinject . Container ( )
205
- let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( Any . self)
203
+ let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( ParentResolver . self)
206
204
container. _unwrappedSwinjectContainer ( ) . addBehavior ( ServiceCollector ( ) )
207
205
208
206
// Register a service with the `transient` scope.
@@ -211,8 +209,8 @@ final class ServiceCollectorTests: XCTestCase {
211
209
. registerIntoCollection ( CustomService . self) { _ in CustomService ( name: " service " ) }
212
210
. inObjectScope ( . transient)
213
211
214
- let collection1 = container. resolveCollection ( CustomService . self)
215
- let collection2 = container. resolveCollection ( CustomService . self)
212
+ let collection1 = container. resolver . resolveCollection ( CustomService . self)
213
+ let collection2 = container. resolver . resolveCollection ( CustomService . self)
216
214
217
215
let instance1 = try XCTUnwrap ( collection1. entries. first)
218
216
let instance2 = try XCTUnwrap ( collection2. entries. first)
@@ -223,7 +221,7 @@ final class ServiceCollectorTests: XCTestCase {
223
221
@MainActor
224
222
func test_registerIntoCollection_supportsContainerScopedObjects( ) throws {
225
223
let swinjectContainer = Swinject . Container ( )
226
- let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( Any . self)
224
+ let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( ParentResolver . self)
227
225
container. _unwrappedSwinjectContainer ( ) . addBehavior ( ServiceCollector ( ) )
228
226
229
227
// Register a service with the `container` scope.
@@ -232,8 +230,8 @@ final class ServiceCollectorTests: XCTestCase {
232
230
. registerIntoCollection ( CustomService . self) { _ in CustomService ( name: " service " ) }
233
231
. inObjectScope ( . container)
234
232
235
- let collection1 = container. resolveCollection ( CustomService . self)
236
- let collection2 = container. resolveCollection ( CustomService . self)
233
+ let collection1 = container. resolver . resolveCollection ( CustomService . self)
234
+ let collection2 = container. resolver . resolveCollection ( CustomService . self)
237
235
238
236
let instance1 = try XCTUnwrap ( collection1. entries. first)
239
237
let instance2 = try XCTUnwrap ( collection2. entries. first)
@@ -244,7 +242,7 @@ final class ServiceCollectorTests: XCTestCase {
244
242
@MainActor
245
243
func test_registerIntoCollection_supportsWeakScopedObjects( ) throws {
246
244
let swinjectContainer = Swinject . Container ( )
247
- let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( Any . self)
245
+ let container = ContainerManager ( swinjectContainer: swinjectContainer) . register ( ParentResolver . self)
248
246
container. _unwrappedSwinjectContainer ( ) . addBehavior ( ServiceCollector ( ) )
249
247
250
248
// Register a service with the `weak` scope.
@@ -259,18 +257,18 @@ final class ServiceCollectorTests: XCTestCase {
259
257
. inObjectScope ( . weak)
260
258
261
259
// Resolve the initial instance
262
- var instance1 : CustomService ? = try XCTUnwrap ( container. resolveCollection ( CustomService . self) . entries. first)
260
+ var instance1 : CustomService ? = try XCTUnwrap ( container. resolver . resolveCollection ( CustomService . self) . entries. first)
263
261
XCTAssertEqual ( factoryCallCount, 1 )
264
262
265
263
// Resolving again shouldn't increase `factoryCallCount` since `instance1` is still retained.
266
- var instance2 : CustomService ? = try XCTUnwrap ( container. resolveCollection ( CustomService . self) . entries. first)
264
+ var instance2 : CustomService ? = try XCTUnwrap ( container. resolver . resolveCollection ( CustomService . self) . entries. first)
267
265
XCTAssertEqual ( factoryCallCount, 1 )
268
266
XCTAssert ( instance2 === instance1)
269
267
270
268
// Release our instances and resolve again. This time a new instance should be created.
271
269
instance1 = nil
272
270
instance2 = nil
273
- _ = container. resolveCollection ( CustomService . self)
271
+ _ = container. resolver . resolveCollection ( CustomService . self)
274
272
XCTAssertEqual ( factoryCallCount, 2 )
275
273
}
276
274
0 commit comments