refactor(core): remove testing-only style utils from DomAdapters (#32291)

PR Close #32291
This commit is contained in:
Kara Erickson 2019-08-23 12:32:00 -07:00 committed by Miško Hevery
parent 46caf88b2c
commit ede5786d1e
14 changed files with 63 additions and 75 deletions

View File

@ -133,7 +133,7 @@ import {expect} from '@angular/platform-browser/testing/src/matchers';
fixture.detectChanges(); fixture.detectChanges();
els = fixture.debugElement.queryAll(By.css('span')); els = fixture.debugElement.queryAll(By.css('span'));
expect(els.length).toEqual(1); expect(els.length).toEqual(1);
expect(getDOM().hasClass(els[0].nativeElement, 'marker')).toBe(true); expect(els[0].nativeElement.classList.contains('marker')).toBe(true);
expect(fixture.nativeElement).toHaveText('hello'); expect(fixture.nativeElement).toHaveText('hello');
})); }));

View File

@ -10,6 +10,7 @@ import {Component, Directive} from '@angular/core';
import {ElementRef} from '@angular/core/src/linker/element_ref'; import {ElementRef} from '@angular/core/src/linker/element_ref';
import {ComponentFixture, TestBed, async} from '@angular/core/testing'; import {ComponentFixture, TestBed, async} from '@angular/core/testing';
import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter';
import {hasClass} from '@angular/platform-browser/testing/src/browser_util';
import {expect} from '@angular/platform-browser/testing/src/matchers'; import {expect} from '@angular/platform-browser/testing/src/matchers';
{ {
@ -37,7 +38,7 @@ import {expect} from '@angular/platform-browser/testing/src/matchers';
// We must use getDOM().querySelector instead of fixture.query here // We must use getDOM().querySelector instead of fixture.query here
// since the elements inside are not compiled. // since the elements inside are not compiled.
const span = getDOM().querySelector(fixture.nativeElement, '#child'); const span = getDOM().querySelector(fixture.nativeElement, '#child');
expect(getDOM().hasClass(span, 'compiled')).toBeFalsy(); expect(hasClass(span, 'compiled')).toBeFalsy();
})); }));
it('should trigger directives on the same node', async(() => { it('should trigger directives on the same node', async(() => {
@ -45,7 +46,7 @@ import {expect} from '@angular/platform-browser/testing/src/matchers';
const fixture = createTestComponent(template); const fixture = createTestComponent(template);
fixture.detectChanges(); fixture.detectChanges();
const span = getDOM().querySelector(fixture.nativeElement, '#child'); const span = getDOM().querySelector(fixture.nativeElement, '#child');
expect(getDOM().hasClass(span, 'compiled')).toBeTruthy(); expect(hasClass(span, 'compiled')).toBeTruthy();
})); }));
}); });
} }

View File

