fix($rootScope): TTL exception does not clear $$phase

When $digest() throws infinite digest exception it
does not properly clear the $phase leaving the scope
in an inconsistent state.

Closes #979
This commit is contained in:
Misko Hevery
2012-05-23 14:49:01 -07:00
parent 5214c1d0cb
commit 989446ecee
2 changed files with 45 additions and 12 deletions

View File

@@ -210,6 +210,8 @@ describe('Scope', function() {
'["a; newVal: 98; oldVal: 97","b; newVal: 99; oldVal: 98"],' +
'["a; newVal: 99; oldVal: 98","b; newVal: 100; oldVal: 99"],' +
'["a; newVal: 100; oldVal: 99","b; newVal: 101; oldVal: 100"]]');
expect($rootScope.$$phase).toBeNull();
});
});
@@ -492,6 +494,27 @@ describe('Scope', function() {
});
it('should log exceptions from $digest', function() {
module(function($rootScopeProvider, $exceptionHandlerProvider) {
$rootScopeProvider.digestTtl(2);
$exceptionHandlerProvider.mode('log');
});
inject(function($rootScope, $exceptionHandler) {
$rootScope.$watch('a', function() {$rootScope.b++;});
$rootScope.$watch('b', function() {$rootScope.a++;});
$rootScope.a = $rootScope.b = 0;
expect(function() {
$rootScope.$apply();
}).toThrow();
expect($exceptionHandler.errors[0]).toBeDefined();
expect($rootScope.$$phase).toBeNull();
});
});
describe('exceptions', function() {
var log;
beforeEach(module(function($exceptionHandlerProvider) {