| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | import { | 
					
						
							|  |  |  |   it, | 
					
						
							|  |  |  |   iit, | 
					
						
							|  |  |  |   xit, | 
					
						
							|  |  |  |   describe, | 
					
						
							|  |  |  |   ddescribe, | 
					
						
							|  |  |  |   xdescribe, | 
					
						
							|  |  |  |   expect, | 
					
						
							|  |  |  |   tick, | 
					
						
							|  |  |  |   beforeEach, | 
					
						
							|  |  |  |   inject, | 
					
						
							|  |  |  |   beforeEachProviders, | 
					
						
							|  |  |  |   TestComponentBuilder | 
					
						
							| 
									
										
										
										
											2015-10-13 00:29:13 -07:00
										 |  |  | } from 'angular2/testing'; | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 15:55:43 -08:00
										 |  |  | import {Injectable, bind} from 'angular2/core'; | 
					
						
							|  |  |  | import {NgIf} from 'angular2/common'; | 
					
						
							| 
									
										
										
										
											2015-11-23 10:18:04 -08:00
										 |  |  | import {Directive, Component, View, ViewMetadata} from 'angular2/core'; | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  | import {PromiseWrapper} from 'angular2/src/facade/promise'; | 
					
						
							| 
									
										
										
										
											2015-11-05 14:07:57 -08:00
										 |  |  | import {XHR} from 'angular2/src/compiler/xhr'; | 
					
						
							| 
									
										
										
										
											2015-11-13 11:21:16 -08:00
										 |  |  | import {XHRImpl} from 'angular2/src/platform/browser/xhr_impl'; | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Services, and components for the tests.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Component({selector: 'child-comp'}) | 
					
						
							|  |  |  | @View({template: `<span>Original {{childBinding}}</span>`, directives: []}) | 
					
						
							|  |  |  | @Injectable() | 
					
						
							|  |  |  | class ChildComp { | 
					
						
							|  |  |  |   childBinding: string; | 
					
						
							|  |  |  |   constructor() { this.childBinding = 'Child'; } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Component({selector: 'child-comp'}) | 
					
						
							|  |  |  | @View({template: `<span>Mock</span>`}) | 
					
						
							|  |  |  | @Injectable() | 
					
						
							|  |  |  | class MockChildComp { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Component({selector: 'parent-comp'}) | 
					
						
							|  |  |  | @View({template: `Parent(<child-comp></child-comp>)`, directives: [ChildComp]}) | 
					
						
							|  |  |  | @Injectable() | 
					
						
							|  |  |  | class ParentComp { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Component({selector: 'my-if-comp'}) | 
					
						
							| 
									
										
										
										
											2015-11-23 16:02:19 -08:00
										 |  |  | @View({template: `MyIf(<span *ngIf="showMore">More</span>)`, directives: [NgIf]}) | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | @Injectable() | 
					
						
							|  |  |  | class MyIfComp { | 
					
						
							|  |  |  |   showMore: boolean = false; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Component({selector: 'child-child-comp'}) | 
					
						
							|  |  |  | @View({template: `<span>ChildChild</span>`}) | 
					
						
							|  |  |  | @Injectable() | 
					
						
							|  |  |  | class ChildChildComp { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Component({selector: 'child-comp'}) | 
					
						
							|  |  |  | @View({ | 
					
						
							|  |  |  |   template: `<span>Original {{childBinding}}(<child-child-comp></child-child-comp>)</span>`, | 
					
						
							|  |  |  |   directives: [ChildChildComp] | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | @Injectable() | 
					
						
							|  |  |  | class ChildWithChildComp { | 
					
						
							|  |  |  |   childBinding: string; | 
					
						
							|  |  |  |   constructor() { this.childBinding = 'Child'; } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Component({selector: 'child-child-comp'}) | 
					
						
							|  |  |  | @View({template: `<span>ChildChild Mock</span>`}) | 
					
						
							|  |  |  | @Injectable() | 
					
						
							|  |  |  | class MockChildChildComp { | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class FancyService { | 
					
						
							|  |  |  |   value: string = 'real value'; | 
					
						
							|  |  |  |   getAsyncValue() { return Promise.resolve('async value'); } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MockFancyService extends FancyService { | 
					
						
							|  |  |  |   value: string = 'mocked out value'; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Component({selector: 'my-service-comp', providers: [FancyService]}) | 
					
						
							|  |  |  | @View({template: `injected value: {{fancyService.value}}`}) | 
					
						
							|  |  |  | class TestProvidersComp { | 
					
						
							|  |  |  |   constructor(private fancyService: FancyService) {} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | @Component({selector: 'my-service-comp', viewProviders: [FancyService]}) | 
					
						
							|  |  |  | @View({template: `injected value: {{fancyService.value}}`}) | 
					
						
							|  |  |  | class TestViewProvidersComp { | 
					
						
							|  |  |  |   constructor(private fancyService: FancyService) {} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export function main() { | 
					
						
							|  |  |  |   describe('angular2 jasmine matchers', () => { | 
					
						
							|  |  |  |     describe('toHaveCssClass', () => { | 
					
						
							|  |  |  |       it('should assert that the CSS class is present', () => { | 
					
						
							|  |  |  |         var el = document.createElement('div'); | 
					
						
							|  |  |  |         el.classList.add('matias'); | 
					
						
							|  |  |  |         expect(el).toHaveCssClass('matias'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should assert that the CSS class is not present', () => { | 
					
						
							|  |  |  |         var el = document.createElement('div'); | 
					
						
							|  |  |  |         el.classList.add('matias'); | 
					
						
							|  |  |  |         expect(el).not.toHaveCssClass('fatias'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-11-17 12:37:39 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     describe('toHaveCssStyle', () => { | 
					
						
							|  |  |  |       it('should assert that the CSS style is present', () => { | 
					
						
							|  |  |  |         var el = document.createElement('div'); | 
					
						
							|  |  |  |         expect(el).not.toHaveCssStyle('width'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         el.style.setProperty('width', '100px'); | 
					
						
							|  |  |  |         expect(el).toHaveCssStyle('width'); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should assert that the styles are matched against the element', () => { | 
					
						
							|  |  |  |         var el = document.createElement('div'); | 
					
						
							|  |  |  |         expect(el).not.toHaveCssStyle({width: '100px', height: '555px'}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         el.style.setProperty('width', '100px'); | 
					
						
							|  |  |  |         expect(el).toHaveCssStyle({width: '100px'}); | 
					
						
							|  |  |  |         expect(el).not.toHaveCssStyle({width: '100px', height: '555px'}); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         el.style.setProperty('height', '555px'); | 
					
						
							|  |  |  |         expect(el).toHaveCssStyle({height: '555px'}); | 
					
						
							|  |  |  |         expect(el).toHaveCssStyle({width: '100px', height: '555px'}); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe('using the test injector with the inject helper', () => { | 
					
						
							|  |  |  |     it('should run normal tests', () => { expect(true).toEqual(true); }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should run normal async tests', (done) => { | 
					
						
							|  |  |  |       setTimeout(() => { | 
					
						
							|  |  |  |         expect(true).toEqual(true); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }, 0); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-14 09:41:15 -07:00
										 |  |  |     it('provides a real XHR instance', | 
					
						
							|  |  |  |        inject([XHR], (xhr) => { expect(xhr).toBeAnInstanceOf(XHRImpl); })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |     describe('setting up Providers', () => { | 
					
						
							|  |  |  |       beforeEachProviders(() => [bind(FancyService).toValue(new FancyService())]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('should use set up providers', | 
					
						
							|  |  |  |          inject([FancyService], (service) => { expect(service.value).toEqual('real value'); })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |       it('should wait until returned promises', inject([FancyService], (service) => { | 
					
						
							|  |  |  |            service.getAsyncValue().then((value) => { expect(value).toEqual('async value'); }); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       describe('using beforeEach', () => { | 
					
						
							|  |  |  |         beforeEach(inject([FancyService], | 
					
						
							|  |  |  |                           (service) => { service.value = 'value modified in beforeEach'; })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         it('should use modified providers', inject([FancyService], (service) => { | 
					
						
							|  |  |  |              expect(service.value).toEqual('value modified in beforeEach'); | 
					
						
							|  |  |  |            })); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       describe('using async beforeEach', () => { | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |         beforeEach(inject([FancyService], (service) => { | 
					
						
							|  |  |  |           service.getAsyncValue().then((value) => { service.value = value; }); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |         })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         it('should use asynchronously modified value', | 
					
						
							|  |  |  |            inject([FancyService], (service) => { expect(service.value).toEqual('async value'); })); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe('errors', () => { | 
					
						
							|  |  |  |     var originalJasmineIt: any; | 
					
						
							|  |  |  |     var originalJasmineBeforeEach: any; | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |     var patchJasmineIt = () => { | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |       var deferred = PromiseWrapper.completer(); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |       originalJasmineIt = jasmine.getEnv().it; | 
					
						
							|  |  |  |       jasmine.getEnv().it = (description: string, fn) => { | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |         var done = () => { deferred.resolve() }; | 
					
						
							|  |  |  |         (<any>done).fail = (err) => { deferred.reject(err) }; | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |         fn(done); | 
					
						
							|  |  |  |         return null; | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |       }; | 
					
						
							|  |  |  |       return deferred.promise; | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     var restoreJasmineIt = () => { jasmine.getEnv().it = originalJasmineIt; }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     var patchJasmineBeforeEach = () => { | 
					
						
							|  |  |  |       originalJasmineBeforeEach = jasmine.getEnv().beforeEach; | 
					
						
							|  |  |  |       jasmine.getEnv().beforeEach = (fn: any) => { | 
					
						
							|  |  |  |         var done = () => {}; | 
					
						
							|  |  |  |         (<any>done).fail = (err) => { throw new Error(err) }; | 
					
						
							|  |  |  |         fn(done); | 
					
						
							|  |  |  |         return null; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     var restoreJasmineBeforeEach = | 
					
						
							|  |  |  |         () => { jasmine.getEnv().beforeEach = originalJasmineBeforeEach; } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |     it('should fail when an error occurs inside inject', (done) => { | 
					
						
							|  |  |  |       var itPromise = patchJasmineIt(); | 
					
						
							|  |  |  |       it('throws an error', inject([], () => { throw new Error('foo'); })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       itPromise.then(() => { done.fail('Expected function to throw, but it did not'); }, (err) => { | 
					
						
							|  |  |  |         expect(err.message).toEqual('foo'); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |       restoreJasmineIt(); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |     it('should fail when an asynchronous error is thrown', (done) => { | 
					
						
							|  |  |  |       var itPromise = patchJasmineIt(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       it('throws an async error', | 
					
						
							|  |  |  |          inject([], () => { setTimeout(() => { throw new Error('bar'); }, 0); })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       itPromise.then(() => { done.fail('Expected test to fail, but it did not'); }, (err) => { | 
					
						
							|  |  |  |         expect(err.message).toEqual('bar'); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |       restoreJasmineIt(); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |     it('should fail when a returned promise is rejected', (done) => { | 
					
						
							|  |  |  |       var itPromise = patchJasmineIt(); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |       it('should fail with an error from a promise', inject([], () => { | 
					
						
							|  |  |  |            var deferred = PromiseWrapper.completer(); | 
					
						
							|  |  |  |            var p = deferred.promise.then(() => { expect(1).toEqual(2); }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |            deferred.reject('baz'); | 
					
						
							|  |  |  |            return p; | 
					
						
							|  |  |  |          })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       itPromise.then(() => { done.fail('Expected test to fail, but it did not'); }, (err) => { | 
					
						
							|  |  |  |         expect(err).toEqual('baz'); | 
					
						
							|  |  |  |         done(); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |       restoreJasmineIt(); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     describe('using beforeEachProviders', () => { | 
					
						
							|  |  |  |       beforeEachProviders(() => [bind(FancyService).toValue(new FancyService())]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       beforeEach( | 
					
						
							|  |  |  |           inject([FancyService], (service) => { expect(service.value).toEqual('real value'); })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       describe('nested beforeEachProviders', () => { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         it('should fail when the injector has already been used', () => { | 
					
						
							|  |  |  |           expect(() => { | 
					
						
							|  |  |  |             patchJasmineBeforeEach(); | 
					
						
							|  |  |  |             beforeEachProviders(() => [bind(FancyService).toValue(new FancyService())]); | 
					
						
							|  |  |  |           }) | 
					
						
							|  |  |  |               .toThrowError('beforeEachProviders was called after the injector had been used ' + | 
					
						
							|  |  |  |                             'in a beforeEach or it block. This invalidates the test injector'); | 
					
						
							|  |  |  |           restoreJasmineBeforeEach(); | 
					
						
							|  |  |  |         }); | 
					
						
							|  |  |  |       }); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   describe('test component builder', function() { | 
					
						
							|  |  |  |     it('should instantiate a component with valid DOM', | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |        inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |          tcb.createAsync(ChildComp).then((componentFixture) => { | 
					
						
							| 
									
										
										
										
											2015-10-31 09:50:19 -07:00
										 |  |  |            componentFixture.detectChanges(); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-31 09:50:19 -07:00
										 |  |  |            expect(componentFixture.debugElement.nativeElement).toHaveText('Original Child'); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |          }); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should allow changing members of the component', | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |        inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |          tcb.createAsync(MyIfComp).then((componentFixture) => { | 
					
						
							| 
									
										
										
										
											2015-10-31 09:50:19 -07:00
										 |  |  |            componentFixture.detectChanges(); | 
					
						
							|  |  |  |            expect(componentFixture.debugElement.nativeElement).toHaveText('MyIf()'); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-31 09:50:19 -07:00
										 |  |  |            componentFixture.debugElement.componentInstance.showMore = true; | 
					
						
							|  |  |  |            componentFixture.detectChanges(); | 
					
						
							|  |  |  |            expect(componentFixture.debugElement.nativeElement).toHaveText('MyIf(More)'); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |          }); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |     it('should override a template', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |          tcb.overrideTemplate(MockChildComp, '<span>Mock</span>') | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |              .createAsync(MockChildComp) | 
					
						
							| 
									
										
										
										
											2015-10-31 09:50:19 -07:00
										 |  |  |              .then((componentFixture) => { | 
					
						
							|  |  |  |                componentFixture.detectChanges(); | 
					
						
							|  |  |  |                expect(componentFixture.debugElement.nativeElement).toHaveText('Mock'); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |              }); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |     it('should override a view', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |          tcb.overrideView(ChildComp, | 
					
						
							|  |  |  |                           new ViewMetadata({template: '<span>Modified {{childBinding}}</span>'})) | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |              .createAsync(ChildComp) | 
					
						
							| 
									
										
										
										
											2015-10-31 09:50:19 -07:00
										 |  |  |              .then((componentFixture) => { | 
					
						
							|  |  |  |                componentFixture.detectChanges(); | 
					
						
							|  |  |  |                expect(componentFixture.debugElement.nativeElement).toHaveText('Modified Child'); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |              }); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should override component dependencies', | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |        inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |          tcb.overrideDirective(ParentComp, ChildComp, MockChildComp) | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |              .createAsync(ParentComp) | 
					
						
							| 
									
										
										
										
											2015-10-31 09:50:19 -07:00
										 |  |  |              .then((componentFixture) => { | 
					
						
							|  |  |  |                componentFixture.detectChanges(); | 
					
						
							|  |  |  |                expect(componentFixture.debugElement.nativeElement).toHaveText('Parent(Mock)'); | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |              }); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it("should override child component's dependencies", | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |        inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |          tcb.overrideDirective(ParentComp, ChildComp, ChildWithChildComp) | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |              .overrideDirective(ChildWithChildComp, ChildChildComp, MockChildChildComp) | 
					
						
							|  |  |  |              .createAsync(ParentComp) | 
					
						
							| 
									
										
										
										
											2015-10-31 09:50:19 -07:00
										 |  |  |              .then((componentFixture) => { | 
					
						
							|  |  |  |                componentFixture.detectChanges(); | 
					
						
							|  |  |  |                expect(componentFixture.debugElement.nativeElement) | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |                    .toHaveText('Parent(Original Child(ChildChild Mock))'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |              }); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |     it('should override a provider', inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |          tcb.overrideProviders(TestProvidersComp, [bind(FancyService).toClass(MockFancyService)]) | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |              .createAsync(TestProvidersComp) | 
					
						
							| 
									
										
										
										
											2015-10-31 09:50:19 -07:00
										 |  |  |              .then((componentFixture) => { | 
					
						
							|  |  |  |                componentFixture.detectChanges(); | 
					
						
							|  |  |  |                expect(componentFixture.debugElement.nativeElement) | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |                    .toHaveText('injected value: mocked out value'); | 
					
						
							|  |  |  |              }); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it('should override a viewProvider', | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |        inject([TestComponentBuilder], (tcb: TestComponentBuilder) => { | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-11-18 18:46:24 -08:00
										 |  |  |          tcb.overrideViewProviders(TestViewProvidersComp, | 
					
						
							|  |  |  |                                    [bind(FancyService).toClass(MockFancyService)]) | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |              .createAsync(TestViewProvidersComp) | 
					
						
							| 
									
										
										
										
											2015-10-31 09:50:19 -07:00
										 |  |  |              .then((componentFixture) => { | 
					
						
							|  |  |  |                componentFixture.detectChanges(); | 
					
						
							|  |  |  |                expect(componentFixture.debugElement.nativeElement) | 
					
						
							| 
									
										
										
										
											2015-10-08 15:33:17 -07:00
										 |  |  |                    .toHaveText('injected value: mocked out value'); | 
					
						
							|  |  |  |              }); | 
					
						
							|  |  |  |        })); | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } |