| 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((TestBed tb) => _ = tb); | 9 beforeEach(inject((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).toHaveClass('existing'); | 15 expect(element.classes.contains('existing')).toBe(true); |
| 16 expect(element).toHaveClass('A'); | 16 expect(element.classes.contains('A')).toBe(true); |
| 17 | 17 |
| 18 _.rootScope.context['dynClass'] = 'B'; | 18 _.rootScope.context['dynClass'] = 'B'; |
| 19 _.rootScope.apply(); | 19 _.rootScope.apply(); |
| 20 expect(element).toHaveClass('existing'); | 20 expect(element.classes.contains('existing')).toBe(true); |
| 21 expect(element).not.toHaveClass('A'); | 21 expect(element.classes.contains('A')).toBe(false); |
| 22 expect(element).toHaveClass('B'); | 22 expect(element.classes.contains('B')).toBe(true); |
| 23 | 23 |
| 24 _.rootScope.context['dynClass'] = null; | 24 _.rootScope.context['dynClass'] = null; |
| 25 _.rootScope.apply(); | 25 _.rootScope.apply(); |
| 26 expect(element).toHaveClass('existing'); | 26 expect(element.classes.contains('existing')).toBe(true); |
| 27 expect(element).not.toHaveClass('A'); | 27 expect(element.classes.contains('A')).toBe(false); |
| 28 expect(element).not.toHaveClass('B'); | 28 expect(element.classes.contains('B')).toBe(false); |
| 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).toHaveClass('existing'); | 38 expect(element.classes.contains('existing')).toBeTruthy(); |
| 39 expect(element).toHaveClass('a'); | 39 expect(element.classes.contains('a')).toBeTruthy(); |
| 40 expect(element).not.toHaveClass('b'); | 40 expect(element.classes.contains('b')).toBeFalsy(); |
| 41 expect(element).not.toHaveClass('c'); | 41 expect(element.classes.contains('c')).toBeFalsy(); |
| 42 expect(element).not.toHaveClass('null'); | 42 expect(element.classes.contains('null')).toBeFalsy(); |
| 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).not.toHaveClass('a'); | 47 expect(element.classes.contains('a')).toBeFalsy(); |
| 48 expect(element).toHaveClass('b'); | 48 expect(element.classes.contains('b')).toBeTruthy(); |
| 49 expect(element).toHaveClass('c'); | 49 expect(element.classes.contains('c')).toBeTruthy(); |
| 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).toHaveClass('existing'); | 62 expect(element.classes.contains('existing')).toBeTruthy(); |
| 63 expect(element).toHaveClass('A'); | 63 expect(element.classes.contains('A')).toBeTruthy(); |
| 64 expect(element).not.toHaveClass('B'); | 64 expect(element.classes.contains('B')).toBeFalsy(); |
| 65 expect(element).toHaveClass('AnotB'); | 65 expect(element.classes.contains('AnotB')).toBeTruthy(); |
| 66 | 66 |
| 67 _.rootScope.context['conditionB'] = () { return true; }; | 67 _.rootScope.context['conditionB'] = () { return true; }; |
| 68 _.rootScope.apply(); | 68 _.rootScope.apply(); |
| 69 expect(element).toHaveClass('existing'); | 69 expect(element.classes.contains('existing')).toBeTruthy(); |
| 70 expect(element).toHaveClass('A'); | 70 expect(element.classes.contains('A')).toBeTruthy(); |
| 71 expect(element).toHaveClass('B'); | 71 expect(element.classes.contains('B')).toBeTruthy(); |
| 72 expect(element).not.toHaveClass('AnotB'); | 72 expect(element.classes.contains('AnotB')).toBeFalsy(); |
| 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).toHaveClass('A'); | 81 expect(element.classes.contains('A')).toBeTruthy(); |
| 82 expect(element).toHaveClass('B'); | 82 expect(element.classes.contains('B')).toBeTruthy(); |
| 83 _.rootScope.context['classes']['A'] = false; | 83 _.rootScope.context['classes']['A'] = false; |
| 84 _.rootScope.apply(); | 84 _.rootScope.apply(); |
| 85 expect(element).not.toHaveClass('A'); | 85 expect(element.classes.contains('A')).toBeFalsy(); |
| 86 expect(element).toHaveClass('B'); | 86 expect(element.classes.contains('B')).toBeTruthy(); |
| 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).toHaveClass('existing'); | 92 expect(element.classes.contains('existing')).toBeTruthy(); |
| 93 expect(element).toHaveClass('A'); | 93 expect(element.classes.contains('A')).toBeTruthy(); |
| 94 expect(element).toHaveClass('B'); | 94 expect(element.classes.contains('B')).toBeTruthy(); |
| 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).toHaveClass('existing'); | 102 expect(element.classes.contains('existing')).toBe(true); |
| 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).toHaveClass('existing'); | 109 expect(element.classes.contains('existing')).toBe(true); |
| 110 expect(element).toHaveClass('B'); | 110 expect(element.classes.contains('B')).toBe(true); |
| 111 expect(element).toHaveClass('newClass'); | 111 expect(element.classes.contains('newClass')).toBe(true); |
| 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).toHaveClass('A'); | 119 expect(element.classes.contains('A')).toBe(true); |
| 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).toHaveClass('B'); | 126 expect(element.classes.contains('B')).toBe(true); |
| 127 expect(element).toHaveClass('newClass'); | 127 expect(element.classes.contains('newClass')).toBe(true); |
| 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 // TODO(deboer): Abstract ng-binding | 137 expect(element.className).toEqual('ui-panel ui-selected foo'); |
| 138 expect(element.className.replaceAll(' ng-binding', '')).toEqual('ui-panel
ui-selected foo'); | |
| 139 }); | 138 }); |
| 140 | 139 |
| 141 | 140 |
| 142 it('should not add duplicate classes', () { | 141 it('should not add duplicate classes', () { |
| 143 var element = _.compile('<div class="panel bar" ng-class="dynCls"></div>')
; | 142 var element = _.compile('<div class="panel bar" ng-class="dynCls"></div>')
; |
| 144 _.rootScope.context['dynCls'] = 'panel'; | 143 _.rootScope.context['dynCls'] = 'panel'; |
| 145 _.rootScope.apply(); | 144 _.rootScope.apply(); |
| 146 // TODO(deboer): Abstract ng-binding | 145 expect(element.className).toEqual('panel bar'); |
| 147 expect(element.className.replaceAll(' ng-binding', '')).toEqual('panel bar
'); | |
| 148 }); | 146 }); |
| 149 | 147 |
| 150 | 148 |
| 151 it('should remove classes even if it was specified via class attribute', ()
{ | 149 it('should remove classes even if it was specified via class attribute', ()
{ |
| 152 var element = _.compile('<div class="panel bar" ng-class="dynCls"></div>')
; | 150 var element = _.compile('<div class="panel bar" ng-class="dynCls"></div>')
; |
| 153 _.rootScope.context['dynCls'] = 'panel'; | 151 _.rootScope.context['dynCls'] = 'panel'; |
| 154 _.rootScope.apply(); | 152 _.rootScope.apply(); |
| 155 _.rootScope.context['dynCls'] = 'window'; | 153 _.rootScope.context['dynCls'] = 'window'; |
| 156 _.rootScope.apply(); | 154 _.rootScope.apply(); |
| 157 // TODO(deboer): Abstract ng-binding | 155 expect(element.className).toEqual('bar window'); |
| 158 expect(element.className.replaceAll(' ng-binding', '')).toEqual('bar windo
w'); | |
| 159 }); | 156 }); |
| 160 | 157 |
| 161 | 158 |
| 162 it('should remove classes even if they were added by another code', () { | 159 it('should remove classes even if they were added by another code', () { |
| 163 var element = _.compile('<div ng-class="dynCls"></div>'); | 160 var element = _.compile('<div ng-class="dynCls"></div>'); |
| 164 _.rootScope.context['dynCls'] = 'foo'; | 161 _.rootScope.context['dynCls'] = 'foo'; |
| 165 _.rootScope.apply(); | 162 _.rootScope.apply(); |
| 166 element.classes.add('foo'); | 163 element.classes.add('foo'); |
| 167 _.rootScope.context['dynCls'] = ''; | 164 _.rootScope.context['dynCls'] = ''; |
| 168 _.rootScope.apply(); | 165 _.rootScope.apply(); |
| 169 }); | 166 }); |
| 170 | 167 |
| 171 | 168 |
| 172 it('should ngClass odd/even', () { | 169 it('should ngClass odd/even', () { |
| 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>'); | 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>'); |
| 174 _.rootScope.apply(); | 171 _.rootScope.apply(); |
| 175 var e1 = element.nodes[1]; | 172 var e1 = element.nodes[1]; |
| 176 var e2 = element.nodes[2]; | 173 var e2 = element.nodes[2]; |
| 177 expect(e1).toHaveClass('existing'); | 174 expect(e1.classes.contains('existing')).toBeTruthy(); |
| 178 expect(e1).toHaveClass('odd'); | 175 expect(e1.classes.contains('odd')).toBeTruthy(); |
| 179 expect(e2).toHaveClass('existing'); | 176 expect(e2.classes.contains('existing')).toBeTruthy(); |
| 180 expect(e2).toHaveClass('even'); | 177 expect(e2.classes.contains('even')).toBeTruthy(); |
| 181 }); | 178 }); |
| 182 | 179 |
| 183 | 180 |
| 184 it('should allow both ngClass and ngClassOdd/Even on the same element', () { | 181 it('should allow both ngClass and ngClassOdd/Even on the same element', () { |
| 185 var element = _.compile('<ul>' + | 182 var element = _.compile('<ul>' + |
| 186 '<li ng-repeat="i in [0,1]" ng-class="\'plainClass\'" ' + | 183 '<li ng-repeat="i in [0,1]" ng-class="\'plainClass\'" ' + |
| 187 'ng-class-odd="\'odd\'" ng-class-even="\'even\'">{{\$index}}</li>' + | 184 'ng-class-odd="\'odd\'" ng-class-even="\'even\'">{{\$index}}</li>' + |
| 188 '<ul>'); | 185 '<ul>'); |
| 189 _.rootScope.apply(); | 186 _.rootScope.apply(); |
| 190 var e1 = element.nodes[1]; | 187 var e1 = element.nodes[1]; |
| 191 var e2 = element.nodes[2]; | 188 var e2 = element.nodes[2]; |
| 192 | 189 |
| 193 expect(e1).toHaveClass('plainClass'); | 190 expect(e1.classes.contains('plainClass')).toBeTruthy(); |
| 194 expect(e1).toHaveClass('odd'); | 191 expect(e1.classes.contains('odd')).toBeTruthy(); |
| 195 expect(e1).not.toHaveClass('even'); | 192 expect(e1.classes.contains('even')).toBeFalsy(); |
| 196 expect(e2).toHaveClass('plainClass'); | 193 expect(e2.classes.contains('plainClass')).toBeTruthy(); |
| 197 expect(e2).toHaveClass('even'); | 194 expect(e2.classes.contains('even')).toBeTruthy(); |
| 198 expect(e2).not.toHaveClass('odd'); | 195 expect(e2.classes.contains('odd')).toBeFalsy(); |
| 199 }); | 196 }); |
| 200 | 197 |
| 201 it('should allow both ngClass and ngClassOdd/Even with multiple classes', ()
{ | 198 it('should allow both ngClass and ngClassOdd/Even with multiple classes', ()
{ |
| 202 var element = _.compile('<ul>' + | 199 var element = _.compile('<ul>' + |
| 203 '<li ng-repeat="i in [0,1]" ng-class="[\'A\', \'B\']" ' + | 200 '<li ng-repeat="i in [0,1]" ng-class="[\'A\', \'B\']" ' + |
| 204 'ng-class-odd="[\'C\', \'D\']" ng-class-even="[\'E\', \'F\']"></li>' + | 201 'ng-class-odd="[\'C\', \'D\']" ng-class-even="[\'E\', \'F\']"></li>' + |
| 205 '<ul>'); | 202 '<ul>'); |
| 206 _.rootScope.apply(); | 203 _.rootScope.apply(); |
| 207 var e1 = element.nodes[1]; | 204 var e1 = element.nodes[1]; |
| 208 var e2 = element.nodes[2]; | 205 var e2 = element.nodes[2]; |
| 209 | 206 |
| 210 expect(e1).toHaveClass('A'); | 207 expect(e1.classes.contains('A')).toBeTruthy(); |
| 211 expect(e1).toHaveClass('B'); | 208 expect(e1.classes.contains('B')).toBeTruthy(); |
| 212 expect(e1).toHaveClass('C'); | 209 expect(e1.classes.contains('C')).toBeTruthy(); |
| 213 expect(e1).toHaveClass('D'); | 210 expect(e1.classes.contains('D')).toBeTruthy(); |
| 214 expect(e1).not.toHaveClass('E'); | 211 expect(e1.classes.contains('E')).toBeFalsy(); |
| 215 expect(e1).not.toHaveClass('F'); | 212 expect(e1.classes.contains('F')).toBeFalsy(); |
| 216 | 213 |
| 217 expect(e2).toHaveClass('A'); | 214 expect(e2.classes.contains('A')).toBeTruthy(); |
| 218 expect(e2).toHaveClass('B'); | 215 expect(e2.classes.contains('B')).toBeTruthy(); |
| 219 expect(e2).toHaveClass('E'); | 216 expect(e2.classes.contains('E')).toBeTruthy(); |
| 220 expect(e2).toHaveClass('F'); | 217 expect(e2.classes.contains('F')).toBeTruthy(); |
| 221 expect(e2).not.toHaveClass('C'); | 218 expect(e2.classes.contains('C')).toBeFalsy(); |
| 222 expect(e2).not.toHaveClass('D'); | 219 expect(e2.classes.contains('D')).toBeFalsy(); |
| 223 }); | 220 }); |
| 224 | 221 |
| 225 | 222 |
| 226 it('should reapply ngClass when interpolated class attribute changes', () { | 223 it('should reapply ngClass when interpolated class attribute changes', () { |
| 227 var element = _.compile('<div class="one {{cls}} three" ng-class="{four: f
our}"></div>'); | 224 var element = _.compile('<div class="one {{cls}} three" ng-class="{four: f
our}"></div>'); |
| 228 | 225 |
| 229 _.rootScope.apply(() { | 226 _.rootScope.apply(() { |
| 230 _.rootScope.context['cls'] = "two"; | 227 _.rootScope.context['cls'] = "two"; |
| 231 _.rootScope.context['four'] = true; | 228 _.rootScope.context['four'] = true; |
| 232 }); | 229 }); |
| 233 expect(element).toHaveClass('one'); | 230 expect(element).toHaveClass('one'); |
| 234 expect(element).toHaveClass('two'); // interpolated | 231 expect(element).toHaveClass('two'); // interpolated |
| 235 expect(element).toHaveClass('three'); | 232 expect(element).toHaveClass('three'); |
| 236 expect(element).toHaveClass('four'); | 233 expect(element).toHaveClass('four'); |
| 237 | 234 |
| 238 _.rootScope.apply(() { | 235 _.rootScope.apply(() { |
| 239 _.rootScope.context['cls'] = "too"; | 236 _.rootScope.context['cls'] = "too"; |
| 240 }); | 237 }); |
| 241 | 238 |
| 242 expect(element).toHaveClass('one'); | 239 expect(element).toHaveClass('one'); |
| 243 expect(element).toHaveClass('too'); // interpolated | 240 expect(element).toHaveClass('too'); // interpolated |
| 244 expect(element).toHaveClass('three'); | 241 expect(element).toHaveClass('three'); |
| 245 expect(element).toHaveClass('four'); // should still be there | 242 expect(element).toHaveClass('four'); // should still be there |
| 246 expect(element).not.toHaveClass('two'); | 243 expect(element.classes.contains('two')).toBeFalsy(); |
| 247 | 244 |
| 248 _.rootScope.apply(() { | 245 _.rootScope.apply(() { |
| 249 _.rootScope.context['cls'] = "to"; | 246 _.rootScope.context['cls'] = "to"; |
| 250 }); | 247 }); |
| 251 | 248 |
| 252 expect(element).toHaveClass('one'); | 249 expect(element).toHaveClass('one'); |
| 253 expect(element).toHaveClass('to'); // interpolated | 250 expect(element).toHaveClass('to'); // interpolated |
| 254 expect(element).toHaveClass('three'); | 251 expect(element).toHaveClass('three'); |
| 255 expect(element).toHaveClass('four'); // should still be there | 252 expect(element).toHaveClass('four'); // should still be there |
| 256 expect(element).not.toHaveClass('two'); | 253 expect(element.classes.contains('two')).toBeFalsy(); |
| 257 expect(element).not.toHaveClass('too'); | 254 expect(element.classes.contains('too')).toBeFalsy(); |
| 258 }); | 255 }); |
| 259 | 256 |
| 260 | 257 |
| 261 it('should not mess up class value due to observing an interpolated class at
tribute', () { | 258 it('should not mess up class value due to observing an interpolated class at
tribute', () { |
| 262 _.rootScope.context['foo'] = true; | 259 _.rootScope.context['foo'] = true; |
| 263 _.rootScope.watch("anything", (_0, _1) { | 260 _.rootScope.watch("anything", (_0, _1) { |
| 264 _.rootScope.context['foo'] = false; | 261 _.rootScope.context['foo'] = false; |
| 265 }); | 262 }); |
| 266 var element = _.compile('<div ng-class="{foo:foo}"></div>'); | 263 var element = _.compile('<div ng-class="{foo:foo}"></div>'); |
| 267 _.rootScope.apply(); | 264 _.rootScope.apply(); |
| 268 expect(element).not.toHaveClass('foo'); | 265 expect(element.classes.contains('foo')).toBe(false); |
| 269 }); | 266 }); |
| 270 | 267 |
| 271 | 268 |
| 272 it('should update ngClassOdd/Even when model is changed by filtering', () { | 269 it('should update ngClassOdd/Even when model is changed by filtering', () { |
| 273 var element = _.compile('<ul>' + | 270 var element = _.compile('<ul>' + |
| 274 '<li ng-repeat="i in items" ' + | 271 '<li ng-repeat="i in items" ' + |
| 275 'ng-class-odd="\'odd\'" ng-class-even="\'even\'"></li>' + | 272 'ng-class-odd="\'odd\'" ng-class-even="\'even\'"></li>' + |
| 276 '<ul>'); | 273 '<ul>'); |
| 277 _.rootScope.context['items'] = ['a','b','c']; | 274 _.rootScope.context['items'] = ['a','b','c']; |
| 278 _.rootScope.apply(); | 275 _.rootScope.apply(); |
| 279 | 276 |
| 280 _.rootScope.context['items'] = ['a','b']; | 277 _.rootScope.context['items'] = ['a','b']; |
| 281 _.rootScope.apply(); | 278 _.rootScope.apply(); |
| 282 | 279 |
| 283 var e1 = element.nodes[1]; | 280 var e1 = element.nodes[1]; |
| 284 var e2 = element.nodes[2]; | 281 var e2 = element.nodes[2]; |
| 285 | 282 |
| 286 expect(e1).toHaveClass('odd'); | 283 expect(e1.classes.contains('odd')).toBeTruthy(); |
| 287 expect(e1).not.toHaveClass('even'); | 284 expect(e1.classes.contains('even')).toBeFalsy(); |
| 288 | 285 |
| 289 expect(e2).toHaveClass('even'); | 286 expect(e2.classes.contains('even')).toBeTruthy(); |
| 290 expect(e2).not.toHaveClass('odd'); | 287 expect(e2.classes.contains('odd')).toBeFalsy(); |
| 291 }); | 288 }); |
| 292 | 289 |
| 293 | 290 |
| 294 it('should update ngClassOdd/Even when model is changed by sorting', () { | 291 it('should update ngClassOdd/Even when model is changed by sorting', () { |
| 295 var element = _.compile('<ul>' + | 292 var element = _.compile('<ul>' + |
| 296 '<li ng-repeat="i in items" ' + | 293 '<li ng-repeat="i in items" ' + |
| 297 'ng-class-odd="\'odd\'" ng-class-even="\'even\'">i</li>' + | 294 'ng-class-odd="\'odd\'" ng-class-even="\'even\'">i</li>' + |
| 298 '<ul>'); | 295 '<ul>'); |
| 299 _.rootScope.context['items'] = ['a','b']; | 296 _.rootScope.context['items'] = ['a','b']; |
| 300 _.rootScope.apply(); | 297 _.rootScope.apply(); |
| 301 | 298 |
| 302 _.rootScope.context['items'] = ['b','a']; | 299 _.rootScope.context['items'] = ['b','a']; |
| 303 _.rootScope.apply(); | 300 _.rootScope.apply(); |
| 304 | 301 |
| 305 var e1 = element.nodes[1]; | 302 var e1 = element.nodes[1]; |
| 306 var e2 = element.nodes[2]; | 303 var e2 = element.nodes[2]; |
| 307 | 304 |
| 308 expect(e1).toHaveClass('odd'); | 305 expect(e1.classes.contains('odd')).toBeTruthy(); |
| 309 expect(e1).not.toHaveClass('even'); | 306 expect(e1.classes.contains('even')).toBeFalsy(); |
| 310 | 307 |
| 311 expect(e2).toHaveClass('even'); | 308 expect(e2.classes.contains('even')).toBeTruthy(); |
| 312 expect(e2).not.toHaveClass('odd'); | 309 expect(e2.classes.contains('odd')).toBeFalsy(); |
| 313 }); | 310 }); |
| 314 }); | 311 }); |
| 315 } | 312 } |
| OLD | NEW |