@@ -93,8 +93,7 @@ describe('Provider', () => {
93
93
94
94
it ( 'does not throw if instance factory throws when registering a component with a pending promise' , ( ) => {
95
95
// create a pending promise
96
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
97
- provider . get ( ) ;
96
+ void provider . get ( ) ;
98
97
const component = getFakeComponent ( 'test' , ( ) => {
99
98
throw Error ( 'something went wrong!' ) ;
100
99
} ) ;
@@ -127,17 +126,34 @@ describe('Provider', () => {
127
126
128
127
expect ( ( instance as any ) . options ) . to . deep . equal ( options ) ;
129
128
} ) ;
129
+
130
+ it ( 'resolve pending promises created by Provider.get() with the same identifier' , ( ) => {
131
+ provider . setComponent (
132
+ getFakeComponent (
133
+ 'test' ,
134
+ ( ) => ( { test : true } ) ,
135
+ false ,
136
+ InstantiationMode . EXPLICIT
137
+ )
138
+ ) ;
139
+ const servicePromise = provider . get ( ) ;
140
+ expect ( ( provider as any ) . instances . size ) . to . equal ( 0 ) ;
141
+
142
+ provider . initialize ( ) ;
143
+ expect ( ( provider as any ) . instances . size ) . to . equal ( 1 ) ;
144
+ return expect ( servicePromise ) . to . eventually . deep . equal ( { test : true } ) ;
145
+ } ) ;
130
146
} ) ;
131
147
132
148
describe ( 'Provider (multipleInstances = false)' , ( ) => {
133
149
describe ( 'getImmediate()' , ( ) => {
134
- it ( 'throws if the service is not available ' , ( ) => {
150
+ it ( 'throws if component has not been registered ' , ( ) => {
135
151
expect ( provider . getImmediate . bind ( provider ) ) . to . throw (
136
152
'Service test is not available'
137
153
) ;
138
154
} ) ;
139
155
140
- it ( 'returns null if the service is not available with optional flag ' , ( ) => {
156
+ it ( 'returns null with the optional flag set if component has not been registered ' , ( ) => {
141
157
expect ( provider . getImmediate ( { optional : true } ) ) . to . equal ( null ) ;
142
158
} ) ;
143
159
@@ -186,8 +202,7 @@ describe('Provider', () => {
186
202
describe ( 'setComponent()' , ( ) => {
187
203
it ( 'instantiates the service if there is a pending promise and the service is eager' , ( ) => {
188
204
// create a pending promise
189
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
190
- provider . get ( ) ;
205
+ void provider . get ( ) ;
191
206
192
207
provider . setComponent (
193
208
getFakeComponent ( 'test' , ( ) => ( { } ) , false , InstantiationMode . EAGER )
@@ -197,8 +212,7 @@ describe('Provider', () => {
197
212
198
213
it ( 'instantiates the service if there is a pending promise and the service is NOT eager' , ( ) => {
199
214
// create a pending promise
200
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
201
- provider . get ( ) ;
215
+ void provider . get ( ) ;
202
216
203
217
provider . setComponent ( getFakeComponent ( 'test' , ( ) => ( { } ) ) ) ;
204
218
expect ( ( provider as any ) . instances . size ) . to . equal ( 1 ) ;
@@ -251,8 +265,7 @@ describe('Provider', () => {
251
265
)
252
266
) ;
253
267
254
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
255
- provider . delete ( ) ;
268
+ void provider . delete ( ) ;
256
269
257
270
expect ( deleteFake ) . to . have . been . called ;
258
271
} ) ;
@@ -274,8 +287,7 @@ describe('Provider', () => {
274
287
)
275
288
) ;
276
289
277
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
278
- provider . delete ( ) ;
290
+ void provider . delete ( ) ;
279
291
280
292
expect ( deleteFake ) . to . have . been . called ;
281
293
} ) ;
@@ -350,12 +362,10 @@ describe('Provider', () => {
350
362
351
363
describe ( 'setComponent()' , ( ) => {
352
364
it ( 'instantiates services for the pending promises for all instance identifiers' , async ( ) => {
353
- /* eslint-disable @typescript-eslint/no-floating-promises */
354
365
// create 3 promises for 3 different identifiers
355
- provider . get ( ) ;
356
- provider . get ( 'name1' ) ;
357
- provider . get ( 'name2' ) ;
358
- /* eslint-enable @typescript-eslint/no-floating-promises */
366
+ void provider . get ( ) ;
367
+ void provider . get ( 'name1' ) ;
368
+ void provider . get ( 'name2' ) ;
359
369
360
370
provider . setComponent (
361
371
getFakeComponent ( 'test' , ( ) => ( { test : true } ) , true )
@@ -378,8 +388,7 @@ describe('Provider', () => {
378
388
379
389
it ( `instantiates the default serviec if there are pending promises for other identifiers
380
390
but not for the default identifer and the service is eager` , ( ) => {
381
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
382
- provider . get ( 'name1' ) ;
391
+ void provider . get ( 'name1' ) ;
383
392
provider . setComponent (
384
393
getFakeComponent (
385
394
'test' ,
@@ -415,8 +424,7 @@ describe('Provider', () => {
415
424
provider . getImmediate ( { identifier : 'instance1' } ) ;
416
425
provider . getImmediate ( { identifier : 'instance2' } ) ;
417
426
418
- // eslint-disable-next-line @typescript-eslint/no-floating-promises
419
- provider . delete ( ) ;
427
+ void provider . delete ( ) ;
420
428
421
429
expect ( deleteFakes . length ) . to . equal ( 2 ) ;
422
430
for ( const f of deleteFakes ) {
@@ -478,4 +486,47 @@ describe('Provider', () => {
478
486
} ) ;
479
487
} ) ;
480
488
} ) ;
489
+
490
+ describe ( 'InstantiationMode: EXPLICIT' , ( ) => {
491
+ it ( 'setComponent() does NOT auto-initialize the service' , ( ) => {
492
+ // create a pending promise which should trigger initialization if instantiationMode is non-EXPLICIT
493
+ void provider . get ( ) ;
494
+
495
+ provider . setComponent (
496
+ getFakeComponent ( 'test' , ( ) => ( { } ) , false , InstantiationMode . EXPLICIT )
497
+ ) ;
498
+ expect ( ( provider as any ) . instances . size ) . to . equal ( 0 ) ;
499
+ } ) ;
500
+
501
+ it ( 'get() does NOT auto-initialize the service' , ( ) => {
502
+ provider . setComponent (
503
+ getFakeComponent ( 'test' , ( ) => ( { } ) , false , InstantiationMode . EXPLICIT )
504
+ ) ;
505
+ expect ( ( provider as any ) . instances . size ) . to . equal ( 0 ) ;
506
+ void provider . get ( ) ;
507
+ expect ( ( provider as any ) . instances . size ) . to . equal ( 0 ) ;
508
+ } ) ;
509
+
510
+ it ( 'getImmediate() does NOT auto-initialize the service and throws if the service has not been initialized' , ( ) => {
511
+ provider . setComponent (
512
+ getFakeComponent ( 'test' , ( ) => ( { } ) , false , InstantiationMode . EXPLICIT )
513
+ ) ;
514
+ expect ( ( provider as any ) . instances . size ) . to . equal ( 0 ) ;
515
+
516
+ expect ( ( ) => provider . getImmediate ( ) ) . to . throw (
517
+ 'Service test is not available'
518
+ ) ;
519
+ expect ( ( provider as any ) . instances . size ) . to . equal ( 0 ) ;
520
+ } ) ;
521
+
522
+ it ( 'getImmediate() does NOT auto-initialize the service and returns null if the optional flag is set' , ( ) => {
523
+ provider . setComponent (
524
+ getFakeComponent ( 'test' , ( ) => ( { } ) , false , InstantiationMode . EXPLICIT )
525
+ ) ;
526
+ expect ( ( provider as any ) . instances . size ) . to . equal ( 0 ) ;
527
+
528
+ expect ( provider . getImmediate ( { optional : true } ) ) . to . equal ( null ) ;
529
+ expect ( ( provider as any ) . instances . size ) . to . equal ( 0 ) ;
530
+ } ) ;
531
+ } ) ;
481
532
} ) ;
0 commit comments