Skip to content

Commit cd8dd61

Browse files
committed
test($rootScope): test removal of event listeners during event broadcast
1 parent 00936ad commit cd8dd61

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed

test/ng/rootScopeSpec.js

+78
Original file line numberDiff line numberDiff line change
@@ -2316,6 +2316,84 @@ describe('Scope', function() {
23162316
}));
23172317

23182318

2319+
it('should call next listener when removing current', inject(function($rootScope) {
2320+
var listener1 = jasmine.createSpy().and.callFake(function() { remove1(); });
2321+
var remove1 = $rootScope.$on('abc', listener1);
2322+
2323+
var listener2 = jasmine.createSpy();
2324+
var remove2 = $rootScope.$on('abc', listener2);
2325+
2326+
var listener3 = jasmine.createSpy();
2327+
var remove3 = $rootScope.$on('abc', listener3);
2328+
2329+
$rootScope.$broadcast('abc');
2330+
expect(listener1).toHaveBeenCalled();
2331+
expect(listener2).toHaveBeenCalled();
2332+
expect(listener3).toHaveBeenCalled();
2333+
2334+
listener1.calls.reset();
2335+
listener2.calls.reset();
2336+
listener3.calls.reset();
2337+
2338+
$rootScope.$broadcast('abc');
2339+
expect(listener1).not.toHaveBeenCalled();
2340+
expect(listener2).toHaveBeenCalled();
2341+
expect(listener3).toHaveBeenCalled();
2342+
}));
2343+
2344+
2345+
it('should call all listeners when removing previous', inject(function($rootScope) {
2346+
var listener1 = jasmine.createSpy();
2347+
var remove1 = $rootScope.$on('abc', listener1);
2348+
2349+
var listener2 = jasmine.createSpy().and.callFake(remove1);
2350+
var remove2 = $rootScope.$on('abc', listener2);
2351+
2352+
var listener3 = jasmine.createSpy();
2353+
var remove3 = $rootScope.$on('abc', listener3);
2354+
2355+
$rootScope.$broadcast('abc');
2356+
expect(listener1).toHaveBeenCalled();
2357+
expect(listener2).toHaveBeenCalled();
2358+
expect(listener3).toHaveBeenCalled();
2359+
2360+
listener1.calls.reset();
2361+
listener2.calls.reset();
2362+
listener3.calls.reset();
2363+
2364+
$rootScope.$broadcast('abc');
2365+
expect(listener1).not.toHaveBeenCalled();
2366+
expect(listener2).toHaveBeenCalled();
2367+
expect(listener3).toHaveBeenCalled();
2368+
}));
2369+
2370+
2371+
it('should not call listener when removed by previous', inject(function($rootScope) {
2372+
var listener1 = jasmine.createSpy();
2373+
var remove1 = $rootScope.$on('abc', listener1);
2374+
2375+
var listener2 = jasmine.createSpy().and.callFake(function() { remove3(); });
2376+
var remove2 = $rootScope.$on('abc', listener2);
2377+
2378+
var listener3 = jasmine.createSpy();
2379+
var remove3 = $rootScope.$on('abc', listener3);
2380+
2381+
$rootScope.$broadcast('abc');
2382+
expect(listener1).toHaveBeenCalled();
2383+
expect(listener2).toHaveBeenCalled();
2384+
expect(listener3).not.toHaveBeenCalled();
2385+
2386+
listener1.calls.reset();
2387+
listener2.calls.reset();
2388+
listener3.calls.reset();
2389+
2390+
$rootScope.$broadcast('abc');
2391+
expect(listener1).toHaveBeenCalled();
2392+
expect(listener2).toHaveBeenCalled();
2393+
expect(listener3).not.toHaveBeenCalled();
2394+
}));
2395+
2396+
23192397
it('should decrement ancestor $$listenerCount entries', inject(function($rootScope) {
23202398
var child1 = $rootScope.$new(),
23212399
child2 = child1.$new(),

0 commit comments

Comments
 (0)