diff options
Diffstat (limited to 'test/directivesSpec.js')
| -rw-r--r-- | test/directivesSpec.js | 92 |
1 files changed, 91 insertions, 1 deletions
diff --git a/test/directivesSpec.js b/test/directivesSpec.js index 1d26973c..314f9a88 100644 --- a/test/directivesSpec.js +++ b/test/directivesSpec.js @@ -196,13 +196,103 @@ describe("directive", function(){ expect(element.hasClass('B')).toBe(false); }); - it('should support adding multiple classes', function(){ + + it('should support adding multiple classes via an array', function(){ var scope = compile('<div class="existing" ng:class="[\'A\', \'B\']"></div>'); scope.$digest(); expect(element.hasClass('existing')).toBeTruthy(); expect(element.hasClass('A')).toBeTruthy(); expect(element.hasClass('B')).toBeTruthy(); }); + + + it('should support adding multiple classes via a space delimited string', function(){ + var scope = compile('<div class="existing" ng:class="\'A B\'"></div>'); + scope.$digest(); + expect(element.hasClass('existing')).toBeTruthy(); + expect(element.hasClass('A')).toBeTruthy(); + expect(element.hasClass('B')).toBeTruthy(); + }); + + + it('should preserve class added post compilation with pre-existing classes', function() { + var scope = compile('<div class="existing" ng:class="dynClass"></div>'); + scope.dynClass = 'A'; + scope.$digest(); + expect(element.hasClass('existing')).toBe(true); + + // add extra class, change model and eval + element.addClass('newClass'); + scope.dynClass = 'B'; + scope.$digest(); + + expect(element.hasClass('existing')).toBe(true); + expect(element.hasClass('B')).toBe(true); + expect(element.hasClass('newClass')).toBe(true); + }); + + + it('should preserve class added post compilation without pre-existing classes"', function() { + var scope = compile('<div ng:class="dynClass"></div>'); + scope.dynClass = 'A'; + scope.$digest(); + expect(element.hasClass('A')).toBe(true); + + // add extra class, change model and eval + element.addClass('newClass'); + scope.dynClass = 'B'; + scope.$digest(); + + expect(element.hasClass('B')).toBe(true); + expect(element.hasClass('newClass')).toBe(true); + }); + + + it('should preserve other classes with similar name"', function() { + var scope = compile('<div class="ui-panel ui-selected" ng:class="dynCls"></div>'); + scope.dynCls = 'panel'; + scope.$digest(); + scope.dynCls = 'foo'; + scope.$digest(); + expect(element.attr('class')).toBe('ui-panel ui-selected ng-directive foo'); + }); + + + it('should not add duplicate classes', function() { + var scope = compile('<div class="panel bar" ng:class="dynCls"></div>'); + scope.dynCls = 'panel'; + scope.$digest(); + expect(element.attr('class')).toBe('panel bar ng-directive'); + }); + + + it('should remove classes even if it was specified via class attribute', function() { + var scope = compile('<div class="panel bar" ng:class="dynCls"></div>'); + scope.dynCls = 'panel'; + scope.$digest(); + scope.dynCls = 'window'; + scope.$digest(); + expect(element.attr('class')).toBe('bar ng-directive window'); + }); + + + it('should remove classes even if they were added by another code', function() { + var scope = compile('<div ng:class="dynCls"></div>'); + scope.dynCls = 'foo'; + scope.$digest(); + element.addClass('foo'); + scope.dynCls = ''; + scope.$digest(); + expect(element.attr('class')).toBe('ng-directive'); + }); + + + it('should convert undefined and null values to an empty string', function() { + var scope = compile('<div ng:class="dynCls"></div>'); + scope.dynCls = [undefined, null]; + scope.$digest(); + expect(element.attr('class')).toBe('ng-directive'); + }); }); |
