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"}' ]); + }) + }); + }); }); |
