@@ -2316,6 +2316,90 @@ describe('Scope', function() {
23162316 } ) ) ;
23172317
23182318
2319+ it ( 'should call next listener after removing the current listener via its own handler' , inject ( function ( $rootScope ) {
2320+ var listener1 = jasmine . createSpy ( 'listener1' ) . and . callFake ( function ( ) { remove1 ( ) ; } ) ;
2321+ var remove1 = $rootScope . $on ( 'abc' , listener1 ) ;
2322+
2323+ var listener2 = jasmine . createSpy ( 'listener2' ) ;
2324+ var remove2 = $rootScope . $on ( 'abc' , listener2 ) ;
2325+
2326+ var listener3 = jasmine . createSpy ( 'listener3' ) ;
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 subsequent listeners when a previous listener is removed via a handler' , 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 ( 'listener1' ) ;
2373+ var remove1 = $rootScope . $on ( 'abc' , listener1 ) ;
2374+
2375+ var listener2 = jasmine . createSpy ( 'listener2' ) . and . callFake ( function ( ) { remove3 ( ) ; } ) ;
2376+ var remove2 = $rootScope . $on ( 'abc' , listener2 ) ;
2377+
2378+ var listener3 = jasmine . createSpy ( 'listener3' ) ;
2379+ var remove3 = $rootScope . $on ( 'abc' , listener3 ) ;
2380+
2381+ var listener4 = jasmine . createSpy ( 'listener4' ) ;
2382+ var remove4 = $rootScope . $on ( 'abc' , listener4 ) ;
2383+
2384+ $rootScope . $broadcast ( 'abc' ) ;
2385+ expect ( listener1 ) . toHaveBeenCalled ( ) ;
2386+ expect ( listener2 ) . toHaveBeenCalled ( ) ;
2387+ expect ( listener3 ) . not . toHaveBeenCalled ( ) ;
2388+ expect ( listener4 ) . toHaveBeenCalled ( ) ;
2389+
2390+ listener1 . calls . reset ( ) ;
2391+ listener2 . calls . reset ( ) ;
2392+ listener3 . calls . reset ( ) ;
2393+ listener4 . calls . reset ( ) ;
2394+
2395+ $rootScope . $broadcast ( 'abc' ) ;
2396+ expect ( listener1 ) . toHaveBeenCalled ( ) ;
2397+ expect ( listener2 ) . toHaveBeenCalled ( ) ;
2398+ expect ( listener3 ) . not . toHaveBeenCalled ( ) ;
2399+ expect ( listener4 ) . toHaveBeenCalled ( ) ;
2400+ } ) ) ;
2401+
2402+
23192403 it ( 'should decrement ancestor $$listenerCount entries' , inject ( function ( $rootScope ) {
23202404 var child1 = $rootScope . $new ( ) ,
23212405 child2 = child1 . $new ( ) ,
0 commit comments