diff --git a/packages/core/test/render3/compiler_canonical_spec.ts b/packages/core/test/render3/compiler_canonical_spec.ts
index 264fcbc8dc..594e5f5f84 100644
--- a/packages/core/test/render3/compiler_canonical_spec.ts
+++ b/packages/core/test/render3/compiler_canonical_spec.ts
@@ -98,6 +98,8 @@ describe('compiler specification', () => {
r3.e();
r3.T(3, '!');
}
+ ChildComponent.ngComponentDef.h(1, 0);
+ SomeDirective.ngDirectiveDef.h(2, 0);
r3.r(1, 0);
r3.r(2, 0);
}
@@ -266,6 +268,78 @@ describe('compiler specification', () => {
});
});
+ describe('lifecycle hooks', () => {
+ let events: string[] = [];
+
+ beforeEach(() => { events = []; });
+
+ @Component({selector: 'lifecycle-comp', template: ``})
+ class LifecycleComp {
+ @Input() nameMin: string;
+
+ ngOnInit() { events.push('init' + this.nameMin); }
+ ngDoCheck() { events.push('check' + this.nameMin); }
+
+ ngAfterContentInit() { events.push('content init' + this.nameMin); }
+ ngAfterContentChecked() { events.push('content check' + this.nameMin); }
+
+ ngAfterViewInit() { events.push('view init' + this.nameMin); }
+ ngAfterViewChecked() { events.push('view check' + this.nameMin); }
+
+ ngOnDestroy() { events.push(this.nameMin); }
+
+ static ngComponentDef = r3.defineComponent({
+ type: LifecycleComp,
+ tag: 'lifecycle-comp',
+ factory: () => new LifecycleComp(),
+ template: function(ctx: any, cm: boolean) {},
+ inputs: {nameMin: 'name'}
+ });
+ }
+
+ @Component({
+ selector: 'simple-layout',
+ template: `
+
+
+ `
+ })
+ class SimpleLayout {
+ name1 = '1';
+ name2 = '2';
+
+ static ngComponentDef = r3.defineComponent({
+ type: SimpleLayout,
+ tag: 'simple-layout',
+ factory: () => new SimpleLayout(),
+ template: function(ctx: any, cm: boolean) {
+ if (cm) {
+ r3.E(0, LifecycleComp);
+ r3.e();
+ r3.E(2, LifecycleComp);
+ r3.e();
+ }
+ r3.p(0, 'name', r3.b(ctx.name1));
+ r3.p(2, 'name', r3.b(ctx.name2));
+ LifecycleComp.ngComponentDef.h(1, 0);
+ LifecycleComp.ngComponentDef.h(3, 2);
+ r3.r(1, 0);
+ r3.r(3, 2);
+ }
+ });
+ }
+
+ it('should gen hooks with a few simple components', () => {
+ expect(renderComp(SimpleLayout))
+ .toEqual(``);
+ expect(events).toEqual([
+ 'init1', 'check1', 'init2', 'check2', 'content init1', 'content check1', 'content init2',
+ 'content check2', 'view init1', 'view check1', 'view init2', 'view check2'
+ ]);
+ });
+
+ });
+
describe('template variables', () => {
interface ForOfContext {
diff --git a/packages/core/test/render3/lifecycle_spec.ts b/packages/core/test/render3/lifecycle_spec.ts
index ce5085fdd2..ee8448a76c 100644
--- a/packages/core/test/render3/lifecycle_spec.ts
+++ b/packages/core/test/render3/lifecycle_spec.ts
@@ -175,8 +175,8 @@ describe('lifecycles', () => {
}
Comp.ngComponentDef.h(1, 0);
ProjectedComp.ngComponentDef.h(3, 2);
- r(3, 2);
r(1, 0);
+ r(3, 2);
}
renderToHtml(Template, {});
@@ -209,10 +209,10 @@ describe('lifecycles', () => {
ProjectedComp.ngComponentDef.h(3, 2);
Comp.ngComponentDef.h(5, 4);
ProjectedComp.ngComponentDef.h(7, 6);
- r(3, 2);
r(1, 0);
- r(7, 6);
+ r(3, 2);
r(5, 4);
+ r(7, 6);
}
renderToHtml(Template, {});
@@ -628,8 +628,8 @@ describe('lifecycles', () => {
}
Parent.ngComponentDef.h(1, 0);
ProjectedComp.ngComponentDef.h(3, 2);
- r(3, 2);
r(1, 0);
+ r(3, 2);
}
renderToHtml(Template, {});
@@ -675,10 +675,10 @@ describe('lifecycles', () => {
ProjectedComp.ngComponentDef.h(3, 2);
Parent.ngComponentDef.h(6, 5);
ProjectedComp.ngComponentDef.h(8, 7);
- r(3, 2);
r(1, 0);
- r(8, 7);
+ r(3, 2);
r(6, 5);
+ r(8, 7);
}
renderToHtml(Template, {});
@@ -963,8 +963,8 @@ describe('lifecycles', () => {
}
Comp.ngComponentDef.h(1, 0);
ProjectedComp.ngComponentDef.h(3, 2);
- r(3, 2);
r(1, 0);
+ r(3, 2);
}
renderToHtml(Template, {});
@@ -1003,10 +1003,10 @@ describe('lifecycles', () => {
ProjectedComp.ngComponentDef.h(3, 2);
Comp.ngComponentDef.h(5, 4);
ProjectedComp.ngComponentDef.h(7, 6);
- r(3, 2);
r(1, 0);
- r(7, 6);
+ r(3, 2);
r(5, 4);
+ r(7, 6);
}
renderToHtml(Template, {});
@@ -1032,8 +1032,8 @@ describe('lifecycles', () => {
p(2, 'val', b(ctx.val));
Comp.ngComponentDef.h(1, 0);
ProjectedComp.ngComponentDef.h(3, 2);
- r(3, 2);
r(1, 0);
+ r(3, 2);
});
/**
@@ -1452,10 +1452,10 @@ describe('lifecycles', () => {
ProjectedComp.ngComponentDef.h(3, 2);
Comp.ngComponentDef.h(5, 4);
ProjectedComp.ngComponentDef.h(7, 6);
- r(3, 2);
r(1, 0);
- r(7, 6);
+ r(3, 2);
r(5, 4);
+ r(7, 6);
v();
}
}