@@ -56,27 +56,29 @@ QUnit.test('Throw exception when trying to inject `type:thing` on all type(s)',
56
56
} ) ;
57
57
58
58
QUnit . test ( 'The registry can take a hook to resolve factories lazily' , function ( ) {
59
- var registry = new Registry ( ) ;
60
- var PostController = factory ( ) ;
61
-
62
- registry . resolver = function ( fullName ) {
63
- if ( fullName === 'controller:post' ) {
64
- return PostController ;
59
+ let PostController = factory ( ) ;
60
+ let resolver = {
61
+ resolve ( fullName ) {
62
+ if ( fullName === 'controller:post' ) {
63
+ return PostController ;
64
+ }
65
65
}
66
66
} ;
67
+ let registry = new Registry ( { resolver } ) ;
67
68
68
69
strictEqual ( registry . resolve ( 'controller:post' ) , PostController , 'The correct factory was provided' ) ;
69
70
} ) ;
70
71
71
72
QUnit . test ( 'The registry respects the resolver hook for `has`' , function ( ) {
72
- var registry = new Registry ( ) ;
73
- var PostController = factory ( ) ;
74
-
75
- registry . resolver = function ( fullName ) {
76
- if ( fullName === 'controller:post' ) {
77
- return PostController ;
73
+ let PostController = factory ( ) ;
74
+ let resolver = {
75
+ resolve ( fullName ) {
76
+ if ( fullName === 'controller:post' ) {
77
+ return PostController ;
78
+ }
78
79
}
79
80
} ;
81
+ let registry = new Registry ( { resolver } ) ;
80
82
81
83
ok ( registry . has ( 'controller:post' ) , 'the `has` method uses the resolver hook' ) ;
82
84
} ) ;
@@ -196,14 +198,18 @@ QUnit.test('once resolved, always return the same result', function() {
196
198
197
199
var registry = new Registry ( ) ;
198
200
199
- registry . resolver = function ( ) {
200
- return 'bar' ;
201
+ registry . resolver = {
202
+ resolve ( ) {
203
+ return 'bar' ;
204
+ }
201
205
} ;
202
206
203
207
var Bar = registry . resolve ( 'models:bar' ) ;
204
208
205
- registry . resolver = function ( ) {
206
- return 'not bar' ;
209
+ registry . resolver = {
210
+ resolve ( ) {
211
+ return 'not bar' ;
212
+ }
207
213
} ;
208
214
209
215
equal ( registry . resolve ( 'models:bar' ) , Bar ) ;
@@ -213,9 +219,12 @@ QUnit.test('factory resolves are cached', function() {
213
219
var registry = new Registry ( ) ;
214
220
var PostController = factory ( ) ;
215
221
var resolveWasCalled = [ ] ;
216
- registry . resolver = function ( fullName ) {
217
- resolveWasCalled . push ( fullName ) ;
218
- return PostController ;
222
+
223
+ registry . resolver = {
224
+ resolve ( fullName ) {
225
+ resolveWasCalled . push ( fullName ) ;
226
+ return PostController ;
227
+ }
219
228
} ;
220
229
221
230
deepEqual ( resolveWasCalled , [ ] ) ;
@@ -230,9 +239,12 @@ QUnit.test('factory for non extendables (MODEL) resolves are cached', function()
230
239
var registry = new Registry ( ) ;
231
240
var PostController = factory ( ) ;
232
241
var resolveWasCalled = [ ] ;
233
- registry . resolver = function ( fullName ) {
234
- resolveWasCalled . push ( fullName ) ;
235
- return PostController ;
242
+
243
+ registry . resolver = {
244
+ resolve ( fullName ) {
245
+ resolveWasCalled . push ( fullName ) ;
246
+ return PostController ;
247
+ }
236
248
} ;
237
249
238
250
deepEqual ( resolveWasCalled , [ ] ) ;
@@ -247,9 +259,12 @@ QUnit.test('factory for non extendables resolves are cached', function() {
247
259
var registry = new Registry ( ) ;
248
260
var PostController = { } ;
249
261
var resolveWasCalled = [ ] ;
250
- registry . resolver = function ( fullName ) {
251
- resolveWasCalled . push ( fullName ) ;
252
- return PostController ;
262
+
263
+ registry . resolver = {
264
+ resolve ( fullName ) {
265
+ resolveWasCalled . push ( fullName ) ;
266
+ return PostController ;
267
+ }
253
268
} ;
254
269
255
270
deepEqual ( resolveWasCalled , [ ] ) ;
@@ -271,6 +286,84 @@ QUnit.test('registry.container creates a container', function() {
271
286
ok ( postController instanceof PostController , 'The lookup is an instance of the registered factory' ) ;
272
287
} ) ;
273
288
289
+ QUnit . test ( '`describe` will be handled by the resolver, then by the fallback registry, if available' , function ( ) {
290
+ let fallback = {
291
+ describe ( fullName ) {
292
+ return `${ fullName } -fallback` ;
293
+ }
294
+ } ;
295
+
296
+ let resolver = {
297
+ lookupDescription ( fullName ) {
298
+ return `${ fullName } -resolver` ;
299
+ }
300
+ } ;
301
+
302
+ let registry = new Registry ( { fallback, resolver } ) ;
303
+
304
+ equal ( registry . describe ( 'controller:post' ) , 'controller:post-resolver' , '`describe` handled by the resolver first.' ) ;
305
+
306
+ registry . resolver = null ;
307
+
308
+ equal ( registry . describe ( 'controller:post' ) , 'controller:post-fallback' , '`describe` handled by fallback registry next.' ) ;
309
+
310
+ registry . fallback = null ;
311
+
312
+ equal ( registry . describe ( 'controller:post' ) , 'controller:post' , '`describe` by default returns argument.' ) ;
313
+ } ) ;
314
+
315
+ QUnit . test ( '`normalizeFullName` will be handled by the resolver, then by the fallback registry, if available' , function ( ) {
316
+ let fallback = {
317
+ normalizeFullName ( fullName ) {
318
+ return `${ fullName } -fallback` ;
319
+ }
320
+ } ;
321
+
322
+ let resolver = {
323
+ normalize ( fullName ) {
324
+ return `${ fullName } -resolver` ;
325
+ }
326
+ } ;
327
+
328
+ let registry = new Registry ( { fallback, resolver } ) ;
329
+
330
+ equal ( registry . normalizeFullName ( 'controller:post' ) , 'controller:post-resolver' , '`normalizeFullName` handled by the resolver first.' ) ;
331
+
332
+ registry . resolver = null ;
333
+
334
+ equal ( registry . normalizeFullName ( 'controller:post' ) , 'controller:post-fallback' , '`normalizeFullName` handled by fallback registry next.' ) ;
335
+
336
+ registry . fallback = null ;
337
+
338
+ equal ( registry . normalizeFullName ( 'controller:post' ) , 'controller:post' , '`normalizeFullName` by default returns argument.' ) ;
339
+ } ) ;
340
+
341
+ QUnit . test ( '`makeToString` will be handled by the resolver, then by the fallback registry, if available' , function ( ) {
342
+ let fallback = {
343
+ makeToString ( fullName ) {
344
+ return `${ fullName } -fallback` ;
345
+ }
346
+ } ;
347
+
348
+ let resolver = {
349
+ makeToString ( fullName ) {
350
+ return `${ fullName } -resolver` ;
351
+ }
352
+ } ;
353
+
354
+ let registry = new Registry ( { fallback, resolver } ) ;
355
+
356
+ equal ( registry . makeToString ( 'controller:post' ) , 'controller:post-resolver' , '`makeToString` handled by the resolver first.' ) ;
357
+
358
+ registry . resolver = null ;
359
+
360
+ equal ( registry . makeToString ( 'controller:post' ) , 'controller:post-fallback' , '`makeToString` handled by fallback registry next.' ) ;
361
+
362
+ registry . fallback = null ;
363
+
364
+ equal ( registry . makeToString ( 'controller:post' ) , 'controller:post' , '`makeToString` by default returns argument.' ) ;
365
+ } ) ;
366
+
274
367
QUnit . test ( '`resolve` can be handled by a fallback registry' , function ( ) {
275
368
var fallback = new Registry ( ) ;
276
369
@@ -375,12 +468,13 @@ QUnit.test('`knownForType` includes fallback registry results', function() {
375
468
QUnit . test ( '`knownForType` is called on the resolver if present' , function ( ) {
376
469
expect ( 3 ) ;
377
470
378
- function resolver ( ) { }
379
- resolver . knownForType = function ( type ) {
380
- ok ( true , 'knownForType called on the resolver' ) ;
381
- equal ( type , 'foo' , 'the type was passed through' ) ;
471
+ let resolver = {
472
+ knownForType ( type ) {
473
+ ok ( true , 'knownForType called on the resolver' ) ;
474
+ equal ( type , 'foo' , 'the type was passed through' ) ;
382
475
383
- return { 'foo:yorp' : true } ;
476
+ return { 'foo:yorp' : true } ;
477
+ }
384
478
} ;
385
479
386
480
var registry = new Registry ( {
@@ -395,3 +489,19 @@ QUnit.test('`knownForType` is called on the resolver if present', function() {
395
489
'foo:bar-baz' : true
396
490
} ) ;
397
491
} ) ;
492
+
493
+ QUnit . test ( 'A registry can be created with a deprecated `resolver` function instead of an object' , function ( ) {
494
+ expect ( 2 ) ;
495
+
496
+ let registry ;
497
+
498
+ expectDeprecation ( function ( ) {
499
+ registry = new Registry ( {
500
+ resolver ( fullName ) {
501
+ return `${ fullName } -resolved` ;
502
+ }
503
+ } ) ;
504
+ } , 'Passing a `resolver` function into a Registry is deprecated. Please pass in a Resolver object with a `resolve` method.' ) ;
505
+
506
+ equal ( registry . resolve ( 'foo:bar' ) , 'foo:bar-resolved' , '`resolve` still calls the deprecated function' ) ;
507
+ } ) ;
0 commit comments