diff options
Diffstat (limited to 'test/ng/rootScopeSpec.js')
| -rw-r--r-- | test/ng/rootScopeSpec.js | 68 | 
1 files changed, 68 insertions, 0 deletions
| diff --git a/test/ng/rootScopeSpec.js b/test/ng/rootScopeSpec.js index 9830d981..ee7fb796 100644 --- a/test/ng/rootScopeSpec.js +++ b/test/ng/rootScopeSpec.js @@ -708,6 +708,74 @@ describe('Scope', function() {        }); +      it('should allow removing event listener inside a listener on $emit', function() { +        var spy1 = jasmine.createSpy('1st listener'); +        var spy2 = jasmine.createSpy('2nd listener'); +        var spy3 = jasmine.createSpy('3rd listener'); + +        var remove1 = child.$on('evt', spy1); +        var remove2 = child.$on('evt', spy2); +        var remove3 = child.$on('evt', spy3); + +        spy1.andCallFake(remove1); + +        expect(child.$$listeners['evt'].length).toBe(3); + +        // should call all listeners and remove 1st +        child.$emit('evt'); +        expect(spy1).toHaveBeenCalledOnce(); +        expect(spy2).toHaveBeenCalledOnce(); +        expect(spy3).toHaveBeenCalledOnce(); +        expect(child.$$listeners['evt'].length).toBe(3); // cleanup will happen on next $emit + +        spy1.reset(); +        spy2.reset(); +        spy3.reset(); + +        // should call only 2nd because 1st was already removed and 2nd removes 3rd +        spy2.andCallFake(remove3); +        child.$emit('evt'); +        expect(spy1).not.toHaveBeenCalled(); +        expect(spy2).toHaveBeenCalledOnce(); +        expect(spy3).not.toHaveBeenCalled(); +        expect(child.$$listeners['evt'].length).toBe(1); +      }); + + +      it('should allow removing event listener inside a listener on $broadcast', function() { +        var spy1 = jasmine.createSpy('1st listener'); +        var spy2 = jasmine.createSpy('2nd listener'); +        var spy3 = jasmine.createSpy('3rd listener'); + +        var remove1 = child.$on('evt', spy1); +        var remove2 = child.$on('evt', spy2); +        var remove3 = child.$on('evt', spy3); + +        spy1.andCallFake(remove1); + +        expect(child.$$listeners['evt'].length).toBe(3); + +        // should call all listeners and remove 1st +        child.$broadcast('evt'); +        expect(spy1).toHaveBeenCalledOnce(); +        expect(spy2).toHaveBeenCalledOnce(); +        expect(spy3).toHaveBeenCalledOnce(); +        expect(child.$$listeners['evt'].length).toBe(3); //cleanup will happen on next $broadcast + +        spy1.reset(); +        spy2.reset(); +        spy3.reset(); + +        // should call only 2nd because 1st was already removed and 2nd removes 3rd +        spy2.andCallFake(remove3); +        child.$broadcast('evt'); +        expect(spy1).not.toHaveBeenCalled(); +        expect(spy2).toHaveBeenCalledOnce(); +        expect(spy3).not.toHaveBeenCalled(); +        expect(child.$$listeners['evt'].length).toBe(1); +      }); + +        describe('event object', function() {          it('should have methods/properties', function() {            var event; | 
