test(core): ngOnDestroy called before output events are detached (#9946)

closes #6984
closes #5436
This commit is contained in:
André Werlang 2016-11-11 16:27:32 -02:00 committed by Victor Berchet
parent 1bd858fb43
commit 752edca81b
1 changed files with 18 additions and 1 deletions

View File

@ -84,6 +84,7 @@ export function main() {
CompWithRef, CompWithRef,
EmitterDirective, EmitterDirective,
PushComp, PushComp,
OnDestroyDirective,
OrderCheckDirective2, OrderCheckDirective2,
OrderCheckDirective0, OrderCheckDirective0,
OrderCheckDirective1, OrderCheckDirective1,
@ -1040,7 +1041,16 @@ export function main() {
]); ]);
})); }));
it('should call ngOnDestory on pipes', fakeAsync(() => { it('should deliver synchronous events to parent', fakeAsync(() => {
var ctx = createCompFixture('<div (destroy)="a=$event" onDestroyDirective></div>');
ctx.detectChanges(false);
ctx.destroy();
expect(ctx.componentInstance.a).toEqual('destroyed');
}));
it('should call ngOnDestroy on pipes', fakeAsync(() => {
var ctx = createCompFixture('{{true | pipeWithOnDestroy }}'); var ctx = createCompFixture('{{true | pipeWithOnDestroy }}');
ctx.detectChanges(false); ctx.detectChanges(false);
@ -1442,6 +1452,13 @@ class InjectableWithLifecycle {
ngOnDestroy() { this.log.add(this.name, 'ngOnDestroy'); } ngOnDestroy() { this.log.add(this.name, 'ngOnDestroy'); }
} }
@Directive({selector: '[onDestroyDirective]'})
class OnDestroyDirective implements OnDestroy {
@Output('destroy') emitter = new EventEmitter<string>(false);
ngOnDestroy() { this.emitter.emit('destroyed'); }
}
@Directive({selector: '[orderCheck0]'}) @Directive({selector: '[orderCheck0]'})
class OrderCheckDirective0 { class OrderCheckDirective0 {
private _name: string; private _name: string;