2016-06-23 09:47:54 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								/ * *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 *  @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
 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								 * / 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-05 20:24:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { APP_INITIALIZER ,  CUSTOM_ELEMENTS_SCHEMA ,  Compiler ,  Component ,  Directive ,  ErrorHandler ,  Inject ,  Input ,  LOCALE_ID ,  NgModule ,  OnDestroy ,  PLATFORM_INITIALIZER ,  Pipe ,  Provider ,  VERSION ,  createPlatformFactory }  from  '@angular/core' ;  
						 
					
						
							
								
									
										
										
										
											2016-08-12 14:15:37 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { ApplicationRef ,  destroyPlatform }  from  '@angular/core/src/application_ref' ;  
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { Console }  from  '@angular/core/src/console' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { ComponentRef }  from  '@angular/core/src/linker/component_factory' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { Testability ,  TestabilityRegistry }  from  '@angular/core/src/testability/testability' ;  
						 
					
						
							
								
									
										
										
										
											2017-01-05 20:24:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { AsyncTestCompleter ,  Log ,  afterEach ,  beforeEach ,  beforeEachProviders ,  describe ,  inject ,  it }  from  '@angular/core/testing/testing_internal' ;  
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { BrowserModule }  from  '@angular/platform-browser' ;  
						 
					
						
							
								
									
										
										
										
											2016-08-16 11:15:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { platformBrowserDynamic }  from  '@angular/platform-browser-dynamic' ;  
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { getDOM }  from  '@angular/platform-browser/src/dom/dom_adapter' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  { DOCUMENT }  from  '@angular/platform-browser/src/dom/dom_tokens' ;  
						 
					
						
							
								
									
										
										
										
											2016-07-22 09:20:51 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { expect }  from  '@angular/platform-browser/testing/matchers' ;  
						 
					
						
							
								
									
										
										
										
											2016-08-16 11:15:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  { stringify }  from  '../../src/facade/lang' ;  
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  '{{greeting}} world!' } )  
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  HelloRootCmp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  greeting : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor ( )  {  this . greeting  =  'hello' ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  'before: <ng-content></ng-content> after: done' } )  
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  HelloRootCmpContent  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor ( )  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app-2' ,  template :  '{{greeting}} world, again!' } )  
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  HelloRootCmp2  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  greeting : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor ( )  {  this . greeting  =  'hello' ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  '' } )  
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  HelloRootCmp3  {  
						 
					
						
							
								
									
										
										
										
											2016-06-08 15:45:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  appBinding : any  /** TODO #9100 */ ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  constructor ( @Inject ( 'appBinding' )  appBinding : any  /** TODO #9100 */ )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this . appBinding  =  appBinding ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  '' } )  
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class  HelloRootCmp4  {  
						 
					
						
							
								
									
										
										
										
											2016-06-08 15:45:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  appRef : any  /** TODO #9100 */ ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  constructor ( @Inject ( ApplicationRef )  appRef : ApplicationRef )  {  this . appRef  =  appRef ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  HelloRootMissingTemplate  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@Directive ( { selector :  'hello-app' } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  HelloRootDirectiveIsNotCmp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-03-08 13:36:48 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  '' } )  
						 
					
						
							
								
									
										
										
										
											2015-11-10 15:42:22 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  HelloOnDestroyTickCmp  implements  OnDestroy  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  appRef : ApplicationRef ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  constructor ( @Inject ( ApplicationRef )  appRef : ApplicationRef )  {  this . appRef  =  appRef ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 15:42:22 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												refactor(lifecycle): prefix lifecycle methods with "ng"
BREAKING CHANGE:
Previously, components that would implement lifecycle interfaces would include methods
like "onChanges" or "afterViewInit." Given that components were at risk of using such
names without realizing that Angular would call the methods at different points of
the component lifecycle. This change adds an "ng" prefix to all lifecycle hook methods,
far reducing the risk of an accidental name collision.
To fix, just rename these methods:
 * onInit
 * onDestroy
 * doCheck
 * onChanges
 * afterContentInit
 * afterContentChecked
 * afterViewInit
 * afterViewChecked
 * _Router Hooks_
 * onActivate
 * onReuse
 * onDeactivate
 * canReuse
 * canDeactivate
To:
 * ngOnInit,
 * ngOnDestroy,
 * ngDoCheck,
 * ngOnChanges,
 * ngAfterContentInit,
 * ngAfterContentChecked,
 * ngAfterViewInit,
 * ngAfterViewChecked
 * _Router Hooks_
 * routerOnActivate
 * routerOnReuse
 * routerOnDeactivate
 * routerCanReuse
 * routerCanDeactivate
The names of lifecycle interfaces and enums have not changed, though interfaces
have been updated to reflect the new method names.
Closes #5036
											 
										 
										
											2015-11-16 17:04:36 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  ngOnDestroy ( ) :  void  {  this . appRef . tick ( ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 15:42:22 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(browser): use AppModules for bootstrap in the browser
This introduces the `BrowserModule` to be used for long form
bootstrap and offline compile bootstrap:
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {bootstrapModuleFactory} from ‘@angular/platform-browser’;
bootstrapModuleFactory(MyModuleNgFactory);
// runtime compile long form
import {bootstrapModule} from ‘@angular/platform-browser-dynamic’;
bootstrapModule(MyModule);
```
The short form, `bootstrap(...)`, can now creates a module on the fly,
given `directives`, `pipes, `providers`, `precompile` and `modules`
properties.
Related changes:
- make `SanitizationService`, `SecurityContext` public in `@angular/core` so that the offline compiler can resolve the token
- move `AnimationDriver` to `platform-browser` and make it
  public so that the offline compiler can resolve the token
BREAKING CHANGES:
- short form bootstrap does no longer allow
  to inject compiler internals (i.e. everything 
  from `@angular/compiler). Inject `Compiler` instead.
  To provide custom providers for the compiler,
  create a custom compiler via `browserCompiler({providers: [...]})`
  and pass that into the `bootstrap` method.
											 
										 
										
											2016-06-30 13:07:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  templateUrl :  './sometemplate.html' } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  HelloUrlCmp  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  greeting  =  'hello' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Directive ( { selector :  '[someDir]' ,  host :  { '[title]' :  'someDir' } } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  SomeDirective  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  @Input ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  someDir : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@Pipe ( { name :  'somePipe' } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  SomePipe  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  transform ( value : string ) :  any  {  return  ` transformed  ${ value } ` ;  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  ` <div  [someDir]="'someValue' | somePipe"></div> ` } )  
						 
					
						
							
								
									
										
											 
										
											
												feat(browser): use AppModules for bootstrap in the browser
This introduces the `BrowserModule` to be used for long form
bootstrap and offline compile bootstrap:
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {bootstrapModuleFactory} from ‘@angular/platform-browser’;
bootstrapModuleFactory(MyModuleNgFactory);
// runtime compile long form
import {bootstrapModule} from ‘@angular/platform-browser-dynamic’;
bootstrapModule(MyModule);
```
The short form, `bootstrap(...)`, can now creates a module on the fly,
given `directives`, `pipes, `providers`, `precompile` and `modules`
properties.
Related changes:
- make `SanitizationService`, `SecurityContext` public in `@angular/core` so that the offline compiler can resolve the token
- move `AnimationDriver` to `platform-browser` and make it
  public so that the offline compiler can resolve the token
BREAKING CHANGES:
- short form bootstrap does no longer allow
  to inject compiler internals (i.e. everything 
  from `@angular/compiler). Inject `Compiler` instead.
  To provide custom providers for the compiler,
  create a custom compiler via `browserCompiler({providers: [...]})`
  and pass that into the `bootstrap` method.
											 
										 
										
											2016-06-30 13:07:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  HelloCmpUsingPlatformDirectiveAndPipe  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  show : boolean  =  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-25 03:02:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								@Component ( { selector :  'hello-app' ,  template :  '<some-el [someProp]="true">hello world!</some-el>' } )  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  HelloCmpUsingCustomElement  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-25 00:50:16 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  MockConsole  {  
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  res : any [ ]  =  [ ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-25 00:50:16 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  error ( s : any ) :  void  {  this . res . push ( s ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-23 18:00:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-12-15 08:34:44 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  DummyConsole  implements  Console  {  
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  public  warnings : string [ ]  =  [ ] ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  log ( message : string )  { } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  warn ( message : string )  {  this . warnings . push ( message ) ;  } 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-15 08:34:44 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 11:15:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  TestModule  { }  
						 
					
						
							
								
									
										
										
										
											2017-01-05 20:24:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								function  bootstrap (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    cmpType : any ,  providers : Provider [ ]  =  [ ] ,  platformProviders : Provider [ ]  =  [ ] ) :  Promise < any >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 11:15:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  @NgModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    imports :  [ BrowserModule ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    declarations :  [ cmpType ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    bootstrap :  [ cmpType ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    providers : providers , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    schemas :  [ CUSTOM_ELEMENTS_SCHEMA ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  class  TestModule  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
									
										
										
										
											2017-01-05 20:24:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  platformBrowserDynamic ( platformProviders ) . bootstrapModule ( TestModule ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 11:15:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								export  function  main() {  
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  let  fakeDoc : any  /** TODO #9100 */ ,  el : any  /** TODO #9100 */ ,  el2 : any  /** TODO #9100 */ , 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-24 13:39:44 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      testProviders : Provider [ ] ,  lightDom : any  /** TODO #9100 */ ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  describe ( 'bootstrap factory method' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    let  compilerConsole : DummyConsole ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-23 17:10:22 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    beforeEachProviders ( ( )  = >  {  return  [ Log ] ;  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-06-24 13:46:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    beforeEach ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-12 14:15:37 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      destroyPlatform ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-04-14 14:52:35 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 17:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      fakeDoc  =  getDOM ( ) . createHtmlDocument ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      el  =  getDOM ( ) . createElement ( 'hello-app' ,  fakeDoc ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      el2  =  getDOM ( ) . createElement ( 'hello-app-2' ,  fakeDoc ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      lightDom  =  getDOM ( ) . createElement ( 'light-dom-el' ,  fakeDoc ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      getDOM ( ) . appendChild ( fakeDoc . body ,  el ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      getDOM ( ) . appendChild ( fakeDoc . body ,  el2 ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      getDOM ( ) . appendChild ( el ,  lightDom ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      getDOM ( ) . setText ( lightDom ,  'loading' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      compilerConsole  =  new  DummyConsole ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-12-15 08:34:44 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      testProviders  = 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-07 11:57:11 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          [ { provide : DOCUMENT ,  useValue : fakeDoc } ,  { provide : Console ,  useValue : compilerConsole } ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-06-24 13:46:39 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-12 14:15:37 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    afterEach ( destroyPlatform ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 09:18:37 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-10 14:07:30 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should throw if bootstrapped Directive is not a Component' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( done : AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         const  logger  =  new  MockConsole ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         const  errorHandler  =  new  ErrorHandler ( false ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-10 14:07:30 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         errorHandler . _console  =  logger  as  any ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         bootstrap ( HelloRootDirectiveIsNotCmp ,  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           { provide : ErrorHandler ,  useValue : errorHandler } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         ] ) . catch ( ( e )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( e . message ) . toBe ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               ` Could not compile ' ${ stringify ( HelloRootDirectiveIsNotCmp ) } ' because it is not a component. ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           done . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should throw if no element is found' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         const  logger  =  new  MockConsole ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         const  errorHandler  =  new  ErrorHandler ( false ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-25 00:50:16 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         errorHandler . _console  =  logger  as  any ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 11:15:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         bootstrap ( HelloRootCmp ,  [ 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-25 00:50:16 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           { provide : ErrorHandler ,  useValue : errorHandler } 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 11:15:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         ] ) . then ( null ,  ( reason )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								           expect ( reason . message ) . toContain ( 'The selector "hello-app" did not match any elements' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-04-28 17:50:03 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    if  ( getDOM ( ) . supportsDOMEvents ( ) )  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 14:24:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should forward the error to promise when bootstrap fails' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  logger  =  new  MockConsole ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           const  errorHandler  =  new  ErrorHandler ( false ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-25 00:50:16 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           errorHandler . _console  =  logger  as  any ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 14:24:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  refPromise  = 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-25 00:50:16 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               bootstrap ( HelloRootCmp ,  [ { provide : ErrorHandler ,  useValue : errorHandler } ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 15:53:34 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           refPromise . then ( null ,  ( reason : any )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-02-25 14:24:17 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             expect ( reason . message ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 . toContain ( 'The selector "hello-app" did not match any elements' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      it ( 'should invoke the default exception handler when bootstrap fails' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  logger  =  new  MockConsole ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           const  errorHandler  =  new  ErrorHandler ( false ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-25 00:50:16 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           errorHandler . _console  =  logger  as  any ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  refPromise  = 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-25 00:50:16 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               bootstrap ( HelloRootCmp ,  [ { provide : ErrorHandler ,  useValue : errorHandler } ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 15:53:34 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           refPromise . then ( null ,  ( reason )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             expect ( logger . res . join ( '' ) ) 
							 
						 
					
						
							
								
									
										
										
										
											2015-07-27 15:47:42 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								                 . toContain ( 'The selector "hello-app" did not match any elements' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    it ( 'should create an injector promise' ,  ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      const  refPromise  =  bootstrap ( HelloRootCmp ,  testProviders ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      expect ( refPromise ) . not . toBe ( null ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should display hello world' ,  inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         const  refPromise  =  bootstrap ( HelloRootCmp ,  testProviders ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								         refPromise . then ( ( ref )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( el ) . toHaveText ( 'hello world!' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-12-06 16:21:07 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( el . getAttribute ( 'ng-version' ) ) . toEqual ( VERSION . full ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 13:34:28 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should throw a descriptive error if BrowserModule is installed again via a lazily loaded module' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         @NgModule ( { imports :  [ BrowserModule ] } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         class  AsyncModule  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         bootstrap ( HelloRootCmp ,  testProviders ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             . then ( ( ref : ComponentRef < HelloRootCmp > )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               const  compiler : Compiler  =  ref . injector . get ( Compiler ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-18 13:34:28 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               return  compiler . compileModuleAsync ( AsyncModule ) . then ( factory  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                 expect ( ( )  = >  factory . create ( ref . injector ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                     . toThrowError ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                         ` BrowserModule has already been loaded. If you need access to common directives such as NgIf and NgFor from a lazy loaded module, import CommonModule instead. ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								               } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             . then ( ( )  = >  async . done ( ) ,  err  = >  async . fail ( err ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should support multiple calls to bootstrap' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         const  refPromise1  =  bootstrap ( HelloRootCmp ,  testProviders ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         const  refPromise2  =  bootstrap ( HelloRootCmp2 ,  testProviders ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 15:53:34 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         Promise . all ( [ refPromise1 ,  refPromise2 ] ) . then ( ( refs )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( el ) . toHaveText ( 'hello world!' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( el2 ) . toHaveText ( 'hello world, again!' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-13 11:21:16 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 15:42:22 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should not crash if change detection is invoked when the root component is disposed' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         bootstrap ( HelloOnDestroyTickCmp ,  testProviders ) . then ( ( ref )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( ( )  = >  ref . destroy ( ) ) . not . toThrow ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 15:42:22 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 10:40:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should unregister change detectors when components are disposed' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         bootstrap ( HelloRootCmp ,  testProviders ) . then ( ( ref )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           const  appRef  =  ref . injector . get ( ApplicationRef ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           ref . destroy ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( ( )  = >  appRef . tick ( ) ) . not . toThrow ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-10 10:40:33 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should make the provided bindings available to the application component' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         const  refPromise  =  bootstrap ( 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             HelloRootCmp3 ,  [ testProviders ,  { provide :  'appBinding' ,  useValue :  'BoundValue' } ] ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         refPromise . then ( ( ref )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 11:15:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( ref . injector . get ( 'appBinding' ) ) . toEqual ( 'BoundValue' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2017-01-05 20:24:37 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should not override locale provided during bootstrap' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         const  refPromise  = 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             bootstrap ( HelloRootCmp ,  [ testProviders ] ,  [ { provide : LOCALE_ID ,  useValue :  'fr-FR' } ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         refPromise . then ( ref  = >  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( ref . injector . get ( LOCALE_ID ) ) . toEqual ( 'fr-FR' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should avoid cyclic dependencies when root component requires Lifecycle through DI' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         const  refPromise  =  bootstrap ( HelloRootCmp4 ,  testProviders ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         refPromise . then ( ( ref )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-16 11:15:01 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  appRef  =  ref . injector . get ( ApplicationRef ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           expect ( appRef ) . toBeDefined ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should run platform initializers' , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       inject ( [ Log ,  AsyncTestCompleter ] ,  ( log : Log ,  async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         const  p  =  createPlatformFactory ( platformBrowserDynamic ,  'someName' ,  [ 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           { provide : PLATFORM_INITIALIZER ,  useValue : log.fn ( 'platform_init1' ) ,  multi : true } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           { provide : PLATFORM_INITIALIZER ,  useValue : log.fn ( 'platform_init2' ) ,  multi : true } 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         ] ) ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         @NgModule ( { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           imports :  [ BrowserModule ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           providers :  [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             { provide : APP_INITIALIZER ,  useValue : log.fn ( 'app_init1' ) ,  multi : true } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             { provide : APP_INITIALIZER ,  useValue : log.fn ( 'app_init2' ) ,  multi : true } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         class  SomeModule  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 06:54:08 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           ngDoBootstrap() { } 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         expect ( log . result ( ) ) . toEqual ( 'platform_init1; platform_init2' ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 09:18:37 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         log . clear ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-26 05:21:19 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         p . bootstrapModule ( SomeModule ) . then ( ( )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-18 03:50:31 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( log . result ( ) ) . toEqual ( 'app_init1; app_init2' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-11-18 09:18:37 -08:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    it ( 'should register each application with the testability registry' , 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-09 11:04:15 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								       inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         const  refPromise1 : Promise < ComponentRef < any > >  =  bootstrap ( HelloRootCmp ,  testProviders ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         const  refPromise2 : Promise < ComponentRef < any > >  =  bootstrap ( HelloRootCmp2 ,  testProviders ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 15:53:34 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         Promise . all ( [ refPromise1 ,  refPromise2 ] ) . then ( ( refs : ComponentRef < any > [ ] )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-11-12 14:08:58 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           const  registry  =  refs [ 0 ] . injector . get ( TestabilityRegistry ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           const  testabilities  = 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								               [ refs [ 0 ] . injector . get ( Testability ) ,  refs [ 1 ] . injector . get ( Testability ) ] ; 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-02 15:53:34 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           Promise . all ( testabilities ) . then ( ( testabilities : Testability [ ] )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-06-08 16:38:52 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								             expect ( registry . findTestabilityInTree ( el ) ) . toEqual ( testabilities [ 0 ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             expect ( registry . findTestabilityInTree ( el2 ) ) . toEqual ( testabilities [ 1 ] ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								             async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
									
										
											 
										
											
												feat(browser): use AppModules for bootstrap in the browser
This introduces the `BrowserModule` to be used for long form
bootstrap and offline compile bootstrap:
```
@AppModule({
  modules: [BrowserModule],
  precompile: [MainComponent],
  providers: […], // additional providers
  directives: […], // additional platform directives
  pipes: […] // additional platform pipes
})
class MyModule {
  constructor(appRef: ApplicationRef) {
    appRef.bootstrap(MainComponent);
  }
}
// offline compile
import {bootstrapModuleFactory} from ‘@angular/platform-browser’;
bootstrapModuleFactory(MyModuleNgFactory);
// runtime compile long form
import {bootstrapModule} from ‘@angular/platform-browser-dynamic’;
bootstrapModule(MyModule);
```
The short form, `bootstrap(...)`, can now creates a module on the fly,
given `directives`, `pipes, `providers`, `precompile` and `modules`
properties.
Related changes:
- make `SanitizationService`, `SecurityContext` public in `@angular/core` so that the offline compiler can resolve the token
- move `AnimationDriver` to `platform-browser` and make it
  public so that the offline compiler can resolve the token
BREAKING CHANGES:
- short form bootstrap does no longer allow
  to inject compiler internals (i.e. everything 
  from `@angular/compiler). Inject `Compiler` instead.
  To provide custom providers for the compiler,
  create a custom compiler via `browserCompiler({providers: [...]})`
  and pass that into the `bootstrap` method.
											 
										 
										
											2016-06-30 13:07:17 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2016-07-25 03:02:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    it ( 'should allow to pass schemas' ,  inject ( [ AsyncTestCompleter ] ,  ( async :  AsyncTestCompleter )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-08-08 09:36:09 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								         bootstrap ( HelloCmpUsingCustomElement ,  testProviders ) . then ( ( compRef )  = >  { 
							 
						 
					
						
							
								
									
										
										
										
											2016-07-25 03:02:57 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								           expect ( el ) . toHaveText ( 'hello world!' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								           async . done ( ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								         } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								       } ) ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2015-05-26 09:45:15 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  } ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}