From 2efe82309ac8ff4f67df8b6e40a539ea31e15804 Mon Sep 17 00:00:00 2001 From: Matias Niemelä Date: Sat, 23 Nov 2013 21:44:14 -0500 Subject: fix($animate): ensure blocked keyframe animations are unblocked before the DOM operation Closes #5106 --- test/ngAnimate/animateSpec.js | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) (limited to 'test/ngAnimate/animateSpec.js') diff --git a/test/ngAnimate/animateSpec.js b/test/ngAnimate/animateSpec.js index c585e72b..9f324562 100644 --- a/test/ngAnimate/animateSpec.js +++ b/test/ngAnimate/animateSpec.js @@ -2771,4 +2771,47 @@ describe("ngAnimate", function() { expect(node.style[animationKey]).not.toContain('none'); })); + + it('should block and unblock keyframe animations before the followup JS animation occurs', function() { + module(function($animateProvider) { + $animateProvider.register('.special', function($sniffer, $window) { + var prop = $sniffer.vendorPrefix == 'Webkit' ? 'WebkitAnimation' : 'animation'; + return { + beforeAddClass : function(element, className, done) { + expect(element[0].style[prop]).not.toContain('none'); + expect($window.getComputedStyle(element[0])[prop + 'Duration']).toBe('1s'); + done(); + }, + addClass : function(element, className, done) { + expect(element[0].style[prop]).not.toContain('none'); + expect($window.getComputedStyle(element[0])[prop + 'Duration']).toBe('1s'); + done(); + } + } + }); + }); + inject(function($rootScope, $compile, $rootElement, $document, $animate, $sniffer, $timeout, $window) { + if (!$sniffer.animations) return; + + $animate.enabled(true); + + ss.addRule('.special', '-webkit-animation:1s special_animation;' + + 'animation:1s special_animation;'); + + var capturedProperty = 'none'; + + var element = $compile('
')($rootScope); + $rootElement.append(element); + jqLite($document[0].body).append($rootElement); + + $animate.addClass(element, 'some-klass'); + + var prop = $sniffer.vendorPrefix == 'Webkit' ? 'WebkitAnimation' : 'animation'; + + expect(element[0].style[prop]).toContain('none'); + expect($window.getComputedStyle(element[0])[prop + 'Duration']).toBe('0s'); + + $timeout.flush(); + }); + }); }); -- cgit v1.2.3