@@ -110,54 +110,61 @@ describe('uiScroll', function () {
110
110
} ) ;
111
111
112
112
describe ( 'datasource with 20 elements and buffer size 3 - constrained viewport' , function ( ) {
113
- var scrollSettings = { datasource : 'myMultipageDatasource' , itemHeight : 40 , bufferSize : 3 } ;
113
+ var scrollSettings = { datasource : 'myMultipageDatasource' , viewportHeight : 200 , itemHeight : 40 , bufferSize : 3 } ;
114
114
115
- it ( 'should create 6 divs with data (+ 2 padding divs)' , function ( ) {
115
+ it ( 'should create 9 divs with data (+ 2 padding divs)' , function ( ) {
116
116
runTest ( scrollSettings ,
117
- function ( viewport ) {
118
- expect ( viewport . children ( ) . length ) . toBe ( 8 ) ;
119
- expect ( viewport . scrollTop ( ) ) . toBe ( 0 ) ;
120
- expect ( viewport . children ( ) . css ( 'height' ) ) . toBe ( '0px' ) ;
121
- expect ( angular . element ( viewport . children ( ) [ 7 ] ) . css ( 'height' ) ) . toBe ( '0px' ) ;
122
-
123
- for ( var i = 1 ; i < 7 ; i ++ ) {
124
- var row = viewport . children ( ) [ i ] ;
125
- expect ( row . tagName . toLowerCase ( ) ) . toBe ( 'div' ) ;
126
- expect ( row . innerHTML ) . toBe ( i + ': item' + i ) ;
127
- }
117
+ function ( viewport ) {
118
+ var itemsLoaded = 9 ;
119
+ var itemsWithPaddings = itemsLoaded + 2 ;
120
+ expect ( viewport . children ( ) . length ) . toBe ( itemsWithPaddings ) ;
121
+ expect ( viewport . scrollTop ( ) ) . toBe ( 0 ) ;
122
+ expect ( viewport . children ( ) . css ( 'height' ) ) . toBe ( '0px' ) ;
123
+ expect ( angular . element ( viewport . children ( ) [ itemsWithPaddings - 1 ] ) . css ( 'height' ) ) . toBe ( '0px' ) ;
124
+
125
+ for ( var i = 1 ; i < itemsLoaded ; i ++ ) {
126
+ var row = viewport . children ( ) [ i ] ;
127
+ expect ( row . tagName . toLowerCase ( ) ) . toBe ( 'div' ) ;
128
+ expect ( row . innerHTML ) . toBe ( i + ': item' + i ) ;
128
129
}
130
+ }
129
131
) ;
130
132
} ) ;
131
133
132
- it ( 'should call get on the datasource 3 times ' , function ( ) {
133
- var spy ;
134
- inject ( function ( myMultipageDatasource ) {
135
- spy = spyOn ( myMultipageDatasource , 'get' ) . and . callThrough ( ) ;
136
- } ) ;
134
+ it ( 'should call get on the datasource 4 times ' , function ( ) {
135
+ var spy ;
136
+ inject ( function ( myMultipageDatasource ) {
137
+ spy = spyOn ( myMultipageDatasource , 'get' ) . and . callThrough ( ) ;
138
+ } ) ;
137
139
runTest ( scrollSettings ,
138
140
function ( ) {
139
- expect ( spy . calls . all ( ) . length ) . toBe ( 3 ) ;
141
+ // There are 9 loaded items, so there were 3 data calls
142
+ // Additional call was for top items resulted with 0 items.
143
+ expect ( spy . calls . all ( ) . length ) . toBe ( 4 ) ;
140
144
141
145
expect ( spy . calls . all ( ) [ 0 ] . args [ 0 ] ) . toBe ( 1 ) ;
142
146
expect ( spy . calls . all ( ) [ 1 ] . args [ 0 ] ) . toBe ( 4 ) ;
143
- expect ( spy . calls . all ( ) [ 2 ] . args [ 0 ] ) . toBe ( - 2 ) ;
147
+ expect ( spy . calls . all ( ) [ 2 ] . args [ 0 ] ) . toBe ( 7 ) ;
148
+ expect ( spy . calls . all ( ) [ 3 ] . args [ 0 ] ) . toBe ( - 2 ) ;
144
149
}
145
150
) ;
146
151
} ) ;
147
152
148
- it ( 'should create 3 more divs (9 divs total) with data (+ 2 padding divs)' , function ( ) {
153
+ it ( 'should create 3 more divs (12 divs total) with data (+ 2 padding divs)' , function ( ) {
154
+ var itemsLoaded = 12 ;
155
+ var itemsWithPaddings = itemsLoaded + 2 ;
149
156
runTest ( scrollSettings ,
150
157
function ( viewport ) {
151
158
viewport . scrollTop ( 100 ) ;
152
159
viewport . trigger ( 'scroll' ) ;
153
160
inject ( function ( $timeout ) {
154
161
$timeout . flush ( ) ;
155
- expect ( viewport . children ( ) . length ) . toBe ( 11 ) ;
156
- expect ( viewport . scrollTop ( ) ) . toBe ( 40 ) ;
162
+ expect ( viewport . children ( ) . length ) . toBe ( itemsWithPaddings ) ;
163
+ expect ( viewport . scrollTop ( ) ) . toBe ( 100 ) ;
157
164
expect ( viewport . children ( ) . css ( 'height' ) ) . toBe ( '0px' ) ;
158
- expect ( angular . element ( viewport . children ( ) [ 10 ] ) . css ( 'height' ) ) . toBe ( '0px' ) ;
165
+ expect ( angular . element ( viewport . children ( ) [ itemsWithPaddings - 1 ] ) . css ( 'height' ) ) . toBe ( '0px' ) ;
159
166
160
- for ( var i = 1 ; i < 10 ; i ++ ) {
167
+ for ( var i = 1 ; i < itemsLoaded ; i ++ ) {
161
168
var row = viewport . children ( ) [ i ] ;
162
169
expect ( row . tagName . toLowerCase ( ) ) . toBe ( 'div' ) ;
163
170
expect ( row . innerHTML ) . toBe ( i + ': item' + i ) ;
@@ -167,7 +174,7 @@ describe('uiScroll', function () {
167
174
) ;
168
175
} ) ;
169
176
170
- it ( 'should call get on the datasource 1 extra time (4 total) ' , function ( ) {
177
+ it ( 'should call get on the datasource 1 extra time (5 total) ' , function ( ) {
171
178
var spy ;
172
179
inject ( function ( myMultipageDatasource ) {
173
180
spy = spyOn ( myMultipageDatasource , 'get' ) . and . callThrough ( ) ;
@@ -178,19 +185,23 @@ describe('uiScroll', function () {
178
185
viewport . trigger ( 'scroll' ) ;
179
186
$timeout . flush ( ) ;
180
187
181
- expect ( spy . calls . all ( ) . length ) . toBe ( 4 ) ;
188
+ expect ( spy . calls . all ( ) . length ) . toBe ( 5 ) ;
182
189
183
190
expect ( spy . calls . all ( ) [ 0 ] . args [ 0 ] ) . toBe ( 1 ) ;
184
191
expect ( spy . calls . all ( ) [ 1 ] . args [ 0 ] ) . toBe ( 4 ) ;
185
- expect ( spy . calls . all ( ) [ 2 ] . args [ 0 ] ) . toBe ( - 2 ) ;
186
- expect ( spy . calls . all ( ) [ 3 ] . args [ 0 ] ) . toBe ( 7 ) ;
192
+ expect ( spy . calls . all ( ) [ 2 ] . args [ 0 ] ) . toBe ( 7 ) ;
193
+ expect ( spy . calls . all ( ) [ 3 ] . args [ 0 ] ) . toBe ( - 2 ) ;
194
+ expect ( spy . calls . all ( ) [ 4 ] . args [ 0 ] ) . toBe ( 10 ) ;
187
195
}
188
196
) ;
189
197
} ) ;
190
198
191
- it ( 'should clip 3 divs from the top and add 3 more divs to the bottom (9 divs total) (+ 2 padding divs)' , function ( ) {
199
+ it ( 'should clip 4 divs from the top and add 3 more divs to the bottom (11 divs total) (+ 2 padding divs)' , function ( ) {
192
200
runTest ( scrollSettings ,
193
201
function ( viewport , scope , $timeout ) {
202
+ var itemsLoaded = 11 ;
203
+ var itemsWithPaddings = itemsLoaded + 2 ;
204
+ var clippedDivs = 4 ;
194
205
viewport . scrollTop ( 100 ) ;
195
206
viewport . trigger ( 'scroll' ) ;
196
207
$timeout . flush ( ) ;
@@ -199,27 +210,28 @@ describe('uiScroll', function () {
199
210
viewport . trigger ( 'scroll' ) ;
200
211
$timeout . flush ( ) ;
201
212
202
- expect ( viewport . children ( ) . length ) . toBe ( 11 ) ;
203
- expect ( viewport . scrollTop ( ) ) . toBe ( 160 ) ;
204
- expect ( viewport . children ( ) . css ( 'height' ) ) . toBe ( '120px ' ) ;
205
- expect ( angular . element ( viewport . children ( ) [ 10 ] ) . css ( 'height' ) ) . toBe ( '0px' ) ;
213
+ expect ( viewport . children ( ) . length ) . toBe ( itemsWithPaddings ) ;
214
+ expect ( viewport . scrollTop ( ) ) . toBe ( 280 ) ;
215
+ expect ( viewport . children ( ) . css ( 'height' ) ) . toBe ( '160px ' ) ;
216
+ expect ( angular . element ( viewport . children ( ) [ itemsWithPaddings - 1 ] ) . css ( 'height' ) ) . toBe ( '0px' ) ;
206
217
207
- for ( var i = 1 ; i < 10 ; i ++ ) {
218
+ for ( var i = 1 ; i <= itemsLoaded ; i ++ ) {
208
219
var row = viewport . children ( ) [ i ] ;
209
220
expect ( row . tagName . toLowerCase ( ) ) . toBe ( 'div' ) ;
210
- expect ( row . innerHTML ) . toBe ( ( i + 3 ) + ': item' + ( i + 3 ) ) ;
221
+ expect ( row . innerHTML ) . toBe ( ( i + clippedDivs ) + ': item' + ( i + clippedDivs ) ) ;
211
222
}
212
223
}
213
224
) ;
214
225
} ) ;
215
226
216
- it ( 'should call get on the datasource 1 more time (4 total) ' , function ( ) {
227
+ it ( 'should call get on the datasource 1 more time (6 total) ' , function ( ) {
217
228
var spy ;
218
229
inject ( function ( myMultipageDatasource ) {
219
230
spy = spyOn ( myMultipageDatasource , 'get' ) . and . callThrough ( ) ;
220
231
} ) ;
221
232
runTest ( scrollSettings ,
222
233
function ( viewport , scope , $timeout ) {
234
+ var calls = 6 ;
223
235
224
236
viewport . scrollTop ( 100 ) ;
225
237
viewport . trigger ( 'scroll' ) ;
@@ -229,20 +241,23 @@ describe('uiScroll', function () {
229
241
viewport . trigger ( 'scroll' ) ;
230
242
$timeout . flush ( ) ;
231
243
232
- expect ( spy . calls . all ( ) . length ) . toBe ( 5 ) ;
244
+ expect ( spy . calls . all ( ) . length ) . toBe ( calls ) ;
233
245
expect ( spy . calls . all ( ) [ 0 ] . args [ 0 ] ) . toBe ( 1 ) ;
234
246
expect ( spy . calls . all ( ) [ 1 ] . args [ 0 ] ) . toBe ( 4 ) ;
235
- expect ( spy . calls . all ( ) [ 2 ] . args [ 0 ] ) . toBe ( - 2 ) ;
236
- expect ( spy . calls . all ( ) [ 3 ] . args [ 0 ] ) . toBe ( 7 ) ;
247
+ expect ( spy . calls . all ( ) [ 2 ] . args [ 0 ] ) . toBe ( 7 ) ;
248
+ expect ( spy . calls . all ( ) [ 3 ] . args [ 0 ] ) . toBe ( - 2 ) ;
237
249
expect ( spy . calls . all ( ) [ 4 ] . args [ 0 ] ) . toBe ( 10 ) ;
250
+ expect ( spy . calls . all ( ) [ 5 ] . args [ 0 ] ) . toBe ( 13 ) ;
238
251
}
239
252
) ;
240
253
} ) ;
241
254
242
- it ( 'should re-add 3 divs at the top and clip 3 divs from the bottom (9 divs total) (+ 2 padding divs)' , function ( ) {
255
+ it ( 'should re-add 3 divs at the top and clip 2 divs from the bottom (9 divs total) (+ 2 padding divs)' , function ( ) {
243
256
runTest ( scrollSettings ,
244
257
function ( viewport , scope , $timeout ) {
245
258
var flush = $timeout . flush ;
259
+ var itemsLoaded = 8 ;
260
+ var itemsWithPaddings = itemsLoaded + 2 ;
246
261
247
262
viewport . scrollTop ( 100 ) ;
248
263
viewport . trigger ( 'scroll' ) ;
@@ -256,12 +271,12 @@ describe('uiScroll', function () {
256
271
viewport . trigger ( 'scroll' ) ;
257
272
flush ( ) ;
258
273
259
- expect ( viewport . children ( ) . length ) . toBe ( 8 ) ;
274
+ expect ( viewport . children ( ) . length ) . toBe ( itemsWithPaddings ) ;
260
275
expect ( viewport . scrollTop ( ) ) . toBe ( 0 ) ;
261
276
expect ( viewport . children ( ) . css ( 'height' ) ) . toBe ( '0px' ) ;
262
- expect ( angular . element ( viewport . children ( ) [ 7 ] ) . css ( 'height' ) ) . toBe ( '240px ' ) ;
277
+ expect ( angular . element ( viewport . children ( ) [ itemsWithPaddings - 1 ] ) . css ( 'height' ) ) . toBe ( '280px ' ) ;
263
278
264
- for ( var i = 1 ; i < 7 ; i ++ ) {
279
+ for ( var i = 1 ; i <= itemsLoaded ; i ++ ) {
265
280
var row = viewport . children ( ) [ i ] ;
266
281
expect ( row . tagName . toLowerCase ( ) ) . toBe ( 'div' ) ;
267
282
expect ( row . innerHTML ) . toBe ( ( i ) + ': item' + ( i ) ) ;
@@ -270,7 +285,7 @@ describe('uiScroll', function () {
270
285
) ;
271
286
} ) ;
272
287
273
- it ( 'should call get on the datasource 1 more time (4 total) ' , function ( ) {
288
+ it ( 'should call get on the datasource 1 more time (8 total) ' , function ( ) {
274
289
var spy ;
275
290
inject ( function ( myMultipageDatasource ) {
276
291
spy = spyOn ( myMultipageDatasource , 'get' ) . and . callThrough ( ) ;
@@ -279,6 +294,7 @@ describe('uiScroll', function () {
279
294
runTest ( scrollSettings ,
280
295
function ( viewport , scope , $timeout ) {
281
296
var flush = $timeout . flush ;
297
+ var totalCallsNumber = 8 ;
282
298
283
299
viewport . scrollTop ( 100 ) ;
284
300
viewport . trigger ( 'scroll' ) ;
@@ -292,15 +308,15 @@ describe('uiScroll', function () {
292
308
viewport . trigger ( 'scroll' ) ;
293
309
flush ( ) ;
294
310
295
- expect ( spy . calls . all ( ) . length ) . toBe ( 7 ) ;
311
+ expect ( spy . calls . all ( ) . length ) . toBe ( totalCallsNumber ) ;
296
312
expect ( spy . calls . all ( ) [ 0 ] . args [ 0 ] ) . toBe ( 1 ) ;
297
313
expect ( spy . calls . all ( ) [ 1 ] . args [ 0 ] ) . toBe ( 4 ) ;
298
- expect ( spy . calls . all ( ) [ 2 ] . args [ 0 ] ) . toBe ( - 2 ) ;
299
- expect ( spy . calls . all ( ) [ 3 ] . args [ 0 ] ) . toBe ( 7 ) ;
314
+ expect ( spy . calls . all ( ) [ 2 ] . args [ 0 ] ) . toBe ( 7 ) ;
315
+ expect ( spy . calls . all ( ) [ 3 ] . args [ 0 ] ) . toBe ( - 2 ) ;
300
316
expect ( spy . calls . all ( ) [ 4 ] . args [ 0 ] ) . toBe ( 10 ) ;
301
- expect ( spy . calls . all ( ) [ 5 ] . args [ 0 ] ) . toBe ( 1 ) ;
302
- expect ( spy . calls . all ( ) [ 6 ] . args [ 0 ] ) . toBe ( - 2 ) ;
303
-
317
+ expect ( spy . calls . all ( ) [ 5 ] . args [ 0 ] ) . toBe ( 13 ) ;
318
+ expect ( spy . calls . all ( ) [ 6 ] . args [ 0 ] ) . toBe ( 2 ) ;
319
+ expect ( spy . calls . all ( ) [ 7 ] . args [ 0 ] ) . toBe ( - 1 ) ;
304
320
}
305
321
) ;
306
322
} ) ;
@@ -392,7 +408,7 @@ describe('uiScroll', function () {
392
408
expect ( spy . calls . all ( ) [ 0 ] . args [ 0 ] ) . toBe ( 1 ) ;
393
409
expect ( spy . calls . all ( ) [ 1 ] . args [ 0 ] ) . toBe ( 4 ) ; //last full
394
410
expect ( spy . calls . all ( ) [ 2 ] . args [ 0 ] ) . toBe ( - 2 ) ;
395
- expect ( spy . calls . all ( ) [ 3 ] . args [ 0 ] ) . toBe ( 5 ) ; //empty
411
+ expect ( spy . calls . all ( ) [ 3 ] . args [ 0 ] ) . toBe ( 6 ) ; //empty
396
412
397
413
}
398
414
) ;
@@ -482,25 +498,25 @@ describe('uiScroll', function () {
482
498
viewport . trigger ( 'scroll' ) ;
483
499
484
500
wheelEventElement . dispatchEvent ( getNewWheelEvent ( ) ) ; //now we are at the top but preventDefault is occurred because of bof will be reached only after next scroll trigger
485
- expect ( documentScrollBubblingCount ) . toBe ( 1 ) ; //here! the only one prevented wheel-event
501
+ expect ( documentScrollBubblingCount ) . toBe ( 2 ) ; //here! the only one prevented wheel-event
486
502
487
503
flush ( ) ;
488
504
489
505
wheelEventElement . dispatchEvent ( getNewWheelEvent ( ) ) ; //preventDefault will not occurred but document will not scroll because of viewport will be scrolled
490
- expect ( documentScrollBubblingCount ) . toBe ( 2 ) ;
506
+ expect ( documentScrollBubblingCount ) . toBe ( 3 ) ;
491
507
492
508
viewport . scrollTop ( 0 ) ;
493
509
viewport . trigger ( 'scroll' ) ; //bof will be reached right after that
494
510
495
511
flush ( ) ;
496
512
497
513
wheelEventElement . dispatchEvent ( getNewWheelEvent ( ) ) ; //preventDefault will not occurred because of we are at the top and bof is reached
498
- expect ( documentScrollBubblingCount ) . toBe ( 3 ) ;
514
+ expect ( documentScrollBubblingCount ) . toBe ( 4 ) ;
499
515
500
516
expect ( flush ) . toThrow ( ) ; //there is no new data, bof is reached
501
517
502
518
wheelEventElement . dispatchEvent ( getNewWheelEvent ( ) ) ; //preventDefault will not occurred because of we are at the top and bof is reached
503
- expect ( documentScrollBubblingCount ) . toBe ( 4 ) ;
519
+ expect ( documentScrollBubblingCount ) . toBe ( 5 ) ;
504
520
505
521
} , {
506
522
cleanupTest : function ( ) {
@@ -678,7 +694,7 @@ describe('uiScroll', function () {
678
694
}
679
695
680
696
// unstable delta passing
681
- viewport . scrollTop ( viewport . scrollTop ( ) - 5 ) ;
697
+ viewport . scrollTop ( viewport . scrollTop ( ) ) ;
682
698
683
699
// scroll up + expectation
684
700
for ( i = 0 ; i < limit ; i ++ ) {
0 commit comments