@@ -14,9 +14,10 @@ import {PropertySetterFactory} from 'angular2/src/render/dom/view/property_sette
1414import { DOM } from 'angular2/src/dom/dom_adapter' ;
1515
1616export 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