114 lines
4.0 KiB
TypeScript
114 lines
4.0 KiB
TypeScript
import {
|
|
AsyncTestCompleter,
|
|
TestComponentBuilder,
|
|
beforeEach,
|
|
ddescribe,
|
|
describe,
|
|
el,
|
|
expect,
|
|
iit,
|
|
inject,
|
|
it,
|
|
xit,
|
|
} from 'angular2/testing_internal';
|
|
|
|
import {Component, Directive, TemplateRef, ContentChildren, QueryList} from 'angular2/core';
|
|
|
|
import {NgTemplateOutlet} from 'angular2/src/common/directives/ng_template_outlet';
|
|
|
|
export function main() {
|
|
describe('insert', () => {
|
|
it('should do nothing if templateRef is null',
|
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
|
var template = `<template [ngTemplateOutlet]="null"></template>`;
|
|
tcb.overrideTemplate(TestComponent, template)
|
|
.createAsync(TestComponent)
|
|
.then((fixture) => {
|
|
|
|
fixture.detectChanges();
|
|
expect(fixture.nativeElement).toHaveText('');
|
|
|
|
async.done();
|
|
});
|
|
}));
|
|
|
|
it('should insert content specified by TemplateRef',
|
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
|
var template =
|
|
`<tpl-refs #refs="tplRefs"><template>foo</template></tpl-refs><template [ngTemplateOutlet]="currentTplRef"></template>`;
|
|
tcb.overrideTemplate(TestComponent, template)
|
|
.createAsync(TestComponent)
|
|
.then((fixture) => {
|
|
|
|
fixture.detectChanges();
|
|
expect(fixture.nativeElement).toHaveText('');
|
|
|
|
var refs = fixture.debugElement.children[0].getLocal('refs');
|
|
|
|
fixture.componentInstance.currentTplRef = refs.tplRefs.first;
|
|
fixture.detectChanges();
|
|
expect(fixture.nativeElement).toHaveText('foo');
|
|
|
|
async.done();
|
|
});
|
|
}));
|
|
|
|
it('should clear content if TemplateRef becomes null',
|
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
|
var template =
|
|
`<tpl-refs #refs="tplRefs"><template>foo</template></tpl-refs><template [ngTemplateOutlet]="currentTplRef"></template>`;
|
|
tcb.overrideTemplate(TestComponent, template)
|
|
.createAsync(TestComponent)
|
|
.then((fixture) => {
|
|
|
|
fixture.detectChanges();
|
|
var refs = fixture.debugElement.children[0].getLocal('refs');
|
|
|
|
fixture.componentInstance.currentTplRef = refs.tplRefs.first;
|
|
fixture.detectChanges();
|
|
expect(fixture.nativeElement).toHaveText('foo');
|
|
|
|
fixture.componentInstance.currentTplRef = null;
|
|
fixture.detectChanges();
|
|
expect(fixture.nativeElement).toHaveText('');
|
|
|
|
async.done();
|
|
});
|
|
}));
|
|
|
|
it('should swap content if TemplateRef changes',
|
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
|
var template = `<tpl-refs #refs="tplRefs"><template>foo</template><template>bar</template></tpl-refs><template [ngTemplateOutlet]="currentTplRef"></template>`;
|
|
tcb.overrideTemplate(TestComponent, template)
|
|
.createAsync(TestComponent)
|
|
.then((fixture) => {
|
|
|
|
fixture.detectChanges();
|
|
var refs = fixture.debugElement.children[0].getLocal('refs');
|
|
|
|
fixture.componentInstance.currentTplRef = refs.tplRefs.first;
|
|
fixture.detectChanges();
|
|
expect(fixture.nativeElement).toHaveText('foo');
|
|
|
|
fixture.componentInstance.currentTplRef = refs.tplRefs.last;
|
|
fixture.detectChanges();
|
|
expect(fixture.nativeElement).toHaveText('bar');
|
|
|
|
async.done();
|
|
});
|
|
}));
|
|
|
|
});
|
|
}
|
|
|
|
|
|
@Directive({selector: 'tpl-refs', exportAs: 'tplRefs'})
|
|
class CaptureTplRefs {
|
|
@ContentChildren(TemplateRef) tplRefs: QueryList<TemplateRef>;
|
|
}
|
|
|
|
@Component({selector: 'test-cmp', directives: [NgTemplateOutlet, CaptureTplRefs], template: ''})
|
|
class TestComponent {
|
|
currentTplRef: TemplateRef;
|
|
}
|