Skip to content
This repository was archived by the owner on Apr 12, 2024. It is now read-only.

Commit 417aefd

Browse files
committed
test($rootScope): test removal of event listeners during event broadcast
1 parent 6ad4c8d commit 417aefd

File tree

1 file changed

+84
-0
lines changed

1 file changed

+84
-0
lines changed

test/ng/rootScopeSpec.js

+84
Original file line numberDiff line numberDiff line change
@@ -1903,6 +1903,90 @@ describe('Scope', function() {
19031903
}));
19041904

19051905

1906+
it('should call next listener after removing the current listener via its own handler', inject(function($rootScope) {
1907+
var listener1 = jasmine.createSpy('listener1').and.callFake(function() { remove1(); });
1908+
var remove1 = $rootScope.$on('abc', listener1);
1909+
1910+
var listener2 = jasmine.createSpy('listener2');
1911+
var remove2 = $rootScope.$on('abc', listener2);
1912+
1913+
var listener3 = jasmine.createSpy('listener3');
1914+
var remove3 = $rootScope.$on('abc', listener3);
1915+
1916+
$rootScope.$broadcast('abc');
1917+
expect(listener1).toHaveBeenCalled();
1918+
expect(listener2).toHaveBeenCalled();
1919+
expect(listener3).toHaveBeenCalled();
1920+
1921+
listener1.calls.reset();
1922+
listener2.calls.reset();
1923+
listener3.calls.reset();
1924+
1925+
$rootScope.$broadcast('abc');
1926+
expect(listener1).not.toHaveBeenCalled();
1927+
expect(listener2).toHaveBeenCalled();
1928+
expect(listener3).toHaveBeenCalled();
1929+
}));
1930+
1931+
1932+
it('should call all subsequent listeners when a previous listener is removed via a handler', inject(function($rootScope) {
1933+
var listener1 = jasmine.createSpy();
1934+
var remove1 = $rootScope.$on('abc', listener1);
1935+
1936+
var listener2 = jasmine.createSpy().and.callFake(remove1);
1937+
var remove2 = $rootScope.$on('abc', listener2);
1938+
1939+
var listener3 = jasmine.createSpy();
1940+
var remove3 = $rootScope.$on('abc', listener3);
1941+
1942+
$rootScope.$broadcast('abc');
1943+
expect(listener1).toHaveBeenCalled();
1944+
expect(listener2).toHaveBeenCalled();
1945+
expect(listener3).toHaveBeenCalled();
1946+
1947+
listener1.calls.reset();
1948+
listener2.calls.reset();
1949+
listener3.calls.reset();
1950+
1951+
$rootScope.$broadcast('abc');
1952+
expect(listener1).not.toHaveBeenCalled();
1953+
expect(listener2).toHaveBeenCalled();
1954+
expect(listener3).toHaveBeenCalled();
1955+
}));
1956+
1957+
1958+
it('should not call listener when removed by previous', inject(function($rootScope) {
1959+
var listener1 = jasmine.createSpy('listener1');
1960+
var remove1 = $rootScope.$on('abc', listener1);
1961+
1962+
var listener2 = jasmine.createSpy('listener2').and.callFake(function() { remove3(); });
1963+
var remove2 = $rootScope.$on('abc', listener2);
1964+
1965+
var listener3 = jasmine.createSpy('listener3');
1966+
var remove3 = $rootScope.$on('abc', listener3);
1967+
1968+
var listener4 = jasmine.createSpy('listener4');
1969+
var remove4 = $rootScope.$on('abc', listener4);
1970+
1971+
$rootScope.$broadcast('abc');
1972+
expect(listener1).toHaveBeenCalled();
1973+
expect(listener2).toHaveBeenCalled();
1974+
expect(listener3).not.toHaveBeenCalled();
1975+
expect(listener4).toHaveBeenCalled();
1976+
1977+
listener1.calls.reset();
1978+
listener2.calls.reset();
1979+
listener3.calls.reset();
1980+
listener4.calls.reset();
1981+
1982+
$rootScope.$broadcast('abc');
1983+
expect(listener1).toHaveBeenCalled();
1984+
expect(listener2).toHaveBeenCalled();
1985+
expect(listener3).not.toHaveBeenCalled();
1986+
expect(listener4).toHaveBeenCalled();
1987+
}));
1988+
1989+
19061990
it('should decrement ancestor $$listenerCount entries', inject(function($rootScope) {
19071991
var child1 = $rootScope.$new(),
19081992
child2 = child1.$new(),

0 commit comments

Comments
 (0)