Skip to content

Commit 71d2c14

Browse files
jbedardNarretz
authored andcommitted
test($parse): add tests for watching one-time array/object literals
Closes angular#16477
1 parent 4492db3 commit 71d2c14

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed

test/ng/parseSpec.js

+86
Original file line numberDiff line numberDiff line change
@@ -2840,6 +2840,46 @@ describe('parser', function() {
28402840
expect(filterCalled).toBe(true);
28412841
});
28422842

2843+
it('should not be invoked unless the input/arguments change within literals', function() {
2844+
var filterCalls = [];
2845+
$filterProvider.register('foo', valueFn(function(input) {
2846+
filterCalls.push(input);
2847+
return input;
2848+
}));
2849+
2850+
scope.$watch('[(a | foo:b:1), undefined]');
2851+
scope.a = 0;
2852+
scope.$digest();
2853+
expect(filterCalls).toEqual([0]);
2854+
2855+
scope.$digest();
2856+
expect(filterCalls).toEqual([0]);
2857+
2858+
scope.a++;
2859+
scope.$digest();
2860+
expect(filterCalls).toEqual([0, 1]);
2861+
});
2862+
2863+
it('should not be invoked unless the input/arguments change within literals (one-time)', function() {
2864+
var filterCalls = [];
2865+
$filterProvider.register('foo', valueFn(function(input) {
2866+
filterCalls.push(input);
2867+
return input;
2868+
}));
2869+
2870+
scope.$watch('::[(a | foo:b:1), undefined]');
2871+
scope.a = 0;
2872+
scope.$digest();
2873+
expect(filterCalls).toEqual([0]);
2874+
2875+
scope.$digest();
2876+
expect(filterCalls).toEqual([0]);
2877+
2878+
scope.a++;
2879+
scope.$digest();
2880+
expect(filterCalls).toEqual([0, 1]);
2881+
});
2882+
28432883
it('should always be invoked if they are marked as having $stateful', function() {
28442884
var filterCalled = false;
28452885
$filterProvider.register('foo', valueFn(extend(function(input) {
@@ -2883,6 +2923,52 @@ describe('parser', function() {
28832923
expect(watcherCalls).toBe(1);
28842924
}));
28852925

2926+
it('should ignore changes within nested objects', function() {
2927+
var watchCalls = [];
2928+
scope.$watch('[a]', function(a) { watchCalls.push(a[0]); });
2929+
scope.a = 0;
2930+
scope.$digest();
2931+
expect(watchCalls).toEqual([0]);
2932+
2933+
scope.$digest();
2934+
expect(watchCalls).toEqual([0]);
2935+
2936+
scope.a++;
2937+
scope.$digest();
2938+
expect(watchCalls).toEqual([0, 1]);
2939+
2940+
scope.a = {};
2941+
scope.$digest();
2942+
expect(watchCalls).toEqual([0, 1, {}]);
2943+
2944+
scope.a.foo = 42;
2945+
scope.$digest();
2946+
expect(watchCalls).toEqual([0, 1, {foo: 42}]);
2947+
});
2948+
2949+
it('should ignore changes within nested objects (one-time)', function() {
2950+
var watchCalls = [];
2951+
scope.$watch('::[a, undefined]', function(a) { watchCalls.push(a[0]); });
2952+
scope.a = 0;
2953+
scope.$digest();
2954+
expect(watchCalls).toEqual([0]);
2955+
2956+
scope.$digest();
2957+
expect(watchCalls).toEqual([0]);
2958+
2959+
scope.a++;
2960+
scope.$digest();
2961+
expect(watchCalls).toEqual([0, 1]);
2962+
2963+
scope.a = {};
2964+
scope.$digest();
2965+
expect(watchCalls).toEqual([0, 1, {}]);
2966+
2967+
scope.a.foo = 42;
2968+
scope.$digest();
2969+
expect(watchCalls).toEqual([0, 1, {foo: 42}]);
2970+
});
2971+
28862972
describe('with non-primitive input', function() {
28872973

28882974
describe('that does NOT support valueOf()', function() {

0 commit comments

Comments
 (0)