diff options
Diffstat (limited to 'test/ng')
| -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"}' ]); +        }) +      }); +    });    });  | 