@ -13,6 +13,7 @@ import {TestBed, fakeAsync, flushMicrotasks} from '@angular/core/testing';
import {ɵDomRendererFactory2} from '@angular/platform-browser'; import {ɵDomRendererFactory2} from '@angular/platform-browser';
import {ANIMATION_MODULE_TYPE, BrowserAnimationsModule, NoopAnimationsModule} from '@angular/platform-browser/animations'; import {ANIMATION_MODULE_TYPE, BrowserAnimationsModule, NoopAnimationsModule} from '@angular/platform-browser/animations';
import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter';
import {hasStyle} from '@angular/platform-browser/testing/src/browser_util';
import {ivyEnabled, modifiedInIvy} from '@angular/private/testing'; import {ivyEnabled, modifiedInIvy} from '@angular/private/testing';
const DEFAULT_NAMESPACE_ID = 'id'; const DEFAULT_NAMESPACE_ID = 'id';
@ -1446,8 +1447,7 @@ const DEFAULT_COMPONENT_ID = '1';
const player = engine.players.pop(); const player = engine.players.pop();
player.finish(); player.finish();
expect(getDOM().hasStyle(cmp.element.nativeElement, 'background-color', 'green')) expect(hasStyle(cmp.element.nativeElement, 'background-color', 'green')).toBeTruthy();
.toBeTruthy();
}); });
it('should retain state styles when the underlying DOM structure changes even if there are no insert/remove animations', it('should retain state styles when the underlying DOM structure changes even if there are no insert/remove animations',
@ -2039,7 +2039,7 @@ const DEFAULT_COMPONENT_ID = '1';
player.finish(); player.finish();
flushMicrotasks(); flushMicrotasks();
expect(getDOM().hasStyle(element, 'color', 'red')).toBeTruthy(); expect(hasStyle(element, 'color', 'red')).toBeTruthy();
cmp.exp = '1'; cmp.exp = '1';
cmp.color = 'blue'; cmp.color = 'blue';
@ -2047,7 +2047,7 @@ const DEFAULT_COMPONENT_ID = '1';
resetLog(); resetLog();
flushMicrotasks(); flushMicrotasks();
expect(getDOM().hasStyle(element, 'color', 'blue')).toBeTruthy(); expect(hasStyle(element, 'color', 'blue')).toBeTruthy();
cmp.exp = '1'; cmp.exp = '1';
cmp.color = null; cmp.color = null;
@ -2055,7 +2055,7 @@ const DEFAULT_COMPONENT_ID = '1';
resetLog(); resetLog();
flushMicrotasks(); flushMicrotasks();
expect(getDOM().hasStyle(element, 'color', 'black')).toBeTruthy(); expect(hasStyle(element, 'color', 'black')).toBeTruthy();
})); }));
it('should substitute in values if the provided state match is an object with values', () => { it('should substitute in values if the provided state match is an object with values', () => {
@ -2157,9 +2157,9 @@ const DEFAULT_COMPONENT_ID = '1';
p1.finish(); p1.finish();
flushMicrotasks(); flushMicrotasks();
expect(getDOM().hasStyle(element, 'color', 'blue')).toBeTruthy(); expect(hasStyle(element, 'color', 'blue')).toBeTruthy();
expect(getDOM().hasStyle(element, 'fontSize', '50px')).toBeTruthy(); expect(hasStyle(element, 'fontSize', '50px')).toBeTruthy();
expect(getDOM().hasStyle(element, 'width', '888px')).toBeTruthy(); expect(hasStyle(element, 'width', '888px')).toBeTruthy();
})); }));
it('should only evaluate final state param substitutions from the expression and state values and not from the transition options ', it('should only evaluate final state param substitutions from the expression and state values and not from the transition options ',
@ -2223,8 +2223,8 @@ const DEFAULT_COMPONENT_ID = '1';
p1.finish(); p1.finish();
flushMicrotasks(); flushMicrotasks();
expect(getDOM().hasStyle(element, 'width', '100px')).toBeTruthy(); expect(hasStyle(element, 'width', '100px')).toBeTruthy();
expect(getDOM().hasStyle(element, 'height', '100px')).toBeTruthy(); expect(hasStyle(element, 'height', '100px')).toBeTruthy();
})); }));
it('should not flush animations twice when an inner component runs change detection', () => { it('should not flush animations twice when an inner component runs change detection', () => {

View File

@ -12,6 +12,7 @@ import {Component, DebugNode, Directive, ElementRef, EmbeddedViewRef, EventEmitt
import {ComponentFixture, TestBed, async} from '@angular/core/testing'; import {ComponentFixture, TestBed, async} from '@angular/core/testing';
import {By} from '@angular/platform-browser/src/dom/debug/by'; import {By} from '@angular/platform-browser/src/dom/debug/by';
import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter';
import {hasClass} from '@angular/platform-browser/testing/src/browser_util';
import {expect} from '@angular/platform-browser/testing/src/matchers'; import {expect} from '@angular/platform-browser/testing/src/matchers';
import {ivyEnabled} from '@angular/private/testing'; import {ivyEnabled} from '@angular/private/testing';
@ -254,24 +255,24 @@ class TestCmptWithPropBindings {
// The root component has 3 elements in its view. // The root component has 3 elements in its view.
expect(childEls.length).toEqual(3); expect(childEls.length).toEqual(3);
expect(getDOM().hasClass(childEls[0].nativeElement, 'parent')).toBe(true); expect(hasClass(childEls[0].nativeElement, 'parent')).toBe(true);
expect(getDOM().hasClass(childEls[1].nativeElement, 'parent')).toBe(true); expect(hasClass(childEls[1].nativeElement, 'parent')).toBe(true);
expect(getDOM().hasClass(childEls[2].nativeElement, 'child-comp-class')).toBe(true); expect(hasClass(childEls[2].nativeElement, 'child-comp-class')).toBe(true);
const nested = childEls[0].children; const nested = childEls[0].children;
expect(nested.length).toEqual(1); expect(nested.length).toEqual(1);
expect(getDOM().hasClass(nested[0].nativeElement, 'parentnested')).toBe(true); expect(hasClass(nested[0].nativeElement, 'parentnested')).toBe(true);
const childComponent = childEls[2]; const childComponent = childEls[2];
const childCompChildren = childComponent.children; const childCompChildren = childComponent.children;
expect(childCompChildren.length).toEqual(2); expect(childCompChildren.length).toEqual(2);
expect(getDOM().hasClass(childCompChildren[0].nativeElement, 'child')).toBe(true); expect(hasClass(childCompChildren[0].nativeElement, 'child')).toBe(true);
expect(getDOM().hasClass(childCompChildren[1].nativeElement, 'child')).toBe(true); expect(hasClass(childCompChildren[1].nativeElement, 'child')).toBe(true);
const childNested = childCompChildren[0].children; const childNested = childCompChildren[0].children;
expect(childNested.length).toEqual(1); expect(childNested.length).toEqual(1);
expect(getDOM().hasClass(childNested[0].nativeElement, 'childnested')).toBe(true); expect(hasClass(childNested[0].nativeElement, 'childnested')).toBe(true);
}); });
it('should list conditional component child elements', () => { it('should list conditional component child elements', () => {
@ -282,8 +283,8 @@ class TestCmptWithPropBindings {
// The root component has 2 elements in its view. // The root component has 2 elements in its view.
expect(childEls.length).toEqual(2); expect(childEls.length).toEqual(2);
expect(getDOM().hasClass(childEls[0].nativeElement, 'parent')).toBe(true); expect(hasClass(childEls[0].nativeElement, 'parent')).toBe(true);
expect(getDOM().hasClass(childEls[1].nativeElement, 'cond-content-comp-class')).toBe(true); expect(hasClass(childEls[1].nativeElement, 'cond-content-comp-class')).toBe(true);
const conditionalContentComp = childEls[1]; const conditionalContentComp = childEls[1];
@ -353,7 +354,7 @@ class TestCmptWithPropBindings {
const childTestEls = fixture.debugElement.queryAll(By.css('child-comp')); const childTestEls = fixture.debugElement.queryAll(By.css('child-comp'));
expect(childTestEls.length).toBe(1); expect(childTestEls.length).toBe(1);
expect(getDOM().hasClass(childTestEls[0].nativeElement, 'child-comp-class')).toBe(true); expect(hasClass(childTestEls[0].nativeElement, 'child-comp-class')).toBe(true);
}); });
it('should query child elements by directive', () => { it('should query child elements by directive', () => {
@ -363,10 +364,10 @@ class TestCmptWithPropBindings {
const childTestEls = fixture.debugElement.queryAll(By.directive(MessageDir)); const childTestEls = fixture.debugElement.queryAll(By.directive(MessageDir));
expect(childTestEls.length).toBe(4); expect(childTestEls.length).toBe(4);
expect(getDOM().hasClass(childTestEls[0].nativeElement, 'parent')).toBe(true); expect(hasClass(childTestEls[0].nativeElement, 'parent')).toBe(true);
expect(getDOM().hasClass(childTestEls[1].nativeElement, 'parentnested')).toBe(true); expect(hasClass(childTestEls[1].nativeElement, 'parentnested')).toBe(true);
expect(getDOM().hasClass(childTestEls[2].nativeElement, 'child')).toBe(true); expect(hasClass(childTestEls[2].nativeElement, 'child')).toBe(true);
expect(getDOM().hasClass(childTestEls[3].nativeElement, 'childnested')).toBe(true); expect(hasClass(childTestEls[3].nativeElement, 'childnested')).toBe(true);
}); });
it('should query projected child elements by directive', () => { it('should query projected child elements by directive', () => {

View File

@ -139,8 +139,8 @@ const removeEventListener = '__zone_symbol__removeEventListener' as 'removeEvent
Services.checkAndUpdateView(view); Services.checkAndUpdateView(view);
const el = rootNodes[0]; const el = rootNodes[0];
expect(getDOM().hasClass(el, 'c1')).toBeTruthy(); expect(el.classList.contains('c1')).toBeTruthy();
expect(getDOM().hasClass(el, 'c2')).toBeTruthy(); expect(el.classList.contains('c2')).toBeTruthy();
}); });
}); });
}); });

