Skip to content

Commit 7a41b19

Browse files
test(PropertySetterFactory): add more tests
There are upcoming changes to the way we generate and verify setters so more test are needed to cover all the corner cases that are being handled today. Closes angular#2559
1 parent bc9e482 commit 7a41b19

File tree

1 file changed

+108
-43
lines changed

1 file changed

+108
-43
lines changed

modules/angular2/test/render/dom/view/property_setter_factory_spec.ts

Lines changed: 108 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,10 @@ import {PropertySetterFactory} from 'angular2/src/render/dom/view/property_sette
1414
import {DOM} from 'angular2/src/dom/dom_adapter';
1515

1616
export function main() {
17-
var div, setterFactory;
17+
var div, input, setterFactory;
1818
beforeEach(() => {
1919
div = el('<div></div>');
20+
input = el('<input>');
2021
setterFactory = new PropertySetterFactory();
2122
});
2223
describe('property setter factory', () => {
@@ -66,59 +67,123 @@ export function main() {
6667

6768
});
6869

69-
it('should return a setter for an attribute', () => {
70-
var setterFn = setterFactory.createSetter(div, false, 'attr.role');
71-
setterFn(div, 'button');
72-
expect(DOM.getAttribute(div, 'role')).toEqual('button');
73-
setterFn(div, null);
74-
expect(DOM.getAttribute(div, 'role')).toEqual(null);
75-
expect(() => { setterFn(div, 4); })
76-
.toThrowError("Invalid role attribute, only string values are allowed, got '4'");
77-
78-
var otherSetterFn = setterFactory.createSetter(div, false, 'attr.role');
79-
expect(setterFn).toBe(otherSetterFn);
80-
});
70+
describe('non-standard property setters', () => {
71+
72+
it('should map readonly name to readOnly property', () => {
73+
var setterFn = setterFactory.createSetter(input, false, 'readonly');
74+
expect(input.readOnly).toBeFalsy();
75+
setterFn(input, true);
76+
expect(input.readOnly).toBeTruthy();
77+
78+
var otherSetterFn = setterFactory.createSetter(input, false, 'readonly');
79+
expect(setterFn).toBe(otherSetterFn);
80+
});
8181

82-
it('should return a setter for a class', () => {
83-
var setterFn = setterFactory.createSetter(div, false, 'class.active');
84-
setterFn(div, true);
85-
expect(DOM.hasClass(div, 'active')).toEqual(true);
86-
setterFn(div, false);
87-
expect(DOM.hasClass(div, 'active')).toEqual(false);
82+
it('should return a setter for innerHtml', () => {
83+
var setterFn = setterFactory.createSetter(div, false, 'innerHtml');
84+
setterFn(div, '<span></span>');
85+
expect(DOM.getInnerHTML(div)).toEqual('<span></span>');
86+
87+
var otherSetterFn = setterFactory.createSetter(div, false, 'innerHtml');
88+
expect(setterFn).toBe(otherSetterFn);
89+
});
90+
91+
it('should return a setter for tabIndex', () => {
92+
var setterFn = setterFactory.createSetter(div, false, 'tabindex');
93+
setterFn(div, 1);
94+
expect(div.tabIndex).toEqual(1);
95+
96+
var otherSetterFn = setterFactory.createSetter(div, false, 'tabindex');
97+
expect(setterFn).toBe(otherSetterFn);
98+
});
8899

89-
var otherSetterFn = setterFactory.createSetter(div, false, 'class.active');
90-
expect(setterFn).toBe(otherSetterFn);
91100
});
92101

93-
it('should return a setter for a style', () => {
94-
var setterFn = setterFactory.createSetter(div, false, 'style.width');
95-
setterFn(div, '40px');
96-
expect(DOM.getStyle(div, 'width')).toEqual('40px');
97-
setterFn(div, null);
98-
expect(DOM.getStyle(div, 'width')).toEqual('');
102+
describe('attribute setters', () => {
103+
104+
it('should return a setter for an attribute', () => {
105+
var setterFn = setterFactory.createSetter(div, false, 'attr.role');
106+
setterFn(div, 'button');
107+
expect(DOM.getAttribute(div, 'role')).toEqual('button');
108+
setterFn(div, null);
109+
expect(DOM.getAttribute(div, 'role')).toEqual(null);
110+
expect(() => { setterFn(div, 4); })
111+
.toThrowError("Invalid role attribute, only string values are allowed, got '4'");
99112

100-
var otherSetterFn = setterFactory.createSetter(div, false, 'style.width');
101-
expect(setterFn).toBe(otherSetterFn);
113+
var otherSetterFn = setterFactory.createSetter(div, false, 'attr.role');
114+
expect(setterFn).toBe(otherSetterFn);
115+
});
116+
117+
it('should de-normalize attribute names', () => {
118+
var setterFn = setterFactory.createSetter(div, false, 'attr.ariaLabel');
119+
setterFn(div, 'fancy button');
120+
expect(DOM.getAttribute(div, 'aria-label')).toEqual('fancy button');
121+
122+
var otherSetterFn = setterFactory.createSetter(div, false, 'attr.ariaLabel');
123+
expect(setterFn).toBe(otherSetterFn);
124+
});
102125
});
103126

104-
it('should return a setter for a style with a unit', () => {
105-
var setterFn = setterFactory.createSetter(div, false, 'style.height.px');
106-
setterFn(div, 40);
107-
expect(DOM.getStyle(div, 'height')).toEqual('40px');
108-
setterFn(div, null);
109-
expect(DOM.getStyle(div, 'height')).toEqual('');
127+
describe('classList setters', () => {
110128

111-
var otherSetterFn = setterFactory.createSetter(div, false, 'style.height.px');
112-
expect(setterFn).toBe(otherSetterFn);
129+
it('should return a setter for a class', () => {
130+
var setterFn = setterFactory.createSetter(div, false, 'class.active');
131+
setterFn(div, true);
132+
expect(DOM.hasClass(div, 'active')).toEqual(true);
133+
setterFn(div, false);
134+
expect(DOM.hasClass(div, 'active')).toEqual(false);
135+
136+
var otherSetterFn = setterFactory.createSetter(div, false, 'class.active');
137+
expect(setterFn).toBe(otherSetterFn);
138+
});
139+
140+
it('should de-normalize class names', () => {
141+
var setterFn = setterFactory.createSetter(div, false, 'class.veryActive');
142+
setterFn(div, true);
143+
expect(DOM.hasClass(div, 'very-active')).toEqual(true);
144+
setterFn(div, false);
145+
expect(DOM.hasClass(div, 'very-active')).toEqual(false);
146+
147+
var otherSetterFn = setterFactory.createSetter(div, false, 'class.veryActive');
148+
expect(setterFn).toBe(otherSetterFn);
149+
});
113150
});
114151

115-
it('should return a setter for innerHtml', () => {
116-
var setterFn = setterFactory.createSetter(div, false, 'innerHtml');
117-
setterFn(div, '<span></span>');
118-
expect(DOM.getInnerHTML(div)).toEqual('<span></span>');
152+
describe('style setters', () => {
153+
154+
it('should return a setter for a style', () => {
155+
var setterFn = setterFactory.createSetter(div, false, 'style.width');
156+
setterFn(div, '40px');
157+
expect(DOM.getStyle(div, 'width')).toEqual('40px');
158+
setterFn(div, null);
159+
expect(DOM.getStyle(div, 'width')).toEqual('');
160+
161+
var otherSetterFn = setterFactory.createSetter(div, false, 'style.width');
162+
expect(setterFn).toBe(otherSetterFn);
163+
});
164+
165+
it('should de-normalize style names', () => {
166+
var setterFn = setterFactory.createSetter(div, false, 'style.textAlign');
167+
setterFn(div, 'right');
168+
expect(DOM.getStyle(div, 'text-align')).toEqual('right');
169+
setterFn(div, null);
170+
expect(DOM.getStyle(div, 'text-align')).toEqual('');
171+
172+
var otherSetterFn = setterFactory.createSetter(div, false, 'style.textAlign');
173+
expect(setterFn).toBe(otherSetterFn);
174+
});
175+
176+
it('should return a setter for a style with a unit', () => {
177+
var setterFn = setterFactory.createSetter(div, false, 'style.height.px');
178+
setterFn(div, 40);
179+
expect(DOM.getStyle(div, 'height')).toEqual('40px');
180+
setterFn(div, null);
181+
expect(DOM.getStyle(div, 'height')).toEqual('');
182+
183+
var otherSetterFn = setterFactory.createSetter(div, false, 'style.height.px');
184+
expect(setterFn).toBe(otherSetterFn);
185+
});
119186

120-
var otherSetterFn = setterFactory.createSetter(div, false, 'innerHtml');
121-
expect(setterFn).toBe(otherSetterFn);
122187
});
123188

124189
});

0 commit comments

Comments
 (0)