@@ -3118,6 +3118,74 @@ describe('parser', function() {
3118
3118
scope . $digest ( ) ;
3119
3119
expect ( objB . value ) . toBe ( scope . input ) ;
3120
3120
} ) ) ;
3121
+
3122
+ it ( 'should support watching literals' , inject ( function ( $parse ) {
3123
+ var lastVal = NaN ;
3124
+ var callCount = 0 ;
3125
+ var listener = function ( val ) { callCount ++ ; lastVal = val ; } ;
3126
+
3127
+ scope . $watch ( '{val: val}' , listener ) ;
3128
+
3129
+ scope . $apply ( 'val = 1' ) ;
3130
+ expect ( callCount ) . toBe ( 1 ) ;
3131
+ expect ( lastVal ) . toEqual ( { val : 1 } ) ;
3132
+
3133
+ scope . $apply ( 'val = []' ) ;
3134
+ expect ( callCount ) . toBe ( 2 ) ;
3135
+ expect ( lastVal ) . toEqual ( { val : [ ] } ) ;
3136
+
3137
+ scope . $apply ( 'val = []' ) ;
3138
+ expect ( callCount ) . toBe ( 3 ) ;
3139
+ expect ( lastVal ) . toEqual ( { val : [ ] } ) ;
3140
+
3141
+ scope . $apply ( 'val = {}' ) ;
3142
+ expect ( callCount ) . toBe ( 4 ) ;
3143
+ expect ( lastVal ) . toEqual ( { val : { } } ) ;
3144
+ } ) ) ;
3145
+
3146
+ it ( 'should only watch the direct inputs to literals' , inject ( function ( $parse ) {
3147
+ var lastVal = NaN ;
3148
+ var callCount = 0 ;
3149
+ var listener = function ( val ) { callCount ++ ; lastVal = val ; } ;
3150
+
3151
+ scope . $watch ( '{val: val}' , listener ) ;
3152
+
3153
+ scope . $apply ( 'val = 1' ) ;
3154
+ expect ( callCount ) . toBe ( 1 ) ;
3155
+ expect ( lastVal ) . toEqual ( { val : 1 } ) ;
3156
+
3157
+ scope . $apply ( 'val = [2]' ) ;
3158
+ expect ( callCount ) . toBe ( 2 ) ;
3159
+ expect ( lastVal ) . toEqual ( { val : [ 2 ] } ) ;
3160
+
3161
+ scope . $apply ( 'val.push(3)' ) ;
3162
+ expect ( callCount ) . toBe ( 2 ) ;
3163
+
3164
+ scope . $apply ( 'val.length = 0' ) ;
3165
+ expect ( callCount ) . toBe ( 2 ) ;
3166
+ } ) ) ;
3167
+
3168
+ it ( 'should only watch the direct inputs to nested literals' , inject ( function ( $parse ) {
3169
+ var lastVal = NaN ;
3170
+ var callCount = 0 ;
3171
+ var listener = function ( val ) { callCount ++ ; lastVal = val ; } ;
3172
+
3173
+ scope . $watch ( '[{val: [val]}]' , listener ) ;
3174
+
3175
+ scope . $apply ( 'val = 1' ) ;
3176
+ expect ( callCount ) . toBe ( 1 ) ;
3177
+ expect ( lastVal ) . toEqual ( [ { val : [ 1 ] } ] ) ;
3178
+
3179
+ scope . $apply ( 'val = [2]' ) ;
3180
+ expect ( callCount ) . toBe ( 2 ) ;
3181
+ expect ( lastVal ) . toEqual ( [ { val : [ [ 2 ] ] } ] ) ;
3182
+
3183
+ scope . $apply ( 'val.push(3)' ) ;
3184
+ expect ( callCount ) . toBe ( 2 ) ;
3185
+
3186
+ scope . $apply ( 'val.length = 0' ) ;
3187
+ expect ( callCount ) . toBe ( 2 ) ;
3188
+ } ) ) ;
3121
3189
} ) ;
3122
3190
3123
3191
describe ( 'locals' , function ( ) {
0 commit comments