@@ -2316,6 +2316,90 @@ describe('Scope', function() {
2316
2316
} ) ) ;
2317
2317
2318
2318
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
+
2319
2403
it ( 'should decrement ancestor $$listenerCount entries' , inject ( function ( $rootScope ) {
2320
2404
var child1 = $rootScope . $new ( ) ,
2321
2405
child2 = child1 . $new ( ) ,
0 commit comments