diff options
| author | Matias Niemelàˆ | 2013-03-15 15:42:00 -0400 | 
|---|---|---|
| committer | Misko Hevery | 2013-03-29 22:00:25 -0700 | 
| commit | 5eb968553a1130461ab8704535691e00eb154ac2 (patch) | |
| tree | bd77e15a4cfac5a08358f8030c97bf19b32db126 /test/ng/rootScopeSpec.js | |
| parent | 04cc1d2890fc6bf9c4e82a4c7cacd5a652ccbdc9 (diff) | |
| download | angular.js-5eb968553a1130461ab8704535691e00eb154ac2.tar.bz2 | |
feat(Scope): add $watchCollection method for observing collections
The new method allows to shallow watch collections (Arrays/Maps).
Diffstat (limited to 'test/ng/rootScopeSpec.js')
| -rw-r--r-- | test/ng/rootScopeSpec.js | 159 | 
1 files changed, 159 insertions, 0 deletions
| diff --git a/test/ng/rootScopeSpec.js b/test/ng/rootScopeSpec.js index 33db814c..f4b6e8a1 100644 --- a/test/ng/rootScopeSpec.js +++ b/test/ng/rootScopeSpec.js @@ -362,6 +362,165 @@ describe('Scope', function() {        $rootScope.$digest();        expect(log).toEqual([]);      })); + +    describe('$watchCollection', function() { +      var log, $rootScope, deregister; + +      beforeEach(inject(function(_$rootScope_) { +        log = []; +        $rootScope = _$rootScope_; +        deregister = $rootScope.$watchCollection('obj', function logger(obj) { +          log.push(toJson(obj)); +        }); +      })); + + +      it('should not trigger if nothing change', inject(function($rootScope) { +        $rootScope.$digest(); +        expect(log).toEqual([undefined]); + +        $rootScope.$digest(); +        expect(log).toEqual([undefined]); +      })); + + +      it('should allow deregistration', inject(function($rootScope) { +        $rootScope.obj = []; +        $rootScope.$digest(); + +        expect(log).toEqual(['[]']); + +        $rootScope.obj.push('a'); +        deregister(); + +        $rootScope.$digest(); +        expect(log).toEqual(['[]']); +      })); + + +      describe('array', function() { +        it('should trigger when property changes into array', function() { +          $rootScope.obj = 'test'; +          $rootScope.$digest(); +          expect(log).toEqual(['"test"']); + +          $rootScope.obj = []; +          $rootScope.$digest(); +          expect(log).toEqual(['"test"', '[]']); + +          $rootScope.obj = {}; +          $rootScope.$digest(); +          expect(log).toEqual(['"test"', '[]', '{}']); + +          $rootScope.obj = []; +          $rootScope.$digest(); +          expect(log).toEqual(['"test"', '[]', '{}', '[]']); + +          $rootScope.obj = undefined; +          $rootScope.$digest(); +          expect(log).toEqual(['"test"', '[]', '{}', '[]', undefined]); +        }); + + +        it('should not trigger change when object in collection changes', function() { +          $rootScope.obj = [{}]; +          $rootScope.$digest(); +          expect(log).toEqual(['[{}]']); + +          $rootScope.obj[0].name = 'foo'; +          $rootScope.$digest(); +          expect(log).toEqual(['[{}]']); +        }); + + +        it('should watch array properties', function() { +          $rootScope.obj = []; +          $rootScope.$digest(); +          expect(log).toEqual(['[]']); + +          $rootScope.obj.push('a'); +          $rootScope.$digest(); +          expect(log).toEqual(['[]', '["a"]']); + +          $rootScope.obj[0] = 'b'; +          $rootScope.$digest(); +          expect(log).toEqual(['[]', '["a"]', '["b"]']); + +          $rootScope.obj.push([]); +          $rootScope.obj.push({}); +          log = []; +          $rootScope.$digest(); +          expect(log).toEqual(['["b",[],{}]']); + +          var temp = $rootScope.obj[1]; +          $rootScope.obj[1] = $rootScope.obj[2]; +          $rootScope.obj[2] = temp; +          $rootScope.$digest(); +          expect(log).toEqual([ '["b",[],{}]', '["b",{},[]]' ]); + +          $rootScope.obj.shift() +          log = []; +          $rootScope.$digest(); +          expect(log).toEqual([ '[{},[]]' ]); +        }); +      }); + + +      describe('object', function() { +        it('should trigger when property changes into object', function() { +          $rootScope.obj = 'test'; +          $rootScope.$digest(); +          expect(log).toEqual(['"test"']); + +          $rootScope.obj = {}; +          $rootScope.$digest(); +          expect(log).toEqual(['"test"', '{}']); +        }); + + +        it('should not trigger change when object in collection changes', function() { +          $rootScope.obj = {name: {}}; +          $rootScope.$digest(); +          expect(log).toEqual(['{"name":{}}']); + +          $rootScope.obj.name.bar = 'foo'; +          $rootScope.$digest(); +          expect(log).toEqual(['{"name":{}}']); +        }); + + +        it('should watch object properties', function() { +          $rootScope.obj = {}; +          $rootScope.$digest(); +          expect(log).toEqual(['{}']); + +          $rootScope.obj.a= 'A'; +          $rootScope.$digest(); +          expect(log).toEqual(['{}', '{"a":"A"}']); + +          $rootScope.obj.a = 'B'; +          $rootScope.$digest(); +          expect(log).toEqual(['{}', '{"a":"A"}', '{"a":"B"}']); + +          $rootScope.obj.b = []; +          $rootScope.obj.c = {}; +          log = []; +          $rootScope.$digest(); +          expect(log).toEqual(['{"a":"B","b":[],"c":{}}']); + +          var temp = $rootScope.obj.a; +          $rootScope.obj.a = $rootScope.obj.b; +          $rootScope.obj.c = temp; +          $rootScope.$digest(); +          expect(log).toEqual([ '{"a":"B","b":[],"c":{}}', '{"a":[],"b":[],"c":"B"}' ]); + +          delete $rootScope.obj.a; +          log = []; +          $rootScope.$digest(); +          expect(log).toEqual([ '{"b":[],"c":"B"}' ]); +        }) +      }); +    });    }); | 
