@@ -123,6 +123,43 @@ test("deep computed is affected by changes to the observables properties", () =>
123123 expect ( mockedSubscriber ) . toHaveBeenCalledTimes ( 2 ) ;
124124} ) ;
125125
126+ test ( "A computed function with a loop referencing an Observable should not cause an infinite loop" , ( ) => {
127+ const config = Observable ( {
128+ showItems : true ,
129+ bla : 1
130+ } ) ;
131+ const items1 = Observable ( [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 ] ) ;
132+ const items2 = Observable ( [ 1 , 2 , 3 , 4 ] ) ;
133+ const computed = Computed ( ( ) => {
134+ return items1 . value . filter ( i => {
135+ return config . value . showItems && items2 . value . includes ( i ) ;
136+ } ) . map ( i => {
137+
138+ return i * config . value . bla ;
139+ } ) ;
140+ } ) ;
141+ const computedOfComputed = Computed ( ( ) => {
142+ return computed . value . map ( i => i * 2 ) . filter ( v => v > 1 && config . value . showItems ) ;
143+ } ) ;
144+ const mockedSubscriber1 = jest . fn ( ) ;
145+ const mockedSubscriber2 = jest . fn ( ) ;
146+ const mockedSubscriber3 = jest . fn ( ) ;
147+ const mockedSubscriber4 = jest . fn ( ) ;
148+ items1 . subscribe ( mockedSubscriber1 ) ;
149+ items2 . subscribe ( mockedSubscriber2 ) ;
150+ computed . subscribe ( mockedSubscriber3 ) ;
151+ computedOfComputed . subscribe ( mockedSubscriber4 ) ;
152+ expect ( computed . value ) . toEqual ( [ 1 , 2 , 3 , 4 ] ) ;
153+ expect ( computedOfComputed . value ) . toEqual ( [ 2 , 4 , 6 , 8 ] ) ;
154+ items2 . value . push ( 5 ) ;
155+ expect ( computed . value ) . toEqual ( [ 1 , 2 , 3 , 4 , 5 ] ) ;
156+ expect ( computedOfComputed . value ) . toEqual ( [ 2 , 4 , 6 , 8 , 10 ] ) ;
157+ expect ( mockedSubscriber1 ) . toHaveBeenCalledTimes ( 1 ) ;
158+ expect ( mockedSubscriber2 ) . toHaveBeenCalledTimes ( 2 ) ;
159+ expect ( mockedSubscriber3 ) . toHaveBeenCalledTimes ( 2 ) ;
160+ expect ( mockedSubscriber4 ) . toHaveBeenCalledTimes ( 2 ) ;
161+ } ) ;
162+
126163test ( "Have two computed arrays --> subscriber is called only once" , ( ) => {
127164 const entries = Observable ( [ { value : 1 } , { value : 2 } , { value : 3 } , { value : 4 } , { value : 5 } , { value : 6 } , { value : 7 } , { value : 8 } , { value : 9 } , { value : 10 } ] , true ) ;
128165 const categories = Observable ( [ { value : 1 } , { value : 2 } , { value : 3 } , { value : 4 } , { value : 5 } , { value : 6 } , { value : 7 } , { value : 8 } , { value : 9 } , { value : 10 } ] , true ) ;
0 commit comments