77 xdescribe ,
88 expect ,
99 beforeEach ,
10- el
10+ el ,
11+ IS_DARTIUM
1112} from 'angular2/test_lib' ;
1213import { PropertySetterFactory } from 'angular2/src/render/dom/view/property_setter_factory' ;
1314import { DOM } from 'angular2/src/dom/dom_adapter' ;
@@ -20,67 +21,100 @@ export function main() {
2021 } ) ;
2122 describe ( 'property setter factory' , ( ) => {
2223
23- it ( 'should return a setter for a property' , ( ) => {
24- var setterFn = setterFactory . createSetter ( 'title' ) ;
25- setterFn ( div , 'Hello' ) ;
26- expect ( div . title ) . toEqual ( 'Hello' ) ;
24+ describe ( 'property setters' , ( ) => {
25+
26+ it ( 'should set an existing property' , ( ) => {
27+ var setterFn = setterFactory . createSetter ( div , false , 'title' ) ;
28+ setterFn ( div , 'Hello' ) ;
29+ expect ( div . title ) . toEqual ( 'Hello' ) ;
30+
31+ var otherSetterFn = setterFactory . createSetter ( div , false , 'title' ) ;
32+ expect ( setterFn ) . toBe ( otherSetterFn ) ;
33+ } ) ;
34+
35+ if ( ! IS_DARTIUM ) {
36+ it ( 'should use a noop setter if the property did not exist when the setter was created' , ( ) => {
37+ var setterFn = setterFactory . createSetter ( div , false , 'someProp' ) ;
38+ div . someProp = '' ;
39+ setterFn ( div , 'Hello' ) ;
40+ expect ( div . someProp ) . toEqual ( '' ) ;
41+ } ) ;
42+
43+ it ( 'should use a noop setter if the property did not exist when the setter was created for ng components' , ( ) => {
44+ var ce = el ( '<some-ce></some-ce>' ) ;
45+ var setterFn = setterFactory . createSetter ( ce , true , 'someProp' ) ;
46+ ce . someProp = '' ;
47+ setterFn ( ce , 'Hello' ) ;
48+ expect ( ce . someProp ) . toEqual ( '' ) ;
49+ } ) ;
50+
51+ it ( 'should set the property for custom elements even if it was not present when the setter was created' , ( ) => {
52+ var ce = el ( '<some-ce></some-ce>' ) ;
53+ var setterFn = setterFactory . createSetter ( ce , false , 'someProp' ) ;
54+ ce . someProp = '' ;
55+ // Our CJS DOM adapter does not support custom properties,
56+ // need to exclude here.
57+ if ( DOM . hasProperty ( ce , 'someProp' ) ) {
58+ setterFn ( ce , 'Hello' ) ;
59+ expect ( ce . someProp ) . toEqual ( 'Hello' ) ;
60+ }
61+ } ) ;
62+ }
2763
28- var otherSetterFn = setterFactory . createSetter ( 'title' ) ;
29- expect ( setterFn ) . toBe ( otherSetterFn ) ;
3064 } ) ;
3165
3266 it ( 'should return a setter for an attribute' , ( ) => {
33- var setterFn = setterFactory . createSetter ( 'attr.role' ) ;
67+ var setterFn = setterFactory . createSetter ( div , false , 'attr.role' ) ;
3468 setterFn ( div , 'button' ) ;
3569 expect ( DOM . getAttribute ( div , 'role' ) ) . toEqual ( 'button' ) ;
3670 setterFn ( div , null ) ;
3771 expect ( DOM . getAttribute ( div , 'role' ) ) . toEqual ( null ) ;
3872 expect ( ( ) => { setterFn ( div , 4 ) ; } )
3973 . toThrowError ( "Invalid role attribute, only string values are allowed, got '4'" ) ;
4074
41- var otherSetterFn = setterFactory . createSetter ( 'attr.role' ) ;
75+ var otherSetterFn = setterFactory . createSetter ( div , false , 'attr.role' ) ;
4276 expect ( setterFn ) . toBe ( otherSetterFn ) ;
4377 } ) ;
4478
4579 it ( 'should return a setter for a class' , ( ) => {
46- var setterFn = setterFactory . createSetter ( 'class.active' ) ;
80+ var setterFn = setterFactory . createSetter ( div , false , 'class.active' ) ;
4781 setterFn ( div , true ) ;
4882 expect ( DOM . hasClass ( div , 'active' ) ) . toEqual ( true ) ;
4983 setterFn ( div , false ) ;
5084 expect ( DOM . hasClass ( div , 'active' ) ) . toEqual ( false ) ;
5185
52- var otherSetterFn = setterFactory . createSetter ( 'class.active' ) ;
86+ var otherSetterFn = setterFactory . createSetter ( div , false , 'class.active' ) ;
5387 expect ( setterFn ) . toBe ( otherSetterFn ) ;
5488 } ) ;
5589
5690 it ( 'should return a setter for a style' , ( ) => {
57- var setterFn = setterFactory . createSetter ( 'style.width' ) ;
91+ var setterFn = setterFactory . createSetter ( div , false , 'style.width' ) ;
5892 setterFn ( div , '40px' ) ;
5993 expect ( DOM . getStyle ( div , 'width' ) ) . toEqual ( '40px' ) ;
6094 setterFn ( div , null ) ;
6195 expect ( DOM . getStyle ( div , 'width' ) ) . toEqual ( '' ) ;
6296
63- var otherSetterFn = setterFactory . createSetter ( 'style.width' ) ;
97+ var otherSetterFn = setterFactory . createSetter ( div , false , 'style.width' ) ;
6498 expect ( setterFn ) . toBe ( otherSetterFn ) ;
6599 } ) ;
66100
67101 it ( 'should return a setter for a style with a unit' , ( ) => {
68- var setterFn = setterFactory . createSetter ( 'style.height.px' ) ;
102+ var setterFn = setterFactory . createSetter ( div , false , 'style.height.px' ) ;
69103 setterFn ( div , 40 ) ;
70104 expect ( DOM . getStyle ( div , 'height' ) ) . toEqual ( '40px' ) ;
71105 setterFn ( div , null ) ;
72106 expect ( DOM . getStyle ( div , 'height' ) ) . toEqual ( '' ) ;
73107
74- var otherSetterFn = setterFactory . createSetter ( 'style.height.px' ) ;
108+ var otherSetterFn = setterFactory . createSetter ( div , false , 'style.height.px' ) ;
75109 expect ( setterFn ) . toBe ( otherSetterFn ) ;
76110 } ) ;
77111
78112 it ( 'should return a setter for innerHtml' , ( ) => {
79- var setterFn = setterFactory . createSetter ( 'innerHtml' ) ;
113+ var setterFn = setterFactory . createSetter ( div , false , 'innerHtml' ) ;
80114 setterFn ( div , '<span></span>' ) ;
81115 expect ( DOM . getInnerHTML ( div ) ) . toEqual ( '<span></span>' ) ;
82116
83- var otherSetterFn = setterFactory . createSetter ( 'innerHtml' ) ;
117+ var otherSetterFn = setterFactory . createSetter ( div , false , 'innerHtml' ) ;
84118 expect ( setterFn ) . toBe ( otherSetterFn ) ;
85119 } ) ;
86120
0 commit comments