aboutsummaryrefslogtreecommitdiffstats
path: root/test/ng/rootScopeSpec.js
diff options
context:
space:
mode:
authorMatias Niemelàˆ2013-03-15 15:42:00 -0400
committerMisko Hevery2013-03-29 22:00:25 -0700
commit5eb968553a1130461ab8704535691e00eb154ac2 (patch)
treebd77e15a4cfac5a08358f8030c97bf19b32db126 /test/ng/rootScopeSpec.js
parent04cc1d2890fc6bf9c4e82a4c7cacd5a652ccbdc9 (diff)
downloadangular.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.js159
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"}' ]);
+ })
+ });
+ });
});