OLD | NEW |
1 library ng_class_spec; | 1 library ng_class_spec; |
2 | 2 |
3 import '../_specs.dart'; | 3 import '../_specs.dart'; |
4 | 4 |
5 main() { | 5 main() { |
6 describe('ngClass', () { | 6 describe('ngClass', () { |
7 TestBed _; | 7 TestBed _; |
8 | 8 |
9 beforeEach(inject((TestBed tb) => _ = tb)); | 9 beforeEach((TestBed tb) => _ = tb); |
10 | 10 |
11 it('should add new and remove old classes dynamically', () { | 11 it('should add new and remove old classes dynamically', () { |
12 var element = _.compile('<div class="existing" ng-class="dynClass"></div>'
); | 12 var element = _.compile('<div class="existing" ng-class="dynClass"></div>'
); |
13 _.rootScope.context['dynClass'] = 'A'; | 13 _.rootScope.context['dynClass'] = 'A'; |
14 _.rootScope.apply(); | 14 _.rootScope.apply(); |
15 expect(element.classes.contains('existing')).toBe(true); | 15 expect(element).toHaveClass('existing'); |
16 expect(element.classes.contains('A')).toBe(true); | 16 expect(element).toHaveClass('A'); |
17 | 17 |
18 _.rootScope.context['dynClass'] = 'B'; | 18 _.rootScope.context['dynClass'] = 'B'; |
19 _.rootScope.apply(); | 19 _.rootScope.apply(); |
20 expect(element.classes.contains('existing')).toBe(true); | 20 expect(element).toHaveClass('existing'); |
21 expect(element.classes.contains('A')).toBe(false); | 21 expect(element).not.toHaveClass('A'); |
22 expect(element.classes.contains('B')).toBe(true); | 22 expect(element).toHaveClass('B'); |
23 | 23 |
24 _.rootScope.context['dynClass'] = null; | 24 _.rootScope.context['dynClass'] = null; |
25 _.rootScope.apply(); | 25 _.rootScope.apply(); |
26 expect(element.classes.contains('existing')).toBe(true); | 26 expect(element).toHaveClass('existing'); |
27 expect(element.classes.contains('A')).toBe(false); | 27 expect(element).not.toHaveClass('A'); |
28 expect(element.classes.contains('B')).toBe(false); | 28 expect(element).not.toHaveClass('B'); |
29 }); | 29 }); |
30 | 30 |
31 | 31 |
32 it('should support adding multiple classes via an array', () { | 32 it('should support adding multiple classes via an array', () { |
33 _.rootScope.context['a'] = 'a'; | 33 _.rootScope.context['a'] = 'a'; |
34 _.rootScope.context['b'] = ''; | 34 _.rootScope.context['b'] = ''; |
35 _.rootScope.context['c'] = null; | 35 _.rootScope.context['c'] = null; |
36 var element = _.compile('<div class="existing" ng-class="[\'literalA\', a,
b, c]"></div>'); | 36 var element = _.compile('<div class="existing" ng-class="[\'literalA\', a,
b, c]"></div>'); |
37 _.rootScope.apply(); | 37 _.rootScope.apply(); |
38 expect(element.classes.contains('existing')).toBeTruthy(); | 38 expect(element).toHaveClass('existing'); |
39 expect(element.classes.contains('a')).toBeTruthy(); | 39 expect(element).toHaveClass('a'); |
40 expect(element.classes.contains('b')).toBeFalsy(); | 40 expect(element).not.toHaveClass('b'); |
41 expect(element.classes.contains('c')).toBeFalsy(); | 41 expect(element).not.toHaveClass('c'); |
42 expect(element.classes.contains('null')).toBeFalsy(); | 42 expect(element).not.toHaveClass('null'); |
43 _.rootScope.context['a'] = null; | 43 _.rootScope.context['a'] = null; |
44 _.rootScope.context['b'] = 'b'; | 44 _.rootScope.context['b'] = 'b'; |
45 _.rootScope.context['c'] = 'c'; | 45 _.rootScope.context['c'] = 'c'; |
46 _.rootScope.apply(); | 46 _.rootScope.apply(); |
47 expect(element.classes.contains('a')).toBeFalsy(); | 47 expect(element).not.toHaveClass('a'); |
48 expect(element.classes.contains('b')).toBeTruthy(); | 48 expect(element).toHaveClass('b'); |
49 expect(element.classes.contains('c')).toBeTruthy(); | 49 expect(element).toHaveClass('c'); |
50 }); | 50 }); |
51 | 51 |
52 | 52 |
53 it('should support adding multiple classes conditionally via a map of class
names to boolean' + | 53 it('should support adding multiple classes conditionally via a map of class
names to boolean' + |
54 'expressions', () { | 54 'expressions', () { |
55 var element = _.compile( | 55 var element = _.compile( |
56 '<div class="existing" ' + | 56 '<div class="existing" ' + |
57 'ng-class="{A: conditionA, B: conditionB(), AnotB: conditionA&&!co
nditionB()}">' + | 57 'ng-class="{A: conditionA, B: conditionB(), AnotB: conditionA&&!co
nditionB()}">' + |
58 '</div>'); | 58 '</div>'); |
59 _.rootScope.context['conditionA'] = true; | 59 _.rootScope.context['conditionA'] = true; |
60 _.rootScope.context['conditionB'] = () { return false; }; | 60 _.rootScope.context['conditionB'] = () { return false; }; |
61 _.rootScope.apply(); | 61 _.rootScope.apply(); |
62 expect(element.classes.contains('existing')).toBeTruthy(); | 62 expect(element).toHaveClass('existing'); |
63 expect(element.classes.contains('A')).toBeTruthy(); | 63 expect(element).toHaveClass('A'); |
64 expect(element.classes.contains('B')).toBeFalsy(); | 64 expect(element).not.toHaveClass('B'); |
65 expect(element.classes.contains('AnotB')).toBeTruthy(); | 65 expect(element).toHaveClass('AnotB'); |
66 | 66 |
67 _.rootScope.context['conditionB'] = () { return true; }; | 67 _.rootScope.context['conditionB'] = () { return true; }; |
68 _.rootScope.apply(); | 68 _.rootScope.apply(); |
69 expect(element.classes.contains('existing')).toBeTruthy(); | 69 expect(element).toHaveClass('existing'); |
70 expect(element.classes.contains('A')).toBeTruthy(); | 70 expect(element).toHaveClass('A'); |
71 expect(element.classes.contains('B')).toBeTruthy(); | 71 expect(element).toHaveClass('B'); |
72 expect(element.classes.contains('AnotB')).toBeFalsy(); | 72 expect(element).not.toHaveClass('AnotB'); |
73 }); | 73 }); |
74 | 74 |
75 | 75 |
76 it('should remove classes when the referenced object is the same but its pro
perty is changed', | 76 it('should remove classes when the referenced object is the same but its pro
perty is changed', |
77 () { | 77 () { |
78 var element = _.compile('<div ng-class="classes"></div>'); | 78 var element = _.compile('<div ng-class="classes"></div>'); |
79 _.rootScope.context['classes'] = { 'A': true, 'B': true }; | 79 _.rootScope.context['classes'] = { 'A': true, 'B': true }; |
80 _.rootScope.apply(); | 80 _.rootScope.apply(); |
81 expect(element.classes.contains('A')).toBeTruthy(); | 81 expect(element).toHaveClass('A'); |
82 expect(element.classes.contains('B')).toBeTruthy(); | 82 expect(element).toHaveClass('B'); |
83 _.rootScope.context['classes']['A'] = false; | 83 _.rootScope.context['classes']['A'] = false; |
84 _.rootScope.apply(); | 84 _.rootScope.apply(); |
85 expect(element.classes.contains('A')).toBeFalsy(); | 85 expect(element).not.toHaveClass('A'); |
86 expect(element.classes.contains('B')).toBeTruthy(); | 86 expect(element).toHaveClass('B'); |
87 }); | 87 }); |
88 | 88 |
89 it('should support adding multiple classes via a space delimited string', ()
{ | 89 it('should support adding multiple classes via a space delimited string', ()
{ |
90 var element = _.compile('<div class="existing" ng-class="\'A B\'"></div>')
; | 90 var element = _.compile('<div class="existing" ng-class="\'A B\'"></div>')
; |
91 _.rootScope.apply(); | 91 _.rootScope.apply(); |
92 expect(element.classes.contains('existing')).toBeTruthy(); | 92 expect(element).toHaveClass('existing'); |
93 expect(element.classes.contains('A')).toBeTruthy(); | 93 expect(element).toHaveClass('A'); |
94 expect(element.classes.contains('B')).toBeTruthy(); | 94 expect(element).toHaveClass('B'); |
95 }); | 95 }); |
96 | 96 |
97 | 97 |
98 it('should preserve class added post compilation with pre-existing classes',
() { | 98 it('should preserve class added post compilation with pre-existing classes',
() { |
99 var element = _.compile('<div class="existing" ng-class="dynClass"></div>'
); | 99 var element = _.compile('<div class="existing" ng-class="dynClass"></div>'
); |
100 _.rootScope.context['dynClass'] = 'A'; | 100 _.rootScope.context['dynClass'] = 'A'; |
101 _.rootScope.apply(); | 101 _.rootScope.apply(); |
102 expect(element.classes.contains('existing')).toBe(true); | 102 expect(element).toHaveClass('existing'); |
103 | 103 |
104 // add extra class, change model and eval | 104 // add extra class, change model and eval |
105 element.classes.add('newClass'); | 105 element.classes.add('newClass'); |
106 _.rootScope.context['dynClass'] = 'B'; | 106 _.rootScope.context['dynClass'] = 'B'; |
107 _.rootScope.apply(); | 107 _.rootScope.apply(); |
108 | 108 |
109 expect(element.classes.contains('existing')).toBe(true); | 109 expect(element).toHaveClass('existing'); |
110 expect(element.classes.contains('B')).toBe(true); | 110 expect(element).toHaveClass('B'); |
111 expect(element.classes.contains('newClass')).toBe(true); | 111 expect(element).toHaveClass('newClass'); |
112 }); | 112 }); |
113 | 113 |
114 | 114 |
115 it('should preserve class added post compilation without pre-existing classe
s"', () { | 115 it('should preserve class added post compilation without pre-existing classe
s"', () { |
116 var element = _.compile('<div ng-class="dynClass"></div>'); | 116 var element = _.compile('<div ng-class="dynClass"></div>'); |
117 _.rootScope.context['dynClass'] = 'A'; | 117 _.rootScope.context['dynClass'] = 'A'; |
118 _.rootScope.apply(); | 118 _.rootScope.apply(); |
119 expect(element.classes.contains('A')).toBe(true); | 119 expect(element).toHaveClass('A'); |
120 | 120 |
121 // add extra class, change model and eval | 121 // add extra class, change model and eval |
122 element.classes.add('newClass'); | 122 element.classes.add('newClass'); |
123 _.rootScope.context['dynClass'] = 'B'; | 123 _.rootScope.context['dynClass'] = 'B'; |
124 _.rootScope.apply(); | 124 _.rootScope.apply(); |
125 | 125 |
126 expect(element.classes.contains('B')).toBe(true); | 126 expect(element).toHaveClass('B'); |
127 expect(element.classes.contains('newClass')).toBe(true); | 127 expect(element).toHaveClass('newClass'); |
128 }); | 128 }); |
129 | 129 |
130 | 130 |
131 it('should preserve other classes with similar name"', () { | 131 it('should preserve other classes with similar name"', () { |
132 var element = _.compile('<div class="ui-panel ui-selected" ng-class="dynCl
s"></div>'); | 132 var element = _.compile('<div class="ui-panel ui-selected" ng-class="dynCl
s"></div>'); |
133 _.rootScope.context['dynCls'] = 'panel'; | 133 _.rootScope.context['dynCls'] = 'panel'; |
134 _.rootScope.apply(); | 134 _.rootScope.apply(); |
135 _.rootScope.context['dynCls'] = 'foo'; | 135 _.rootScope.context['dynCls'] = 'foo'; |
136 _.rootScope.apply(); | 136 _.rootScope.apply(); |
137 expect(element.className).toEqual('ui-panel ui-selected foo'); | 137 // TODO(deboer): Abstract ng-binding |
| 138 expect(element.className.replaceAll(' ng-binding', '')).toEqual('ui-panel
ui-selected foo'); |
138 }); | 139 }); |
139 | 140 |
140 | 141 |
141 it('should not add duplicate classes', () { | 142 it('should not add duplicate classes', () { |
142 var element = _.compile('<div class="panel bar" ng-class="dynCls"></div>')
; | 143 var element = _.compile('<div class="panel bar" ng-class="dynCls"></div>')
; |
143 _.rootScope.context['dynCls'] = 'panel'; | 144 _.rootScope.context['dynCls'] = 'panel'; |
144 _.rootScope.apply(); | 145 _.rootScope.apply(); |
145 expect(element.className).toEqual('panel bar'); | 146 // TODO(deboer): Abstract ng-binding |
| 147 expect(element.className.replaceAll(' ng-binding', '')).toEqual('panel bar
'); |
146 }); | 148 }); |
147 | 149 |
148 | 150 |
149 it('should remove classes even if it was specified via class attribute', ()
{ | 151 it('should remove classes even if it was specified via class attribute', ()
{ |
150 var element = _.compile('<div class="panel bar" ng-class="dynCls"></div>')
; | 152 var element = _.compile('<div class="panel bar" ng-class="dynCls"></div>')
; |
151 _.rootScope.context['dynCls'] = 'panel'; | 153 _.rootScope.context['dynCls'] = 'panel'; |
152 _.rootScope.apply(); | 154 _.rootScope.apply(); |
153 _.rootScope.context['dynCls'] = 'window'; | 155 _.rootScope.context['dynCls'] = 'window'; |
154 _.rootScope.apply(); | 156 _.rootScope.apply(); |
155 expect(element.className).toEqual('bar window'); | 157 // TODO(deboer): Abstract ng-binding |
| 158 expect(element.className.replaceAll(' ng-binding', '')).toEqual('bar windo
w'); |
156 }); | 159 }); |
157 | 160 |
158 | 161 |
159 it('should remove classes even if they were added by another code', () { | 162 it('should remove classes even if they were added by another code', () { |
160 var element = _.compile('<div ng-class="dynCls"></div>'); | 163 var element = _.compile('<div ng-class="dynCls"></div>'); |
161 _.rootScope.context['dynCls'] = 'foo'; | 164 _.rootScope.context['dynCls'] = 'foo'; |
162 _.rootScope.apply(); | 165 _.rootScope.apply(); |
163 element.classes.add('foo'); | 166 element.classes.add('foo'); |
164 _.rootScope.context['dynCls'] = ''; | 167 _.rootScope.context['dynCls'] = ''; |
165 _.rootScope.apply(); | 168 _.rootScope.apply(); |
166 }); | 169 }); |
167 | 170 |
168 | 171 |
169 it('should ngClass odd/even', () { | 172 it('should ngClass odd/even', () { |
170 var element = _.compile('<ul><li ng-repeat="i in [0,1]" class="existing" n
g-class-odd="\'odd\'" ng-class-even="\'even\'"></li><ul>'); | 173 var element = _.compile('<ul><li ng-repeat="i in [0,1]" class="existing" n
g-class-odd="\'odd\'" ng-class-even="\'even\'"></li><ul>'); |
171 _.rootScope.apply(); | 174 _.rootScope.apply(); |
172 var e1 = element.nodes[1]; | 175 var e1 = element.nodes[1]; |
173 var e2 = element.nodes[2]; | 176 var e2 = element.nodes[2]; |
174 expect(e1.classes.contains('existing')).toBeTruthy(); | 177 expect(e1).toHaveClass('existing'); |
175 expect(e1.classes.contains('odd')).toBeTruthy(); | 178 expect(e1).toHaveClass('odd'); |
176 expect(e2.classes.contains('existing')).toBeTruthy(); | 179 expect(e2).toHaveClass('existing'); |
177 expect(e2.classes.contains('even')).toBeTruthy(); | 180 expect(e2).toHaveClass('even'); |
178 }); | 181 }); |
179 | 182 |
180 | 183 |
181 it('should allow both ngClass and ngClassOdd/Even on the same element', () { | 184 it('should allow both ngClass and ngClassOdd/Even on the same element', () { |
182 var element = _.compile('<ul>' + | 185 var element = _.compile('<ul>' + |
183 '<li ng-repeat="i in [0,1]" ng-class="\'plainClass\'" ' + | 186 '<li ng-repeat="i in [0,1]" ng-class="\'plainClass\'" ' + |
184 'ng-class-odd="\'odd\'" ng-class-even="\'even\'">{{\$index}}</li>' + | 187 'ng-class-odd="\'odd\'" ng-class-even="\'even\'">{{\$index}}</li>' + |
185 '<ul>'); | 188 '<ul>'); |
186 _.rootScope.apply(); | 189 _.rootScope.apply(); |
187 var e1 = element.nodes[1]; | 190 var e1 = element.nodes[1]; |
188 var e2 = element.nodes[2]; | 191 var e2 = element.nodes[2]; |
189 | 192 |
190 expect(e1.classes.contains('plainClass')).toBeTruthy(); | 193 expect(e1).toHaveClass('plainClass'); |
191 expect(e1.classes.contains('odd')).toBeTruthy(); | 194 expect(e1).toHaveClass('odd'); |
192 expect(e1.classes.contains('even')).toBeFalsy(); | 195 expect(e1).not.toHaveClass('even'); |
193 expect(e2.classes.contains('plainClass')).toBeTruthy(); | 196 expect(e2).toHaveClass('plainClass'); |
194 expect(e2.classes.contains('even')).toBeTruthy(); | 197 expect(e2).toHaveClass('even'); |
195 expect(e2.classes.contains('odd')).toBeFalsy(); | 198 expect(e2).not.toHaveClass('odd'); |
196 }); | 199 }); |
197 | 200 |
198 it('should allow both ngClass and ngClassOdd/Even with multiple classes', ()
{ | 201 it('should allow both ngClass and ngClassOdd/Even with multiple classes', ()
{ |
199 var element = _.compile('<ul>' + | 202 var element = _.compile('<ul>' + |
200 '<li ng-repeat="i in [0,1]" ng-class="[\'A\', \'B\']" ' + | 203 '<li ng-repeat="i in [0,1]" ng-class="[\'A\', \'B\']" ' + |
201 'ng-class-odd="[\'C\', \'D\']" ng-class-even="[\'E\', \'F\']"></li>' + | 204 'ng-class-odd="[\'C\', \'D\']" ng-class-even="[\'E\', \'F\']"></li>' + |
202 '<ul>'); | 205 '<ul>'); |
203 _.rootScope.apply(); | 206 _.rootScope.apply(); |
204 var e1 = element.nodes[1]; | 207 var e1 = element.nodes[1]; |
205 var e2 = element.nodes[2]; | 208 var e2 = element.nodes[2]; |
206 | 209 |
207 expect(e1.classes.contains('A')).toBeTruthy(); | 210 expect(e1).toHaveClass('A'); |
208 expect(e1.classes.contains('B')).toBeTruthy(); | 211 expect(e1).toHaveClass('B'); |
209 expect(e1.classes.contains('C')).toBeTruthy(); | 212 expect(e1).toHaveClass('C'); |
210 expect(e1.classes.contains('D')).toBeTruthy(); | 213 expect(e1).toHaveClass('D'); |
211 expect(e1.classes.contains('E')).toBeFalsy(); | 214 expect(e1).not.toHaveClass('E'); |
212 expect(e1.classes.contains('F')).toBeFalsy(); | 215 expect(e1).not.toHaveClass('F'); |
213 | 216 |
214 expect(e2.classes.contains('A')).toBeTruthy(); | 217 expect(e2).toHaveClass('A'); |
215 expect(e2.classes.contains('B')).toBeTruthy(); | 218 expect(e2).toHaveClass('B'); |
216 expect(e2.classes.contains('E')).toBeTruthy(); | 219 expect(e2).toHaveClass('E'); |
217 expect(e2.classes.contains('F')).toBeTruthy(); | 220 expect(e2).toHaveClass('F'); |
218 expect(e2.classes.contains('C')).toBeFalsy(); | 221 expect(e2).not.toHaveClass('C'); |
219 expect(e2.classes.contains('D')).toBeFalsy(); | 222 expect(e2).not.toHaveClass('D'); |
220 }); | 223 }); |
221 | 224 |
222 | 225 |
223 it('should reapply ngClass when interpolated class attribute changes', () { | 226 it('should reapply ngClass when interpolated class attribute changes', () { |
224 var element = _.compile('<div class="one {{cls}} three" ng-class="{four: f
our}"></div>'); | 227 var element = _.compile('<div class="one {{cls}} three" ng-class="{four: f
our}"></div>'); |
225 | 228 |
226 _.rootScope.apply(() { | 229 _.rootScope.apply(() { |
227 _.rootScope.context['cls'] = "two"; | 230 _.rootScope.context['cls'] = "two"; |
228 _.rootScope.context['four'] = true; | 231 _.rootScope.context['four'] = true; |
229 }); | 232 }); |
230 expect(element).toHaveClass('one'); | 233 expect(element).toHaveClass('one'); |
231 expect(element).toHaveClass('two'); // interpolated | 234 expect(element).toHaveClass('two'); // interpolated |
232 expect(element).toHaveClass('three'); | 235 expect(element).toHaveClass('three'); |
233 expect(element).toHaveClass('four'); | 236 expect(element).toHaveClass('four'); |
234 | 237 |
235 _.rootScope.apply(() { | 238 _.rootScope.apply(() { |
236 _.rootScope.context['cls'] = "too"; | 239 _.rootScope.context['cls'] = "too"; |
237 }); | 240 }); |
238 | 241 |
239 expect(element).toHaveClass('one'); | 242 expect(element).toHaveClass('one'); |
240 expect(element).toHaveClass('too'); // interpolated | 243 expect(element).toHaveClass('too'); // interpolated |
241 expect(element).toHaveClass('three'); | 244 expect(element).toHaveClass('three'); |
242 expect(element).toHaveClass('four'); // should still be there | 245 expect(element).toHaveClass('four'); // should still be there |
243 expect(element.classes.contains('two')).toBeFalsy(); | 246 expect(element).not.toHaveClass('two'); |
244 | 247 |
245 _.rootScope.apply(() { | 248 _.rootScope.apply(() { |
246 _.rootScope.context['cls'] = "to"; | 249 _.rootScope.context['cls'] = "to"; |
247 }); | 250 }); |
248 | 251 |
249 expect(element).toHaveClass('one'); | 252 expect(element).toHaveClass('one'); |
250 expect(element).toHaveClass('to'); // interpolated | 253 expect(element).toHaveClass('to'); // interpolated |
251 expect(element).toHaveClass('three'); | 254 expect(element).toHaveClass('three'); |
252 expect(element).toHaveClass('four'); // should still be there | 255 expect(element).toHaveClass('four'); // should still be there |
253 expect(element.classes.contains('two')).toBeFalsy(); | 256 expect(element).not.toHaveClass('two'); |
254 expect(element.classes.contains('too')).toBeFalsy(); | 257 expect(element).not.toHaveClass('too'); |
255 }); | 258 }); |
256 | 259 |
257 | 260 |
258 it('should not mess up class value due to observing an interpolated class at
tribute', () { | 261 it('should not mess up class value due to observing an interpolated class at
tribute', () { |
259 _.rootScope.context['foo'] = true; | 262 _.rootScope.context['foo'] = true; |
260 _.rootScope.watch("anything", (_0, _1) { | 263 _.rootScope.watch("anything", (_0, _1) { |
261 _.rootScope.context['foo'] = false; | 264 _.rootScope.context['foo'] = false; |
262 }); | 265 }); |
263 var element = _.compile('<div ng-class="{foo:foo}"></div>'); | 266 var element = _.compile('<div ng-class="{foo:foo}"></div>'); |
264 _.rootScope.apply(); | 267 _.rootScope.apply(); |
265 expect(element.classes.contains('foo')).toBe(false); | 268 expect(element).not.toHaveClass('foo'); |
266 }); | 269 }); |
267 | 270 |
268 | 271 |
269 it('should update ngClassOdd/Even when model is changed by filtering', () { | 272 it('should update ngClassOdd/Even when model is changed by filtering', () { |
270 var element = _.compile('<ul>' + | 273 var element = _.compile('<ul>' + |
271 '<li ng-repeat="i in items" ' + | 274 '<li ng-repeat="i in items" ' + |
272 'ng-class-odd="\'odd\'" ng-class-even="\'even\'"></li>' + | 275 'ng-class-odd="\'odd\'" ng-class-even="\'even\'"></li>' + |
273 '<ul>'); | 276 '<ul>'); |
274 _.rootScope.context['items'] = ['a','b','c']; | 277 _.rootScope.context['items'] = ['a','b','c']; |
275 _.rootScope.apply(); | 278 _.rootScope.apply(); |
276 | 279 |
277 _.rootScope.context['items'] = ['a','b']; | 280 _.rootScope.context['items'] = ['a','b']; |
278 _.rootScope.apply(); | 281 _.rootScope.apply(); |
279 | 282 |
280 var e1 = element.nodes[1]; | 283 var e1 = element.nodes[1]; |
281 var e2 = element.nodes[2]; | 284 var e2 = element.nodes[2]; |
282 | 285 |
283 expect(e1.classes.contains('odd')).toBeTruthy(); | 286 expect(e1).toHaveClass('odd'); |
284 expect(e1.classes.contains('even')).toBeFalsy(); | 287 expect(e1).not.toHaveClass('even'); |
285 | 288 |
286 expect(e2.classes.contains('even')).toBeTruthy(); | 289 expect(e2).toHaveClass('even'); |
287 expect(e2.classes.contains('odd')).toBeFalsy(); | 290 expect(e2).not.toHaveClass('odd'); |
288 }); | 291 }); |
289 | 292 |
290 | 293 |
291 it('should update ngClassOdd/Even when model is changed by sorting', () { | 294 it('should update ngClassOdd/Even when model is changed by sorting', () { |
292 var element = _.compile('<ul>' + | 295 var element = _.compile('<ul>' + |
293 '<li ng-repeat="i in items" ' + | 296 '<li ng-repeat="i in items" ' + |
294 'ng-class-odd="\'odd\'" ng-class-even="\'even\'">i</li>' + | 297 'ng-class-odd="\'odd\'" ng-class-even="\'even\'">i</li>' + |
295 '<ul>'); | 298 '<ul>'); |
296 _.rootScope.context['items'] = ['a','b']; | 299 _.rootScope.context['items'] = ['a','b']; |
297 _.rootScope.apply(); | 300 _.rootScope.apply(); |
298 | 301 |
299 _.rootScope.context['items'] = ['b','a']; | 302 _.rootScope.context['items'] = ['b','a']; |
300 _.rootScope.apply(); | 303 _.rootScope.apply(); |
301 | 304 |
302 var e1 = element.nodes[1]; | 305 var e1 = element.nodes[1]; |
303 var e2 = element.nodes[2]; | 306 var e2 = element.nodes[2]; |
304 | 307 |
305 expect(e1.classes.contains('odd')).toBeTruthy(); | 308 expect(e1).toHaveClass('odd'); |
306 expect(e1.classes.contains('even')).toBeFalsy(); | 309 expect(e1).not.toHaveClass('even'); |
307 | 310 |
308 expect(e2.classes.contains('even')).toBeTruthy(); | 311 expect(e2).toHaveClass('even'); |
309 expect(e2.classes.contains('odd')).toBeFalsy(); | 312 expect(e2).not.toHaveClass('odd'); |
310 }); | 313 }); |
311 }); | 314 }); |
312 } | 315 } |
OLD | NEW |