diff options
Diffstat (limited to 'test/ng/directive/ngStyleSpec.js')
| -rw-r--r-- | test/ng/directive/ngStyleSpec.js | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/test/ng/directive/ngStyleSpec.js b/test/ng/directive/ngStyleSpec.js new file mode 100644 index 00000000..c12f2f4d --- /dev/null +++ b/test/ng/directive/ngStyleSpec.js @@ -0,0 +1,88 @@ +'use strict'; + +describe('ng-style', function() { + var element; + + + afterEach(function() { + dealoc(element); + }); + + + it('should set', inject(function($rootScope, $compile) { + element = $compile('<div ng-style="{height: \'40px\'}"></div>')($rootScope); + $rootScope.$digest(); + expect(element.css('height')).toEqual('40px'); + })); + + + it('should silently ignore undefined style', inject(function($rootScope, $compile) { + element = $compile('<div ng-style="myStyle"></div>')($rootScope); + $rootScope.$digest(); + expect(element.hasClass('ng-exception')).toBeFalsy(); + })); + + + describe('preserving styles set before and after compilation', function() { + var scope, preCompStyle, preCompVal, postCompStyle, postCompVal, element; + + beforeEach(inject(function($rootScope, $compile) { + preCompStyle = 'width'; + preCompVal = '300px'; + postCompStyle = 'height'; + postCompVal = '100px'; + element = jqLite('<div ng-style="styleObj"></div>'); + element.css(preCompStyle, preCompVal); + jqLite(document.body).append(element); + $compile(element)($rootScope); + scope = $rootScope; + scope.styleObj = {'margin-top': '44px'}; + scope.$apply(); + element.css(postCompStyle, postCompVal); + })); + + afterEach(function() { + element.remove(); + }); + + + it('should not mess up stuff after compilation', function() { + element.css('margin', '44px'); + expect(element.css(preCompStyle)).toBe(preCompVal); + expect(element.css('margin-top')).toBe('44px'); + expect(element.css(postCompStyle)).toBe(postCompVal); + }); + + + it('should not mess up stuff after $apply with no model changes', function() { + element.css('padding-top', '33px'); + scope.$apply(); + expect(element.css(preCompStyle)).toBe(preCompVal); + expect(element.css('margin-top')).toBe('44px'); + expect(element.css(postCompStyle)).toBe(postCompVal); + expect(element.css('padding-top')).toBe('33px'); + }); + + + it('should not mess up stuff after $apply with non-colliding model changes', function() { + scope.styleObj = {'padding-top': '99px'}; + scope.$apply(); + expect(element.css(preCompStyle)).toBe(preCompVal); + expect(element.css('margin-top')).not.toBe('44px'); + expect(element.css('padding-top')).toBe('99px'); + expect(element.css(postCompStyle)).toBe(postCompVal); + }); + + + it('should overwrite original styles after a colliding model change', function() { + scope.styleObj = {'height': '99px', 'width': '88px'}; + scope.$apply(); + expect(element.css(preCompStyle)).toBe('88px'); + expect(element.css(postCompStyle)).toBe('99px'); + scope.styleObj = {}; + scope.$apply(); + expect(element.css(preCompStyle)).not.toBe('88px'); + expect(element.css(postCompStyle)).not.toBe('99px'); + }); + }); +}); |
