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