@@ -1903,6 +1903,90 @@ describe('Scope', function() {
1903
1903
} ) ) ;
1904
1904
1905
1905
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
+
1906
1990
it ( 'should decrement ancestor $$listenerCount entries' , inject ( function ( $rootScope ) {
1907
1991
var child1 = $rootScope . $new ( ) ,
1908
1992
child2 = child1 . $new ( ) ,
0 commit comments