2016-04-11 11:47:28 -04:00
|
|
|
import {
|
|
|
|
beforeEach,
|
|
|
|
ddescribe,
|
|
|
|
describe,
|
|
|
|
expect,
|
|
|
|
iit,
|
|
|
|
inject,
|
|
|
|
it,
|
|
|
|
xit,
|
2016-04-28 20:50:03 -04:00
|
|
|
} from '@angular/core/testing/testing_internal';
|
|
|
|
import {TestComponentBuilder, ComponentFixture} from '@angular/compiler/testing';
|
|
|
|
import {AsyncTestCompleter} from '@angular/core/testing/testing_internal';
|
|
|
|
import {Component, Directive, TemplateRef, ContentChildren, QueryList} from '@angular/core';
|
|
|
|
import {NgTemplateOutlet} from '@angular/common';
|
2016-04-11 11:47:28 -04:00
|
|
|
|
|
|
|
export function main() {
|
|
|
|
describe('insert', () => {
|
|
|
|
it('should do nothing if templateRef is null',
|
2016-06-09 14:04:15 -04:00
|
|
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async: AsyncTestCompleter) => {
|
2016-04-11 11:47:28 -04:00
|
|
|
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',
|
2016-06-09 14:04:15 -04:00
|
|
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async: AsyncTestCompleter) => {
|
2016-04-11 11:47:28 -04:00
|
|
|
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('');
|
|
|
|
|
2016-04-28 17:00:31 -04:00
|
|
|
var refs = fixture.debugElement.children[0].references['refs'];
|
2016-04-11 11:47:28 -04:00
|
|
|
|
|
|
|
fixture.componentInstance.currentTplRef = refs.tplRefs.first;
|
|
|
|
fixture.detectChanges();
|
|
|
|
expect(fixture.nativeElement).toHaveText('foo');
|
|
|
|
|
|
|
|
async.done();
|
|
|
|
});
|
|
|
|
}));
|
|
|
|
|
|
|
|
it('should clear content if TemplateRef becomes null',
|
2016-06-09 14:04:15 -04:00
|
|
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async: AsyncTestCompleter) => {
|
2016-04-11 11:47:28 -04:00
|
|
|
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();
|
2016-04-28 17:00:31 -04:00
|
|
|
var refs = fixture.debugElement.children[0].references['refs'];
|
2016-04-11 11:47:28 -04:00
|
|
|
|
|
|
|
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',
|
2016-06-09 14:04:15 -04:00
|
|
|
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async: AsyncTestCompleter) => {
|
2016-04-11 11:47:28 -04:00
|
|
|
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();
|
2016-04-28 17:00:31 -04:00
|
|
|
var refs = fixture.debugElement.children[0].references['refs'];
|
2016-04-11 11:47:28 -04:00
|
|
|
|
|
|
|
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 {
|
2016-04-28 17:00:31 -04:00
|
|
|
@ContentChildren(TemplateRef) tplRefs: QueryList<TemplateRef<any>>;
|
2016-04-11 11:47:28 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
@Component({selector: 'test-cmp', directives: [NgTemplateOutlet, CaptureTplRefs], template: ''})
|
|
|
|
class TestComponent {
|
2016-04-28 17:00:31 -04:00
|
|
|
currentTplRef: TemplateRef<any>;
|
2016-04-11 11:47:28 -04:00
|
|
|
}
|