@@ -78,6 +78,46 @@ describe('ChangeObserver', () => {
78
78
expect ( mockFn2 . calls . count ( ) ) . toBe ( 1 )
79
79
} )
80
80
} )
81
+
82
+ it ( 'should not skip observers when handler causes unobserve' , ( ) => {
83
+ var getter = [ 'foo' , 'bar' ]
84
+ var mockFn = jasmine . createSpy ( )
85
+ var unreg = observer . onChange ( getter , ( ) => unreg ( ) )
86
+ observer . onChange ( getter , mockFn )
87
+
88
+ observer . notifyObservers ( initialState . updateIn ( getter , x => 2 ) )
89
+
90
+ expect ( mockFn . calls . count ( ) ) . toBe ( 1 )
91
+ } )
92
+
93
+ it ( 'should not call unwatched observers when removed during notify' , ( ) => {
94
+ var getter = [ 'foo' , 'bar' ]
95
+ var mockFn1 = jasmine . createSpy ( )
96
+ var mockFn2 = jasmine . createSpy ( )
97
+ observer . onChange ( getter , ( ) => {
98
+ mockFn1 ( )
99
+ unreg ( )
100
+ } )
101
+ var unreg = observer . onChange ( getter , mockFn2 )
102
+
103
+ observer . notifyObservers ( initialState . updateIn ( getter , x => 2 ) )
104
+
105
+ expect ( mockFn1 . calls . count ( ) ) . toBe ( 1 )
106
+ expect ( mockFn2 . calls . count ( ) ) . toBe ( 0 )
107
+ } )
108
+
109
+ it ( 'should not call new observers when handlers attach them' , ( ) => {
110
+ var getter = [ 'foo' , 'bar' ]
111
+ var mockFn1 = jasmine . createSpy ( )
112
+ var mockFn2 = jasmine . createSpy ( )
113
+ observer . onChange ( getter , mockFn1 )
114
+ observer . onChange ( getter , ( ) => observer . onChange ( getter , mockFn2 ) )
115
+
116
+ observer . notifyObservers ( initialState . updateIn ( getter , x => 2 ) )
117
+
118
+ expect ( mockFn1 . calls . count ( ) ) . toBe ( 1 )
119
+ expect ( mockFn2 . calls . count ( ) ) . toBe ( 0 )
120
+ } )
81
121
} )
82
122
// TODO: test the prevValues and registering an observable
83
123
} )
0 commit comments