| 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 |