From 60bedb43dec5b02f4ad64ec57af7560f87290dd7 Mon Sep 17 00:00:00 2001 From: Tobias Bosch Date: Mon, 26 Oct 2015 15:18:16 -0700 Subject: [PATCH] =?UTF-8?q?fix(debug=5Felement):=20don=E2=80=99t=20descend?= =?UTF-8?q?=20into=20merged=20embedded=20views=20on=20`componentChildren`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Closes #4920 --- .../angular2/src/core/debug/debug_element.ts | 4 +-- .../test/core/debug/debug_element_spec.ts | 30 +++++++++++++++---- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/modules/angular2/src/core/debug/debug_element.ts b/modules/angular2/src/core/debug/debug_element.ts index 5f65f6fc88..34e716f23f 100644 --- a/modules/angular2/src/core/debug/debug_element.ts +++ b/modules/angular2/src/core/debug/debug_element.ts @@ -5,7 +5,7 @@ import {unimplemented} from 'angular2/src/core/facade/exceptions'; import {DOM} from 'angular2/src/core/dom/dom_adapter'; import {ElementInjector} from 'angular2/src/core/linker/element_injector'; -import {AppView} from 'angular2/src/core/linker/view'; +import {AppView, ViewType} from 'angular2/src/core/linker/view'; import {internalView} from 'angular2/src/core/linker/view_ref'; import {ElementRef, ElementRef_} from 'angular2/src/core/linker/element_ref'; @@ -107,7 +107,7 @@ export class DebugElement_ extends DebugElement { get componentViewChildren(): DebugElement[] { var shadowView = this._parentView.getNestedView(this._boundElementIndex); - if (!isPresent(shadowView)) { + if (!isPresent(shadowView) || shadowView.proto.type !== ViewType.COMPONENT) { // The current element is not a component. return []; } diff --git a/modules/angular2/test/core/debug/debug_element_spec.ts b/modules/angular2/test/core/debug/debug_element_spec.ts index 4a0042fc09..42e76c8d12 100644 --- a/modules/angular2/test/core/debug/debug_element_spec.ts +++ b/modules/angular2/test/core/debug/debug_element_spec.ts @@ -18,7 +18,7 @@ import {DOM} from 'angular2/src/core/dom/dom_adapter'; import {PromiseWrapper, EventEmitter, ObservableWrapper} from 'angular2/src/core/facade/async'; -import {Injectable, NgFor} from 'angular2/core'; +import {Injectable, NgFor, NgIf} from 'angular2/core'; import {By, Scope} from 'angular2/src/core/debug'; import { @@ -61,14 +61,24 @@ class ChildComp { constructor() { this.childBinding = 'Original'; } } +@Component({selector: 'cond-content-comp', viewProviders: [Logger]}) +@View({ + template: `
`, + directives: [NgIf, MessageDir] +}) +@Injectable() +class ConditionalContentComp { +} + @Component({selector: 'parent-comp', viewProviders: [Logger]}) @View({ template: `
Parent
- `, - directives: [ChildComp, MessageDir] + + `, + directives: [ChildComp, MessageDir, ConditionalContentComp] }) @Injectable() class ParentComp { @@ -135,12 +145,14 @@ export function main() { expect(childEls.length).toEqual(0); var rootCompChildren = rootTestComponent.debugElement.componentViewChildren; - // The root component has 3 elements in its shadow view. - expect(rootCompChildren.length).toEqual(3); + // The root component has 4 elements in its shadow view. + expect(rootCompChildren.length).toEqual(4); expect(DOM.hasClass(rootCompChildren[0].nativeElement, 'parent')).toBe(true); expect(DOM.hasClass(rootCompChildren[1].nativeElement, 'parent')).toBe(true); expect(DOM.hasClass(rootCompChildren[2].nativeElement, 'child-comp-class')) .toBe(true); + expect(DOM.hasClass(rootCompChildren[3].nativeElement, 'cond-content-comp-class')) + .toBe(true); var nested = rootCompChildren[0].children; expect(nested.length).toEqual(1); @@ -158,6 +170,14 @@ export function main() { expect(childNested.length).toEqual(1); expect(DOM.hasClass(childNested[0].nativeElement, 'childnested')).toBe(true); + var conditionalContentComp = rootCompChildren[3]; + expect(conditionalContentComp.children.length).toEqual(0); + + expect(conditionalContentComp.componentViewChildren.length).toEqual(1); + var ngIfWithProjectedNgContent = conditionalContentComp.componentViewChildren[0]; + expect(ngIfWithProjectedNgContent.children.length).toBe(0); + expect(ngIfWithProjectedNgContent.componentViewChildren.length).toBe(0); + async.done(); }); }));