diff --git a/modules/@angular/core/src/debug/debug_node.ts b/modules/@angular/core/src/debug/debug_node.ts index 81450ef235..aeb45f5252 100644 --- a/modules/@angular/core/src/debug/debug_node.ts +++ b/modules/@angular/core/src/debug/debug_node.ts @@ -56,6 +56,8 @@ export class DebugElement extends DebugNode { name: string; properties: {[key: string]: any}; attributes: {[key: string]: string}; + classes: {[key: string]: boolean}; + styles: {[key: string]: string}; childNodes: DebugNode[]; nativeElement: any; @@ -63,6 +65,8 @@ export class DebugElement extends DebugNode { super(nativeNode, parent, _debugInfo); this.properties = {}; this.attributes = {}; + this.classes = {}; + this.styles = {}; this.childNodes = []; this.nativeElement = nativeNode; } diff --git a/modules/@angular/core/src/debug/debug_renderer.ts b/modules/@angular/core/src/debug/debug_renderer.ts index 43df05bc29..e15fcdd21d 100644 --- a/modules/@angular/core/src/debug/debug_renderer.ts +++ b/modules/@angular/core/src/debug/debug_renderer.ts @@ -9,6 +9,8 @@ import { removeDebugNodeFromIndex } from './debug_node'; +import {StringMapWrapper} from '../../src/facade/collection'; + import {AnimationKeyframe} from '../animation/animation_keyframe'; import {AnimationStyles} from '../animation/animation_styles'; import {AnimationPlayer} from '../animation/animation_player'; @@ -125,14 +127,29 @@ export class DebugDomRenderer implements Renderer { } setElementClass(renderElement: any, className: string, isAdd: boolean) { + var debugEl = getDebugNode(renderElement); + if (isPresent(debugEl) && debugEl instanceof DebugElement) { + debugEl.classes[className] = isAdd; + } this._delegate.setElementClass(renderElement, className, isAdd); } setElementStyles(renderElement: any, styles: {[key: string]: string}) { + var debugEl = getDebugNode(renderElement); + if (isPresent(debugEl) && debugEl instanceof DebugElement) { + var elStyles = debugEl.styles; + StringMapWrapper.forEach(styles, (value, prop) => { + elStyles[prop] = value; + }); + } this._delegate.setElementStyles(renderElement, styles); } setElementStyle(renderElement: any, styleName: string, styleValue: string) { + var debugEl = getDebugNode(renderElement); + if (isPresent(debugEl) && debugEl instanceof DebugElement) { + debugEl.styles[styleName] = styleValue; + } this._delegate.setElementStyle(renderElement, styleName, styleValue); } diff --git a/modules/@angular/core/test/debug/debug_node_spec.ts b/modules/@angular/core/test/debug/debug_node_spec.ts index 46477600d2..fb9944e4d0 100644 --- a/modules/@angular/core/test/debug/debug_node_spec.ts +++ b/modules/@angular/core/test/debug/debug_node_spec.ts @@ -175,11 +175,19 @@ class BankAccount { @Component({ selector: 'test-app', template: ` - + `, directives: [BankAccount] }) class TestApp { + width = 200; + color = 'red'; + isClosed = true; } export function main() { @@ -285,6 +293,30 @@ export function main() { }); })); + it('should list element classes', + inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => { + tcb.createAsync(TestApp).then((fixture) => { + fixture.detectChanges(); + var bankElem = fixture.debugElement.children[0]; + + expect(bankElem.classes['closed']).toBe(true); + expect(bankElem.classes['open']).toBe(false); + async.done(); + }); + })); + + it('should list element styles', + inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => { + tcb.createAsync(TestApp).then((fixture) => { + fixture.detectChanges(); + var bankElem = fixture.debugElement.children[0]; + + expect(bankElem.styles['width']).toEqual('200px'); + expect(bankElem.styles['color']).toEqual('red'); + async.done(); + }); + })); + it('should query child elements by css', inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => { tcb.createAsync(ParentComp) diff --git a/tools/public_api_guard/public_api_spec.ts b/tools/public_api_guard/public_api_spec.ts index ceb4266ed1..c2977b675e 100644 --- a/tools/public_api_guard/public_api_spec.ts +++ b/tools/public_api_guard/public_api_spec.ts @@ -171,6 +171,7 @@ const CORE = [ 'DebugElement.attributes:{[key:string]:string}', 'DebugElement.childNodes:DebugNode[]', 'DebugElement.children:DebugElement[]', + 'DebugElement.classes:{[key:string]:boolean}', 'DebugElement.constructor(nativeNode:any, parent:any, _debugInfo:RenderDebugInfo)', 'DebugElement.insertChildrenAfter(child:DebugNode, newChildren:DebugNode[]):any', 'DebugElement.name:string',