@@ -39,6 +39,7 @@ import {
3939 ViewChildren ,
4040 ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR ,
4141} from '../../src/core' ;
42+ import { IDLE_SERVICE , IdleService , provideIdleServiceWith } from '../../src/defer/idle_service' ;
4243import { IdleScheduler } from '../../src/defer/idle_scheduler' ;
4344import { TimerScheduler } from '../../src/defer/timer_scheduler' ;
4445import { formatRuntimeErrorCode , RuntimeErrorCode } from '../../src/errors' ;
@@ -1814,8 +1815,31 @@ describe('@defer', () => {
18141815 } ,
18151816 } ;
18161817
1818+ @Injectable ( { providedIn : 'root' } )
1819+ class CustomIdleService implements IdleService {
1820+ private callbacks : Array < ( ( deadline ?: IdleDeadline ) => void ) | undefined > = [ ] ;
1821+
1822+ requestOnIdle ( callback : ( deadline ?: IdleDeadline ) => void ) : number {
1823+ return this . callbacks . push ( callback ) - 1 ;
1824+ }
1825+
1826+ cancelOnIdle ( id : number ) : void {
1827+ this . callbacks [ id ] = undefined ;
1828+ }
1829+
1830+ trigger ( ) : void {
1831+ for ( const callback of this . callbacks ) {
1832+ callback ?.( ) ;
1833+ }
1834+ this . callbacks . length = 0 ;
1835+ }
1836+ }
1837+
18171838 TestBed . configureTestingModule ( {
1818- providers : [ { provide : ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR , useValue : deferDepsInterceptor } ] ,
1839+ providers : [
1840+ { provide : ɵDEFER_BLOCK_DEPENDENCY_INTERCEPTOR , useValue : deferDepsInterceptor } ,
1841+ provideIdleServiceWith ( CustomIdleService ) ,
1842+ ] ,
18191843 } ) ;
18201844
18211845 clearDirectiveDefs ( RootCmp ) ;
@@ -1828,7 +1852,7 @@ describe('@defer', () => {
18281852 // Make sure loading function is not yet invoked.
18291853 expect ( loadingFnInvokedTimes ) . toBe ( 0 ) ;
18301854
1831- triggerIdleCallbacks ( ) ;
1855+ TestBed . inject ( CustomIdleService ) . trigger ( ) ;
18321856 await allPendingDynamicImports ( ) ;
18331857 fixture . detectChanges ( ) ;
18341858
@@ -4429,8 +4453,23 @@ describe('@defer', () => {
44294453
44304454describe ( 'IdleScheduler' , ( ) => {
44314455 let scheduler : IdleScheduler ;
4456+ let customIdleService : CustomIdleService ;
4457+
4458+ class CustomIdleService implements IdleService {
4459+ requestOnIdleSpy = jasmine . createSpy ( 'requestOnIdleFn' ) ;
4460+
4461+ requestOnIdle ( callback : ( deadline ?: IdleDeadline ) => void ) : number {
4462+ return this . requestOnIdleSpy ( callback ) ;
4463+ }
4464+
4465+ cancelOnIdle ( id : number ) : void { }
4466+ }
44324467
44334468 beforeEach ( ( ) => {
4469+ customIdleService = new CustomIdleService ( ) ;
4470+ TestBed . configureTestingModule ( {
4471+ providers : [ { provide : IDLE_SERVICE , useValue : customIdleService } ] ,
4472+ } ) ;
44344473 scheduler = TestBed . inject ( IdleScheduler ) ;
44354474 } ) ;
44364475
@@ -4442,13 +4481,11 @@ describe('IdleScheduler', () => {
44424481 let capturedCb : ( ( deadline : any ) => void ) | null = null ;
44434482 let ricCount = 0 ;
44444483
4445- scheduler . requestIdleCallbackFn = jasmine
4446- . createSpy ( 'requestIdleCallbackFn' )
4447- . and . callFake ( ( cb : any ) => {
4448- ricCount ++ ;
4449- capturedCb = cb ;
4450- return 100 + ricCount ;
4451- } ) ;
4484+ customIdleService . requestOnIdleSpy . and . callFake ( ( cb : any ) => {
4485+ ricCount ++ ;
4486+ capturedCb = cb ;
4487+ return 100 + ricCount ;
4488+ } ) ;
44524489
44534490 const cb1 = jasmine . createSpy ( 'cb1' ) ;
44544491 const cb2 = jasmine . createSpy ( 'cb2' ) ;
@@ -4479,13 +4516,11 @@ describe('IdleScheduler', () => {
44794516 let capturedCb : ( ( deadline : any ) => void ) | null = null ;
44804517 let ricCount = 0 ;
44814518
4482- scheduler . requestIdleCallbackFn = jasmine
4483- . createSpy ( 'requestIdleCallbackFn' )
4484- . and . callFake ( ( cb : any ) => {
4485- ricCount ++ ;
4486- capturedCb = cb ;
4487- return 100 + ricCount ;
4488- } ) ;
4519+ customIdleService . requestOnIdleSpy . and . callFake ( ( cb : any ) => {
4520+ ricCount ++ ;
4521+ capturedCb = cb ;
4522+ return 100 + ricCount ;
4523+ } ) ;
44894524
44904525 const cb1 = jasmine . createSpy ( 'cb1' ) ;
44914526 const cb2 = jasmine . createSpy ( 'cb2' ) ;
@@ -4540,13 +4575,11 @@ describe('IdleScheduler', () => {
45404575 let capturedCb : ( ( deadline : any ) => void ) | null = null ;
45414576 let ricCount = 0 ;
45424577
4543- scheduler . requestIdleCallbackFn = jasmine
4544- . createSpy ( 'requestIdleCallbackFn' )
4545- . and . callFake ( ( cb : any ) => {
4546- ricCount ++ ;
4547- capturedCb = cb ;
4548- return 100 + ricCount ;
4549- } ) ;
4578+ customIdleService . requestOnIdleSpy . and . callFake ( ( cb : any ) => {
4579+ ricCount ++ ;
4580+ capturedCb = cb ;
4581+ return 100 + ricCount ;
4582+ } ) ;
45504583
45514584 const cb1 = jasmine . createSpy ( 'cb1' ) ;
45524585 const cb2 = jasmine . createSpy ( 'cb2' ) ;
@@ -4577,13 +4610,11 @@ describe('IdleScheduler', () => {
45774610 let capturedCb : ( ( deadline : any ) => void ) | null = null ;
45784611 let ricCount = 0 ;
45794612
4580- scheduler . requestIdleCallbackFn = jasmine
4581- . createSpy ( 'requestIdleCallbackFn' )
4582- . and . callFake ( ( cb : any ) => {
4583- ricCount ++ ;
4584- capturedCb = cb ;
4585- return 100 + ricCount ;
4586- } ) ;
4613+ customIdleService . requestOnIdleSpy . and . callFake ( ( cb : any ) => {
4614+ ricCount ++ ;
4615+ capturedCb = cb ;
4616+ return 100 + ricCount ;
4617+ } ) ;
45874618
45884619 // Test with undefined (empty arguments, typical of setTimeout)
45894620 let cb1 = jasmine . createSpy ( 'cb1' ) ;
0 commit comments