`main()` function used to be needed to support dart, since dart Does not allow top level statements. Since we no longer use dart The need for `main()` has been removed. In preparation for `Basel` and standardized way of running tests we are removing `main()` PR Close #21053
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
/**
 | 
						|
 * @license
 | 
						|
 * Copyright Google Inc. All Rights Reserved.
 | 
						|
 *
 | 
						|
 * Use of this source code is governed by an MIT-style license that can be
 | 
						|
 * found in the LICENSE file at https://angular.io/license
 | 
						|
 */
 | 
						|
import {Injector} from '@angular/core';
 | 
						|
import {APP_INITIALIZER, ApplicationInitStatus} from '../src/application_init';
 | 
						|
import {TestBed, async, inject} from '../testing';
 | 
						|
 | 
						|
{
 | 
						|
  describe('ApplicationInitStatus', () => {
 | 
						|
    describe('no initializers', () => {
 | 
						|
 | 
						|
      it('should return true for `done`',
 | 
						|
         async(inject([ApplicationInitStatus], (status: ApplicationInitStatus) => {
 | 
						|
           (status as any).runInitializers();
 | 
						|
           expect(status.done).toBe(true);
 | 
						|
         })));
 | 
						|
 | 
						|
      it('should return a promise that resolves immediately for `donePromise`',
 | 
						|
         async(inject([ApplicationInitStatus], (status: ApplicationInitStatus) => {
 | 
						|
           (status as any).runInitializers();
 | 
						|
           status.donePromise.then(() => { expect(status.done).toBe(true); });
 | 
						|
         })));
 | 
						|
    });
 | 
						|
 | 
						|
    describe('with async initializers', () => {
 | 
						|
      let resolve: (result: any) => void;
 | 
						|
      let promise: Promise<any>;
 | 
						|
      let completerResolver = false;
 | 
						|
      beforeEach(() => {
 | 
						|
        let initializerFactory = (injector: Injector) => {
 | 
						|
          return () => {
 | 
						|
            const initStatus = injector.get(ApplicationInitStatus);
 | 
						|
            initStatus.donePromise.then(() => { expect(completerResolver).toBe(true); });
 | 
						|
          };
 | 
						|
        };
 | 
						|
        promise = new Promise((res) => { resolve = res; });
 | 
						|
        TestBed.configureTestingModule({
 | 
						|
          providers: [
 | 
						|
            {provide: APP_INITIALIZER, multi: true, useValue: () => promise},
 | 
						|
            {
 | 
						|
              provide: APP_INITIALIZER,
 | 
						|
              multi: true,
 | 
						|
              useFactory: initializerFactory,
 | 
						|
              deps: [Injector]
 | 
						|
            },
 | 
						|
          ]
 | 
						|
        });
 | 
						|
      });
 | 
						|
 | 
						|
      it('should update the status once all async initializers are done',
 | 
						|
         async(inject([ApplicationInitStatus], (status: ApplicationInitStatus) => {
 | 
						|
           (status as any).runInitializers();
 | 
						|
 | 
						|
           setTimeout(() => {
 | 
						|
             completerResolver = true;
 | 
						|
             resolve(null);
 | 
						|
           });
 | 
						|
 | 
						|
           expect(status.done).toBe(false);
 | 
						|
           status.donePromise.then(() => {
 | 
						|
             expect(status.done).toBe(true);
 | 
						|
             expect(completerResolver).toBe(true);
 | 
						|
           });
 | 
						|
         })));
 | 
						|
    });
 | 
						|
  });
 | 
						|
}
 |