diff options
| author | Matias Niemelä | 2013-08-13 20:51:03 -0400 |
|---|---|---|
| committer | Misko Hevery | 2013-09-03 17:06:49 -0700 |
| commit | 4e15c4fb47e93c1f6619a09125bc9a350e39b113 (patch) | |
| tree | 6de258934679cf4a35583335b841db263b7c0f5f /test/ng/rootScopeSpec.js | |
| parent | 4382df03fa1962aed027742c1b463406c40653c9 (diff) | |
| download | angular.js-4e15c4fb47e93c1f6619a09125bc9a350e39b113.tar.bz2 | |
chore($rootScope): provide support to execute a function after the digest cycle is complete
Diffstat (limited to 'test/ng/rootScopeSpec.js')
| -rw-r--r-- | test/ng/rootScopeSpec.js | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/test/ng/rootScopeSpec.js b/test/ng/rootScopeSpec.js index d6a684a7..656385e9 100644 --- a/test/ng/rootScopeSpec.js +++ b/test/ng/rootScopeSpec.js @@ -12,6 +12,12 @@ describe('Scope', function() { })); + it('should expose the constructor', inject(function($rootScope) { + if (msie) return; + expect($rootScope.__proto__).toBe($rootScope.constructor.prototype); + })); + + it('should not have $root on children, but should inherit', inject(function($rootScope) { var child = $rootScope.$new(); expect(child.$root).toEqual($rootScope); @@ -672,6 +678,74 @@ describe('Scope', function() { expect(log).toEqual('parent.async;child.async;parent.$digest;child.$digest;'); })); + it('should not run another digest for an $$postDigest call', inject(function($rootScope) { + var internalWatchCount = 0; + var externalWatchCount = 0; + + $rootScope.internalCount = 0; + $rootScope.externalCount = 0; + + $rootScope.$evalAsync(function(scope) { + $rootScope.internalCount++; + }); + + $rootScope.$$postDigest(function(scope) { + $rootScope.externalCount++; + }); + + $rootScope.$watch('internalCount', function(value) { + internalWatchCount = value; + }); + $rootScope.$watch('externalCount', function(value) { + externalWatchCount = value; + }); + + $rootScope.$digest(); + + expect(internalWatchCount).toEqual(1); + expect(externalWatchCount).toEqual(0); + })); + + it('should run a $$postDigest call on all child scopes when a parent scope is digested', inject(function($rootScope) { + var parent = $rootScope.$new(), + child = parent.$new(), + count = 0; + + $rootScope.$$postDigest(function() { + count++; + }); + + parent.$$postDigest(function() { + count++; + }); + + child.$$postDigest(function() { + count++; + }); + + expect(count).toBe(0); + $rootScope.$digest(); + expect(count).toBe(3); + })); + + it('should run a $$postDigest call even if the child scope is isolated', inject(function($rootScope) { + var parent = $rootScope.$new(), + child = parent.$new(true), + signature = ''; + + parent.$$postDigest(function() { + signature += 'A'; + }); + + child.$$postDigest(function() { + signature += 'B'; + }); + + expect(signature).toBe(''); + $rootScope.$digest(); + expect(signature).toBe('AB'); + })); + it('should cause a $digest rerun', inject(function($rootScope) { $rootScope.log = ''; $rootScope.value = 0; |
