import { AsyncTestCompleter, beforeEach, ddescribe, xdescribe, describe, dispatchEvent, expect, iit, inject, beforeEachBindings, it, xit, TestComponentBuilder } from 'angular2/test_lib'; import {Injectable} from 'angular2/di'; import {Directive, Component, View, ViewMetadata} from 'angular2/metadata'; import {NgIf} from 'angular2/src/core/directives/ng_if'; @Component({selector: 'child-comp'}) @View({template: `Original {{childBinding}}`, directives: []}) @Injectable() class ChildComp { childBinding: string; constructor() { this.childBinding = 'Child'; } } @Component({selector: 'child-comp'}) @View({template: `Mock`}) @Injectable() class MockChildComp { } @Component({selector: 'parent-comp'}) @View({template: `Parent()`, directives: [ChildComp]}) @Injectable() class ParentComp { } @Component({selector: 'my-if-comp'}) @View({template: `MyIf(More)`, directives: [NgIf]}) @Injectable() class MyIfComp { showMore: boolean = false; } export function main() { describe('test component builder', function() { it('should instantiate a component with valid DOM', inject([TestComponentBuilder, AsyncTestCompleter], (tcb, async) => { tcb.createAsync(ChildComp).then((rootTestComponent) => { rootTestComponent.detectChanges(); expect(rootTestComponent.nativeElement).toHaveText('Original Child'); async.done(); }); })); it('should allow changing members of the component', inject([TestComponentBuilder, AsyncTestCompleter], (tcb, async) => { tcb.createAsync(MyIfComp).then((rootTestComponent) => { rootTestComponent.detectChanges(); expect(rootTestComponent.nativeElement).toHaveText('MyIf()'); rootTestComponent.componentInstance.showMore = true; rootTestComponent.detectChanges(); expect(rootTestComponent.nativeElement).toHaveText('MyIf(More)'); async.done(); }); })); it('should override a template', inject([TestComponentBuilder, AsyncTestCompleter], (tcb, async) => { tcb.overrideTemplate(MockChildComp, 'Mock') .createAsync(MockChildComp) .then((rootTestComponent) => { rootTestComponent.detectChanges(); expect(rootTestComponent.nativeElement).toHaveText('Mock'); async.done(); }); })); it('should override a view', inject([TestComponentBuilder, AsyncTestCompleter], (tcb, async) => { tcb.overrideView(ChildComp, new ViewMetadata({template: 'Modified {{childBinding}}'})) .createAsync(ChildComp) .then((rootTestComponent) => { rootTestComponent.detectChanges(); expect(rootTestComponent.nativeElement).toHaveText('Modified Child'); async.done(); }); })); it('should override component dependencies', inject([TestComponentBuilder, AsyncTestCompleter], (tcb, async) => { tcb.overrideDirective(ParentComp, ChildComp, MockChildComp) .createAsync(ParentComp) .then((rootTestComponent) => { rootTestComponent.detectChanges(); expect(rootTestComponent.nativeElement).toHaveText('Parent(Mock)'); async.done(); }); })); }); }