'use strict'; describe("$animate", function() { describe("without animation", function() { var element, $rootElement; beforeEach(module(function() { return function($compile, _$rootElement_, $rootScope) { element = $compile('
')($rootScope); $rootElement = _$rootElement_; }; })); it("should add element at the start of enter animation", inject(function($animate, $compile, $rootScope) { var child = $compile('')($rootScope); expect(element.contents().length).toBe(0); $animate.enter(child, element); expect(element.contents().length).toBe(1); })); it("should enter the element to the start of the parent container", inject(function($animate, $compile, $rootScope) { for (var i = 0; i < 5; i++) { element.append(jqLite('test
'); $rootScope.$apply(function() { $animate.addClass(element, 'test-class1'); expect(element).not.toHaveClass('test-class1'); $animate.removeClass(element, 'test-class1'); $animate.addClass(element, 'test-class2'); expect(element).not.toHaveClass('test-class2'); $animate.setClass(element, 'test-class3', 'test-class4'); expect(element).not.toHaveClass('test-class3'); expect(element).not.toHaveClass('test-class4'); expect(log).toEqual([]); }); expect(element).not.toHaveClass('test-class1'); expect(element).not.toHaveClass('test-class4'); expect(element).toHaveClass('test-class2'); expect(element).toHaveClass('test-class3'); expect(log).toEqual(['addClass(test-class2 test-class3)']); expect(addClass.callCount).toBe(1); expect(removeClass.callCount).toBe(0); })); it('should defer class manipulation until postDigest when outside of digest', inject(function($rootScope, $animate, log) { setupClassManipulationLogger(log); element = jqLite('test
'); $animate.addClass(element, 'test-class1'); $animate.removeClass(element, 'test-class1'); $animate.addClass(element, 'test-class2'); $animate.setClass(element, 'test-class3', 'test-class4'); expect(log).toEqual([]); $rootScope.$digest(); expect(log).toEqual(['addClass(test-class2 test-class3)', 'removeClass(test-class4)']); expect(element).not.toHaveClass('test-class1'); expect(element).toHaveClass('test-class2'); expect(element).toHaveClass('test-class3'); expect(addClass.callCount).toBe(1); expect(removeClass.callCount).toBe(1); })); it('should perform class manipulation in expected order at end of digest', inject(function($rootScope, $animate, log) { element = jqLite('test
'); setupClassManipulationLogger(log); $rootScope.$apply(function() { $animate.addClass(element, 'test-class1'); $animate.addClass(element, 'test-class2'); $animate.removeClass(element, 'test-class1'); $animate.removeClass(element, 'test-class3'); $animate.addClass(element, 'test-class3'); }); expect(log).toEqual(['addClass(test-class2)']); })); it('should return a promise which is resolved on a different turn', inject(function(log, $animate, $browser, $rootScope) { element = jqLite('test
'); $animate.addClass(element, 'test1').then(log.fn('addClass(test1)')); $animate.removeClass(element, 'test2').then(log.fn('removeClass(test2)')); $rootScope.$digest(); expect(log).toEqual([]); $browser.defer.flush(); expect(log).toEqual(['addClass(test1)', 'removeClass(test2)']); log.reset(); element = jqLite('test
'); $rootScope.$apply(function() { $animate.addClass(element, 'test3').then(log.fn('addClass(test3)')); $animate.removeClass(element, 'test4').then(log.fn('removeClass(test4)')); expect(log).toEqual([]); }); $browser.defer.flush(); expect(log).toEqual(['addClass(test3)', 'removeClass(test4)']); })); it('should defer class manipulation until end of digest for SVG', inject(function($rootScope, $animate) { if (!window.SVGElement) return; setupClassManipulationSpies(); element = jqLite(''); var target = element.children().eq(0); $rootScope.$apply(function() { $animate.addClass(target, 'test-class1'); expect(target).not.toHaveClass('test-class1'); $animate.removeClass(target, 'test-class1'); $animate.addClass(target, 'test-class2'); expect(target).not.toHaveClass('test-class2'); $animate.setClass(target, 'test-class3', 'test-class4'); expect(target).not.toHaveClass('test-class3'); expect(target).not.toHaveClass('test-class4'); }); expect(target).not.toHaveClass('test-class1'); expect(target).toHaveClass('test-class2'); expect(addClass.callCount).toBe(1); expect(removeClass.callCount).toBe(0); })); it('should defer class manipulation until postDigest when outside of digest for SVG', inject(function($rootScope, $animate, log) { if (!window.SVGElement) return; setupClassManipulationLogger(log); element = jqLite(''); var target = element.children().eq(0); $animate.addClass(target, 'test-class1'); $animate.removeClass(target, 'test-class1'); $animate.addClass(target, 'test-class2'); $animate.setClass(target, 'test-class3', 'test-class4'); expect(log).toEqual([]); $rootScope.$digest(); expect(log).toEqual(['addClass(test-class2 test-class3)', 'removeClass(test-class4)']); expect(target).not.toHaveClass('test-class1'); expect(target).toHaveClass('test-class2'); expect(target).toHaveClass('test-class3'); expect(addClass.callCount).toBe(1); expect(removeClass.callCount).toBe(1); })); it('should perform class manipulation in expected order at end of digest for SVG', inject(function($rootScope, $animate, log) { if (!window.SVGElement) return; element = jqLite(''); var target = element.children().eq(0); setupClassManipulationLogger(log); $rootScope.$apply(function() { $animate.addClass(target, 'test-class1'); $animate.addClass(target, 'test-class2'); $animate.removeClass(target, 'test-class1'); $animate.removeClass(target, 'test-class3'); $animate.addClass(target, 'test-class3'); }); expect(log).toEqual(['addClass(test-class2)']); })); }); });