aboutsummaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
authorJeff Cross2013-11-05 23:53:00 -0800
committerJeff Cross2013-11-06 00:14:11 -0800
commitda344daa4023556f8abbef6d8ad87a16362b5861 (patch)
treec4c1bac9c45a1cb7762c5bd625c2808c22b967c7 /test
parent6fb191570ee72f087e8bb6b1d8f5eea0f585886c (diff)
downloadangular.js-da344daa4023556f8abbef6d8ad87a16362b5861.tar.bz2
fix(ngView): only run anchorScroll after animation is done
Diffstat (limited to 'test')
-rw-r--r--test/ngRoute/directive/ngViewSpec.js102
1 files changed, 102 insertions, 0 deletions
diff --git a/test/ngRoute/directive/ngViewSpec.js b/test/ngRoute/directive/ngViewSpec.js
index bfcb0929..1df19d6a 100644
--- a/test/ngRoute/directive/ngViewSpec.js
+++ b/test/ngRoute/directive/ngViewSpec.js
@@ -698,4 +698,106 @@ describe('ngView animations', function() {
}
});
});
+
+
+ describe('autoscroll', function () {
+ var autoScrollSpy;
+
+ function spyOnAnchorScroll() {
+ return function($provide, $routeProvider) {
+ autoScrollSpy = jasmine.createSpy('$anchorScroll');
+ $provide.value('$anchorScroll', autoScrollSpy);
+ $routeProvider.when('/foo', {
+ controller: angular.noop,
+ template: '<div></div>'
+ });
+ };
+ }
+
+ function spyOnAnimateEnter() {
+ return function($animate) {
+ spyOn($animate, 'enter').andCallThrough();
+ };
+ }
+
+ function compileAndLink(tpl) {
+ return function($compile, $rootScope, $location) {
+ element = $compile(tpl)($rootScope);
+ };
+ }
+
+ beforeEach(module(spyOnAnchorScroll(), 'mock.animate'));
+ beforeEach(inject(spyOnAnimateEnter()));
+
+ it('should call $anchorScroll if autoscroll attribute is present', inject(
+ compileAndLink('<div><ng:view autoscroll></ng:view></div>'),
+ function($rootScope, $animate, $timeout, $location) {
+
+ $location.path('/foo');
+ $rootScope.$digest();
+ $animate.flushNext('enter');
+ $timeout.flush();
+
+ expect(autoScrollSpy).toHaveBeenCalledOnce();
+ }));
+
+
+ it('should call $anchorScroll if autoscroll evaluates to true', inject(
+ compileAndLink('<div><ng:view src="tpl" autoscroll="value"></ng:view></div>'),
+ function($rootScope, $animate, $timeout, $location) {
+
+ $rootScope.value = true;
+ $location.path('/foo');
+ $rootScope.$digest();
+ $animate.flushNext('enter');
+ $timeout.flush();
+
+ expect(autoScrollSpy).toHaveBeenCalledOnce();
+ }));
+
+
+ it('should not call $anchorScroll if autoscroll attribute is not present', inject(
+ compileAndLink('<div><ng:view></ng:view></div>'),
+ function($rootScope, $location, $animate, $timeout) {
+
+ $location.path('/foo');
+ $rootScope.$digest();
+ $animate.flushNext('enter');
+ $timeout.flush();
+
+ expect(autoScrollSpy).not.toHaveBeenCalled();
+ }));
+
+
+ it('should not call $anchorScroll if autoscroll evaluates to false', inject(
+ compileAndLink('<div><ng:view autoscroll="value"></ng:view></div>'),
+ function($rootScope, $location, $animate, $timeout) {
+
+ $rootScope.value = false;
+ $location.path('/foo');
+ $rootScope.$digest();
+ $animate.flushNext('enter');
+ $timeout.flush();
+
+ expect(autoScrollSpy).not.toHaveBeenCalled();
+ }));
+
+
+ it('should only call $anchorScroll after the "enter" animation completes', inject(
+ compileAndLink('<div><ng:view autoscroll></ng:view></div>'),
+ function($rootScope, $location, $animate, $timeout) {
+ $location.path('/foo');
+
+ expect($animate.enter).not.toHaveBeenCalled();
+ $rootScope.$digest();
+
+ expect(autoScrollSpy).not.toHaveBeenCalled();
+
+ $animate.flushNext('enter');
+ $timeout.flush();
+
+ expect($animate.enter).toHaveBeenCalledOnce();
+ expect(autoScrollSpy).toHaveBeenCalledOnce();
+ }));
+ });
});