View File

@ -11,7 +11,7 @@ import {ComponentFixture, TestBed, fakeAsync, tick} from '@angular/core/testing'
import {AbstractControl, AsyncValidator, AsyncValidatorFn, COMPOSITION_BUFFER_MODE, FormArray, FormControl, FormControlDirective, FormControlName, FormGroup, FormGroupDirective, FormsModule, NG_ASYNC_VALIDATORS, NG_VALIDATORS, ReactiveFormsModule, Validators} from '@angular/forms'; import {AbstractControl, AsyncValidator, AsyncValidatorFn, COMPOSITION_BUFFER_MODE, FormArray, FormControl, FormControlDirective, FormControlName, FormGroup, FormGroupDirective, FormsModule, NG_ASYNC_VALIDATORS, NG_VALIDATORS, ReactiveFormsModule, Validators} from '@angular/forms';
import {By} from '@angular/platform-browser/src/dom/debug/by'; import {By} from '@angular/platform-browser/src/dom/debug/by';
import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter';
import {dispatchEvent} from '@angular/platform-browser/testing/src/browser_util'; import {dispatchEvent, sortedClassList} from '@angular/platform-browser/testing/src/browser_util';
import {merge, timer} from 'rxjs'; import {merge, timer} from 'rxjs';
import {tap} from 'rxjs/operators'; import {tap} from 'rxjs/operators';
@ -2464,10 +2464,6 @@ class UniqLoginValidator implements AsyncValidator {
validate(c: AbstractControl) { return uniqLoginAsyncValidator(this.expected)(c); } validate(c: AbstractControl) { return uniqLoginAsyncValidator(this.expected)(c); }
} }
function sortedClassList(el: HTMLElement) {
return getDOM().classList(el).sort();
}
@Component({selector: 'form-control-comp', template: `<input type="text" [formControl]="control">`}) @Component({selector: 'form-control-comp', template: `<input type="text" [formControl]="control">`})
class FormControlComp { class FormControlComp {
// TODO(issue/24571): remove '!'. // TODO(issue/24571): remove '!'.

View File

@ -11,7 +11,7 @@ import {ComponentFixture, TestBed, async, fakeAsync, tick} from '@angular/core/t
import {AbstractControl, AsyncValidator, COMPOSITION_BUFFER_MODE, FormControl, FormsModule, NG_ASYNC_VALIDATORS, NgForm, NgFormSelectorWarning, NgModel} from '@angular/forms'; import {AbstractControl, AsyncValidator, COMPOSITION_BUFFER_MODE, FormControl, FormsModule, NG_ASYNC_VALIDATORS, NgForm, NgFormSelectorWarning, NgModel} from '@angular/forms';
import {By} from '@angular/platform-browser/src/dom/debug/by'; import {By} from '@angular/platform-browser/src/dom/debug/by';
import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter';
import {dispatchEvent} from '@angular/platform-browser/testing/src/browser_util'; import {dispatchEvent, sortedClassList} from '@angular/platform-browser/testing/src/browser_util';
import {merge} from 'rxjs'; import {merge} from 'rxjs';
import {NgModelCustomComp, NgModelCustomWrapper} from './value_accessor_integration_spec'; import {NgModelCustomComp, NgModelCustomWrapper} from './value_accessor_integration_spec';
@ -1924,9 +1924,3 @@ class NgModelChangesForm {
class NgModelChangeState { class NgModelChangeState {
onNgModelChange = () => {}; onNgModelChange = () => {};
} }
function sortedClassList(el: HTMLElement) {
const l = getDOM().classList(el);
l.sort();
return l;
}

View File

@ -196,12 +196,8 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
getElementsByTagName(element: any, name: string): HTMLElement[] { getElementsByTagName(element: any, name: string): HTMLElement[] {
return element.getElementsByTagName(name); return element.getElementsByTagName(name);
} }
classList(element: any): any[] { return Array.prototype.slice.call(element.classList, 0); }
addClass(element: any, className: string) { element.classList.add(className); } addClass(element: any, className: string) { element.classList.add(className); }
removeClass(element: any, className: string) { element.classList.remove(className); } removeClass(element: any, className: string) { element.classList.remove(className); }
hasClass(element: any, className: string): boolean {
return element.classList.contains(className);
}
setStyle(element: any, styleName: string, styleValue: string) { setStyle(element: any, styleName: string, styleValue: string) {
element.style[styleName] = styleValue; element.style[styleName] = styleValue;
} }
@ -210,11 +206,8 @@ export class BrowserDomAdapter extends GenericBrowserDomAdapter {
// see https://github.com/angular/angular/issues/7916 // see https://github.com/angular/angular/issues/7916
element.style[stylename] = ''; element.style[stylename] = '';
} }
getStyle(element: any, stylename: string): string { return element.style[stylename]; } getStyle(element: any, stylename: string): string { return element.style[stylename]; }
hasStyle(element: any, styleName: string, styleValue?: string|null): boolean {
const value = this.getStyle(element, styleName) || '';
return styleValue ? value == styleValue : value.length > 0;
}
getAttribute(element: Element, attribute: string): string|null { getAttribute(element: Element, attribute: string): string|null {
return element.getAttribute(attribute); return element.getAttribute(attribute);

View File

@ -80,19 +80,16 @@ export abstract class DomAdapter {
abstract getDistributedNodes(el: any): Node[]; abstract getDistributedNodes(el: any): Node[];
abstract clone /*<T extends Node>*/ (node: Node /*T*/): Node /*T*/; abstract clone /*<T extends Node>*/ (node: Node /*T*/): Node /*T*/;
abstract getElementsByTagName(element: any, name: string): HTMLElement[]; abstract getElementsByTagName(element: any, name: string): HTMLElement[];
abstract classList(element: any): any[];
abstract addClass(element: any, className: string): any;
abstract removeClass(element: any, className: string): any;
abstract hasClass(element: any, className: string): boolean;
abstract setStyle(element: any, styleName: string, styleValue: string): any;
abstract removeStyle(element: any, styleName: string): any;
abstract getStyle(element: any, styleName: string): string;
abstract hasStyle(element: any, styleName: string, styleValue?: string): boolean;
// Used by Meta // Used by Meta
abstract getAttribute(element: any, attribute: string): string|null; abstract getAttribute(element: any, attribute: string): string|null;
// Used by platform-server // Used by platform-server
abstract addClass(element: any, className: string): any;
abstract removeClass(element: any, className: string): any;
abstract getStyle(element: any, styleName: string): any;
abstract setStyle(element: any, styleName: string, styleValue: string): any;
abstract removeStyle(element: any, styleName: string): any;
abstract setAttribute(element: any, name: string, value: string): any; abstract setAttribute(element: any, name: string, value: string): any;
abstract setAttributeNS(element: any, ns: string, name: string, value: string): any; abstract setAttributeNS(element: any, ns: string, name: string, value: string): any;
abstract removeAttribute(element: any, attribute: string): any; abstract removeAttribute(element: any, attribute: string): any;

View File

@ -199,3 +199,16 @@ export function setCookie(name: string, value: string) {
export function supportsWebAnimation(): boolean { export function supportsWebAnimation(): boolean {
return typeof(<any>Element).prototype['animate'] === 'function'; return typeof(<any>Element).prototype['animate'] === 'function';
} }
export function hasStyle(element: any, styleName: string, styleValue?: string | null): boolean {
const value = element.style[styleName] || '';
return styleValue ? value == styleValue : value.length > 0;
}
export function hasClass(element: any, className: string): boolean {
return element.classList.contains(className);
}
export function sortedClassList(element: any): any[] {
return Array.prototype.slice.call(element.classList, 0).sort();
}

View File

@ -10,7 +10,8 @@
import {Type, ɵglobal as global} from '@angular/core'; import {Type, ɵglobal as global} from '@angular/core';
import {ComponentFixture} from '@angular/core/testing'; import {ComponentFixture} from '@angular/core/testing';
import {By, ɵgetDOM as getDOM} from '@angular/platform-browser'; import {By, ɵgetDOM as getDOM} from '@angular/platform-browser';
import {isCommentNode} from './browser_util';
import {hasClass, hasStyle, isCommentNode} from './browser_util';
@ -186,7 +187,7 @@ _global.beforeEach(function() {
function buildError(isNot: boolean) { function buildError(isNot: boolean) {
return function(actual: any, className: string) { return function(actual: any, className: string) {
return { return {
pass: getDOM().hasClass(actual, className) == !isNot, pass: hasClass(actual, className) == !isNot,
get message() { get message() {
return `Expected ${actual.outerHTML} ${isNot ? 'not ' : ''}to contain the CSS class "${className}"`; return `Expected ${actual.outerHTML} ${isNot ? 'not ' : ''}to contain the CSS class "${className}"`;
} }
@ -200,12 +201,11 @@ _global.beforeEach(function() {
compare: function(actual: any, styles: {[k: string]: string}|string) { compare: function(actual: any, styles: {[k: string]: string}|string) {
let allPassed: boolean; let allPassed: boolean;
if (typeof styles === 'string') { if (typeof styles === 'string') {
allPassed = getDOM().hasStyle(actual, styles); allPassed = hasStyle(actual, styles);
} else { } else {
allPassed = Object.keys(styles).length !== 0; allPassed = Object.keys(styles).length !== 0;
Object.keys(styles).forEach(prop => { Object.keys(styles).forEach(
allPassed = allPassed && getDOM().hasStyle(actual, prop, styles[prop]); prop => { allPassed = allPassed && hasStyle(actual, prop, styles[prop]); });
});
} }
return { return {

View File

@ -162,6 +162,7 @@ export class DominoAdapter extends BrowserDomAdapter {
} }
element.setAttribute('style', styleAttrValue); element.setAttribute('style', styleAttrValue);
} }
setStyle(element: any, styleName: string, styleValue?: string|null) { setStyle(element: any, styleName: string, styleValue?: string|null) {
styleName = styleName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); styleName = styleName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
const styleMap = this._readStyleAttribute(element); const styleMap = this._readStyleAttribute(element);
@ -173,14 +174,11 @@ export class DominoAdapter extends BrowserDomAdapter {
// see https://github.com/angular/angular/issues/7916 // see https://github.com/angular/angular/issues/7916
this.setStyle(element, styleName, ''); this.setStyle(element, styleName, '');
} }
getStyle(element: any, styleName: string): string { getStyle(element: any, styleName: string): string {
const styleMap = this._readStyleAttribute(element); const styleMap = this._readStyleAttribute(element);
return styleMap[styleName] || ''; return styleMap[styleName] || '';
} }
hasStyle(element: any, styleName: string, styleValue?: string): boolean {
const value = this.getStyle(element, styleName);
return styleValue ? value == styleValue : value.length > 0;
}
dispatchEvent(el: Node, evt: any) { dispatchEvent(el: Node, evt: any) {
el.dispatchEvent(evt); el.dispatchEvent(evt);

View File

@ -89,16 +89,11 @@ export class WorkerDomAdapter extends DomAdapter {
getDistributedNodes(el: any): Node[] { throw 'not implemented'; } getDistributedNodes(el: any): Node[] { throw 'not implemented'; }
clone(node: Node): Node { throw 'not implemented'; } clone(node: Node): Node { throw 'not implemented'; }
getElementsByTagName(element: any, name: string): HTMLElement[] { throw 'not implemented'; } getElementsByTagName(element: any, name: string): HTMLElement[] { throw 'not implemented'; }
classList(element: any): any[] { throw 'not implemented'; }
addClass(element: any, className: string) { throw 'not implemented'; } addClass(element: any, className: string) { throw 'not implemented'; }
removeClass(element: any, className: string) { throw 'not implemented'; } removeClass(element: any, className: string) { throw 'not implemented'; }
hasClass(element: any, className: string): boolean { throw 'not implemented'; }
setStyle(element: any, styleName: string, styleValue: string) { throw 'not implemented'; } setStyle(element: any, styleName: string, styleValue: string) { throw 'not implemented'; }
removeStyle(element: any, styleName: string) { throw 'not implemented'; } removeStyle(element: any, styleName: string) { throw 'not implemented'; }
getStyle(element: any, styleName: string): string { throw 'not implemented'; } getStyle(element: any, styleName: string): string { throw 'not implemented'; }
hasStyle(element: any, styleName: string, styleValue?: string): boolean {
throw 'not implemented';
}
getAttribute(element: any, attribute: string): string { throw 'not implemented'; } getAttribute(element: any, attribute: string): string { throw 'not implemented'; }
setAttribute(element: any, name: string, value: string) { throw 'not implemented'; } setAttribute(element: any, name: string, value: string) { throw 'not implemented'; }
setAttributeNS(element: any, ns: string, name: string, value: string) { throw 'not implemented'; } setAttributeNS(element: any, ns: string, name: string, value: string) { throw 'not implemented'; }

View File

@ -12,7 +12,7 @@ import {platformBrowserDynamicTesting} from '@angular/platform-browser-dynamic/t
import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter'; import {getDOM} from '@angular/platform-browser/src/dom/dom_adapter';
import {DomRendererFactory2} from '@angular/platform-browser/src/dom/dom_renderer'; import {DomRendererFactory2} from '@angular/platform-browser/src/dom/dom_renderer';
import {BrowserTestingModule} from '@angular/platform-browser/testing'; import {BrowserTestingModule} from '@angular/platform-browser/testing';
import {browserDetection, dispatchEvent} from '@angular/platform-browser/testing/src/browser_util'; import {browserDetection, dispatchEvent, hasClass} from '@angular/platform-browser/testing/src/browser_util';
import {expect} from '@angular/platform-browser/testing/src/matchers'; import {expect} from '@angular/platform-browser/testing/src/matchers';
import {ClientMessageBrokerFactory} from '@angular/platform-webworker/src/web_workers/shared/client_message_broker'; import {ClientMessageBrokerFactory} from '@angular/platform-webworker/src/web_workers/shared/client_message_broker';
import {RenderStore} from '@angular/platform-webworker/src/web_workers/shared/render_store'; import {RenderStore} from '@angular/platform-webworker/src/web_workers/shared/render_store';
@ -109,10 +109,10 @@ let lastCreatedRenderer: Renderer2;
expect(el.tabIndex).toEqual(1); expect(el.tabIndex).toEqual(1);
lastCreatedRenderer.addClass(workerEl, 'a'); lastCreatedRenderer.addClass(workerEl, 'a');
expect(getDOM().hasClass(el, 'a')).toBe(true); expect(hasClass(el, 'a')).toBe(true);
lastCreatedRenderer.removeClass(workerEl, 'a'); lastCreatedRenderer.removeClass(workerEl, 'a');
expect(getDOM().hasClass(el, 'a')).toBe(false); expect(hasClass(el, 'a')).toBe(false);
lastCreatedRenderer.setStyle(workerEl, 'width', '10px'); lastCreatedRenderer.setStyle(workerEl, 'width', '10px');
expect(getDOM().getStyle(el, 'width')).toEqual('10px'); expect(getDOM().getStyle(el, 'width')).toEqual('10px');