@@ -2316,6 +2316,99 @@ describe('Scope', function() {
2316
2316
} ) ) ;
2317
2317
2318
2318
2319
+ // See issue https://github.com/angular/angular.js/issues/16135
2320
+ it ( 'should deallocate the listener array entry' , inject ( function ( $rootScope ) {
2321
+ var remove1 = $rootScope . $on ( 'abc' , noop ) ;
2322
+ $rootScope . $on ( 'abc' , noop ) ;
2323
+
2324
+ expect ( $rootScope . $$listeners [ 'abc' ] . length ) . toBe ( 2 ) ;
2325
+ expect ( 0 in $rootScope . $$listeners [ 'abc' ] ) . toBe ( true ) ;
2326
+
2327
+ remove1 ( ) ;
2328
+
2329
+ expect ( $rootScope . $$listeners [ 'abc' ] . length ) . toBe ( 2 ) ;
2330
+ expect ( 0 in $rootScope . $$listeners [ 'abc' ] ) . toBe ( false ) ;
2331
+ } ) ) ;
2332
+
2333
+
2334
+ it ( 'should call next listener when removing current' , inject ( function ( $rootScope ) {
2335
+ var listener1 = jasmine . createSpy ( ) . and . callFake ( function ( ) { remove1 ( ) ; } ) ;
2336
+ var remove1 = $rootScope . $on ( 'abc' , listener1 ) ;
2337
+
2338
+ var listener2 = jasmine . createSpy ( ) ;
2339
+ var remove2 = $rootScope . $on ( 'abc' , listener2 ) ;
2340
+
2341
+ var listener3 = jasmine . createSpy ( ) ;
2342
+ var remove3 = $rootScope . $on ( 'abc' , listener3 ) ;
2343
+
2344
+ $rootScope . $broadcast ( 'abc' ) ;
2345
+ expect ( listener1 ) . toHaveBeenCalled ( ) ;
2346
+ expect ( listener2 ) . toHaveBeenCalled ( ) ;
2347
+ expect ( listener3 ) . toHaveBeenCalled ( ) ;
2348
+
2349
+ listener1 . calls . reset ( ) ;
2350
+ listener2 . calls . reset ( ) ;
2351
+ listener3 . calls . reset ( ) ;
2352
+
2353
+ $rootScope . $broadcast ( 'abc' ) ;
2354
+ expect ( listener1 ) . not . toHaveBeenCalled ( ) ;
2355
+ expect ( listener2 ) . toHaveBeenCalled ( ) ;
2356
+ expect ( listener3 ) . toHaveBeenCalled ( ) ;
2357
+ } ) ) ;
2358
+
2359
+
2360
+ it ( 'should call all listeners when removing previous' , inject ( function ( $rootScope ) {
2361
+ var listener1 = jasmine . createSpy ( ) ;
2362
+ var remove1 = $rootScope . $on ( 'abc' , listener1 ) ;
2363
+
2364
+ var listener2 = jasmine . createSpy ( ) . and . callFake ( remove1 ) ;
2365
+ var remove2 = $rootScope . $on ( 'abc' , listener2 ) ;
2366
+
2367
+ var listener3 = jasmine . createSpy ( ) ;
2368
+ var remove3 = $rootScope . $on ( 'abc' , listener3 ) ;
2369
+
2370
+ $rootScope . $broadcast ( 'abc' ) ;
2371
+ expect ( listener1 ) . toHaveBeenCalled ( ) ;
2372
+ expect ( listener2 ) . toHaveBeenCalled ( ) ;
2373
+ expect ( listener3 ) . toHaveBeenCalled ( ) ;
2374
+
2375
+ listener1 . calls . reset ( ) ;
2376
+ listener2 . calls . reset ( ) ;
2377
+ listener3 . calls . reset ( ) ;
2378
+
2379
+ $rootScope . $broadcast ( 'abc' ) ;
2380
+ expect ( listener1 ) . not . toHaveBeenCalled ( ) ;
2381
+ expect ( listener2 ) . toHaveBeenCalled ( ) ;
2382
+ expect ( listener3 ) . toHaveBeenCalled ( ) ;
2383
+ } ) ) ;
2384
+
2385
+
2386
+ it ( 'should not call listener when removed by previous' , inject ( function ( $rootScope ) {
2387
+ var listener1 = jasmine . createSpy ( ) ;
2388
+ var remove1 = $rootScope . $on ( 'abc' , listener1 ) ;
2389
+
2390
+ var listener2 = jasmine . createSpy ( ) . and . callFake ( function ( ) { remove3 ( ) ; } ) ;
2391
+ var remove2 = $rootScope . $on ( 'abc' , listener2 ) ;
2392
+
2393
+ var listener3 = jasmine . createSpy ( ) ;
2394
+ var remove3 = $rootScope . $on ( 'abc' , listener3 ) ;
2395
+
2396
+ $rootScope . $broadcast ( 'abc' ) ;
2397
+ expect ( listener1 ) . toHaveBeenCalled ( ) ;
2398
+ expect ( listener2 ) . toHaveBeenCalled ( ) ;
2399
+ expect ( listener3 ) . not . toHaveBeenCalled ( ) ;
2400
+
2401
+ listener1 . calls . reset ( ) ;
2402
+ listener2 . calls . reset ( ) ;
2403
+ listener3 . calls . reset ( ) ;
2404
+
2405
+ $rootScope . $broadcast ( 'abc' ) ;
2406
+ expect ( listener1 ) . toHaveBeenCalled ( ) ;
2407
+ expect ( listener2 ) . toHaveBeenCalled ( ) ;
2408
+ expect ( listener3 ) . not . toHaveBeenCalled ( ) ;
2409
+ } ) ) ;
2410
+
2411
+
2319
2412
it ( 'should decrement ancestor $$listenerCount entries' , inject ( function ( $rootScope ) {
2320
2413
var child1 = $rootScope . $new ( ) ,
2321
2414
child2 = child1 . $new ( ) ,
0 commit comments