on a17a20f help sign in
unity8/tests/plugins/ListViewWithPageHeader/listviewwithpageheadertest.cpp
1510 lines 59 kB history raw
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
17#include "listviewwithpageheader.h"
19#include <QAbstractItemModel>
20#include <QQmlEngine>
21#include <QQuickView>
22#include <QtTestGui>
23#include <private/qquicklistmodel_p.h>
24#include <private/qquickanimation_p.h>
25#include <private/qquickitem_p.h>
27class ListViewWithPageHeaderTest : public QObject
29 Q_OBJECT
31private Q_SLOTS:
33 void initTestCase()
34 {
35 }
37 void init()
38 {
39 view = new QQuickView();
40 view->engine()->addImportPath(BUILT_PLUGINS_DIR);
41 view->setSource(QUrl::fromLocalFile(LISTVIEWWITHPAGEHEADER_FOLDER "/test.qml"));
42 lvwph = dynamic_cast<ListViewWithPageHeader*>(view->rootObject()->findChild<QQuickFlickable*>());
43 model = view->rootObject()->findChild<QQuickListModel*>();
44 otherDelegate = view->rootObject()->findChild<QQmlComponent*>();
45 QVERIFY(lvwph);
46 QVERIFY(model);
47 QVERIFY(otherDelegate);
48 view->show();
49 QTest::qWaitForWindowExposed(view);
51 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
52 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
53 verifyItem(0, 50., 150., false);
54 verifyItem(1, 200., 200., false);
55 verifyItem(2, 400., 350., false);
56 verifyItem(3, 750., 350., true);
57 QCOMPARE(lvwph->m_minYExtent, 0.);
58 QCOMPARE(lvwph->m_clipItem->y(), 0.);
59 QCOMPARE(lvwph->m_clipItem->clip(), false);
60 QCOMPARE(lvwph->m_headerItem->y(), 0.);
61 QCOMPARE(lvwph->m_headerItem->height(), 50.);
62 QCOMPARE(lvwph->contentY(), 0.);
63 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
64 }
66 void cleanup()
67 {
68 delete view;
69 }
71 void verifyItem(int visibleIndex, qreal pos, qreal height, bool culled)
72 {
73 ListViewWithPageHeader::ListItem *item = lvwph->m_visibleItems[visibleIndex];
74 QTRY_COMPARE(item->y(), pos);
75 QTRY_COMPARE(item->height(), height);
76 QCOMPARE(QQuickItemPrivate::get(item->m_item)->culled, culled);
77 }
79 void changeContentY(qreal change)
80 {
81 const qreal dest = lvwph->contentY() + change;
82 if (dest > lvwph->contentY()) {
83 const qreal jump = 25;
84 while (lvwph->contentY() + jump < dest) {
85 lvwph->setContentY(lvwph->contentY() + jump);
86 QTest::qWait(0);
87 }
88 } else {
89 const qreal jump = -25;
90 while (lvwph->contentY() + jump > dest) {
91 lvwph->setContentY(lvwph->contentY() + jump);
92 QTest::qWait(0);
93 }
94 }
95 lvwph->setContentY(dest);
96 QTest::qWait(0);
97 }
99 void scrollToTop()
100 {
101 const qreal jump = -25;
102 while (!lvwph->isAtYBeginning()) {
103 if (lvwph->contentY() + jump > -lvwph->minYExtent()) {
104 lvwph->setContentY(lvwph->contentY() + jump);
105 } else {
106 lvwph->setContentY(lvwph->contentY() - 1);
107 }
108 QTest::qWait(0);
109 }
110 }
112 void scrollToBottom()
113 {
114 const qreal jump = 25;
115 while (!lvwph->isAtYEnd()) {
116 if (lvwph->contentY() + lvwph->height() + jump < lvwph->contentHeight()) {
117 lvwph->setContentY(lvwph->contentY() + jump);
118 } else {
119 lvwph->setContentY(lvwph->contentY() + 1);
120 }
121 QTest::qWait(0);
122 }
123 }
125 void testCreationDeletion()
126 {
127 // Nothing, init/cleanup already tests this
128 }
130 void testDrag1PixelUp()
131 {
132 lvwph->setContentY(lvwph->contentY() + 1);
133 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
134 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
135 verifyItem(0, 49., 150., false);
136 verifyItem(1, 199., 200., false);
137 verifyItem(2, 399., 350., false);
138 verifyItem(3, 749., 350., true);
139 QCOMPARE(lvwph->m_minYExtent, 0.);
140 QCOMPARE(lvwph->m_clipItem->y(), 1.);
141 QCOMPARE(lvwph->m_clipItem->clip(), false);
142 QCOMPARE(lvwph->m_headerItem->y(), 0.);
143 QCOMPARE(lvwph->m_headerItem->height(), 50.);
144 QCOMPARE(lvwph->contentY(), 1.);
145 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
146 }
148 void testHeaderDetachDragDown()
149 {
150 QTest::mousePress(view, Qt::LeftButton, Qt::NoModifier, QPoint(0, 0));
151 QTest::qWait(100);
152 QTest::mouseMove(view, QPoint(0, 5));
153 QTest::qWait(100);
154 QTest::mouseMove(view, QPoint(0, 10));
155 QTest::qWait(100);
156 QTest::mouseMove(view, QPoint(0, 15));
157 QTest::qWait(100);
158 QTest::mouseMove(view, QPoint(0, 20));
159 QTest::qWait(100);
160 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
161 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
162 verifyItem(0, 55., 150., false);
163 verifyItem(1, 205., 200., false);
164 verifyItem(2, 405., 350., false);
165 verifyItem(3, 755., 350., true);
166 QCOMPARE(lvwph->m_minYExtent, 0.);
167 QCOMPARE(lvwph->m_clipItem->y(), -5.);
168 QCOMPARE(lvwph->m_clipItem->clip(), false);
169 QCOMPARE(lvwph->m_headerItem->y(), -5.);
170 QCOMPARE(lvwph->m_headerItem->height(), 50.);
171 QCOMPARE(lvwph->contentY(), -5.);
172 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
174 QTest::mouseRelease(view, Qt::LeftButton, Qt::NoModifier, QPoint(0, 15));
176 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
177 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
178 verifyItem(0, 50., 150., false);
179 verifyItem(1, 200., 200., false);
180 verifyItem(2, 400., 350., false);
181 verifyItem(3, 750., 350., true);
182 QCOMPARE(lvwph->m_minYExtent, 0.);
183 QCOMPARE(lvwph->m_clipItem->y(), 0.);
184 QCOMPARE(lvwph->m_clipItem->clip(), false);
185 QCOMPARE(lvwph->m_headerItem->y(), 0.);
186 QCOMPARE(lvwph->m_headerItem->height(), 50.);
187 QCOMPARE(lvwph->contentY(), 0.);
188 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
189 }
191 void testDrag375PixelUp()
192 {
193 changeContentY(375);
194 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
195 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
196 verifyItem(0, -325., 150., true);
197 verifyItem(1, -175, 200., false);
198 verifyItem(2, 25, 350., false);
199 verifyItem(3, 375, 350., false);
200 verifyItem(4, 725, 350., true);
201 QCOMPARE(lvwph->m_minYExtent, 0.);
202 QCOMPARE(lvwph->m_clipItem->y(), 375.);
203 QCOMPARE(lvwph->m_clipItem->clip(), false);
204 QCOMPARE(lvwph->m_headerItem->y(), 0.);
205 QCOMPARE(lvwph->m_headerItem->height(), 50.);
206 QCOMPARE(lvwph->contentY(), 375.);
207 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
208 }
210 void testDrag520PixelUp()
211 {
212 changeContentY(520);
213 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
214 QCOMPARE(lvwph->m_firstVisibleIndex, 1);
215 verifyItem(0, -320., 200., true);
216 verifyItem(1, -120, 350., false);
217 verifyItem(2, 230, 350., false);
218 verifyItem(3, 580, 350., true);
219 QCOMPARE(lvwph->m_minYExtent, 0.);
220 QCOMPARE(lvwph->m_clipItem->y(), 520.);
221 QCOMPARE(lvwph->m_clipItem->clip(), false);
222 QCOMPARE(lvwph->m_headerItem->y(), 0.);
223 QCOMPARE(lvwph->m_headerItem->height(), 50.);
224 QCOMPARE(lvwph->contentY(), 520.);
225 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
226 }
228 void testDragHeaderUpThenShow()
229 {
230 changeContentY(120);
231 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
232 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
233 verifyItem(0, -70., 150., false);
234 verifyItem(1, 80., 200., false);
235 verifyItem(2, 280., 350., false);
236 verifyItem(3, 630., 350., true);
237 QCOMPARE(lvwph->m_minYExtent, 0.);
238 QCOMPARE(lvwph->m_clipItem->y(), 120.);
239 QCOMPARE(lvwph->m_clipItem->clip(), false);
240 QCOMPARE(lvwph->m_headerItem->y(), 0.);
241 QCOMPARE(lvwph->m_headerItem->height(), 50.);
242 QCOMPARE(lvwph->contentY(), 120.);
243 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
245 changeContentY(-30);
246 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
247 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
248 verifyItem(0, -70., 150., false);
249 verifyItem(1, 80., 200., false);
250 verifyItem(2, 280., 350., false);
251 verifyItem(3, 630., 350., true);
252 QCOMPARE(lvwph->m_minYExtent, 0.);
253 QCOMPARE(lvwph->m_clipItem->y(), 120.);
254 QCOMPARE(lvwph->m_clipItem->clip(), true);
255 QTRY_COMPARE(lvwph->m_headerItem->y(), 70.);
256 QCOMPARE(lvwph->m_headerItem->height(), 50.);
257 QCOMPARE(lvwph->contentY(), 90.);
258 QCOMPARE(lvwph->m_headerItemShownHeight, 30.);
259 }
261 void testDragHeaderUpThenShowWithoutHidingTotally()
262 {
263 changeContentY(10);
264 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
265 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
266 verifyItem(0, 40., 150., false);
267 verifyItem(1, 190., 200., false);
268 verifyItem(2, 390., 350., false);
269 verifyItem(3, 740., 350., true);
270 QCOMPARE(lvwph->m_minYExtent, 0.);
271 QCOMPARE(lvwph->m_clipItem->y(), 10.);
272 QCOMPARE(lvwph->m_clipItem->clip(), false);
273 QCOMPARE(lvwph->m_headerItem->y(), 0.);
274 QCOMPARE(lvwph->m_headerItem->height(), 50.);
275 QCOMPARE(lvwph->contentY(), 10.);
276 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
278 changeContentY(-1);
280 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
281 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
282 verifyItem(0, 41., 150., false);
283 verifyItem(1, 191., 200., false);
284 verifyItem(2, 391., 350., false);
285 verifyItem(3, 741., 350., true);
286 QCOMPARE(lvwph->m_minYExtent, 0.);
287 QCOMPARE(lvwph->m_clipItem->y(), 9.);
288 QCOMPARE(lvwph->m_clipItem->clip(), false);
289 QTRY_COMPARE(lvwph->m_headerItem->y(), 0.);
290 QCOMPARE(lvwph->m_headerItem->height(), 50.);
291 QCOMPARE(lvwph->contentY(), 9.);
292 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
293 }
295 void testPositionAtBeginningIndex0Visible()
296 {
297 changeContentY(375);
298 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
299 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
300 verifyItem(0, -325., 150., true);
301 verifyItem(1, -175, 200., false);
302 verifyItem(2, 25, 350., false);
303 verifyItem(3, 375, 350., false);
304 verifyItem(4, 725, 350., true);
305 QCOMPARE(lvwph->m_minYExtent, 0.);
306 QCOMPARE(lvwph->m_clipItem->y(), 375.);
307 QCOMPARE(lvwph->m_clipItem->clip(), false);
308 QCOMPARE(lvwph->m_headerItem->y(), 0.);
309 QCOMPARE(lvwph->m_headerItem->height(), 50.);
310 QCOMPARE(lvwph->contentY(), 375.);
311 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
313 lvwph->positionAtBeginning();
315 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
316 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
317 verifyItem(0, 50., 150., false);
318 verifyItem(1, 200., 200., false);
319 verifyItem(2, 400., 350., false);
320 verifyItem(3, 750., 350., true);
321 QCOMPARE(lvwph->m_minYExtent, 0.);
322 QCOMPARE(lvwph->m_clipItem->y(), 0.);
323 QCOMPARE(lvwph->m_clipItem->clip(), false);
324 QCOMPARE(lvwph->m_headerItem->y(), 0.);
325 QCOMPARE(lvwph->m_headerItem->height(), 50.);
326 QCOMPARE(lvwph->contentY(), 0.);
327 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
328 }
330 void testPositionAtBeginningIndex0NotVisible()
331 {
332 changeContentY(520);
333 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
334 QCOMPARE(lvwph->m_firstVisibleIndex, 1);
335 verifyItem(0, -320., 200., true);
336 verifyItem(1, -120, 350., false);
337 verifyItem(2, 230, 350., false);
338 verifyItem(3, 580, 350., true);
339 QCOMPARE(lvwph->m_minYExtent, 0.);
340 QCOMPARE(lvwph->m_clipItem->y(), 520.);
341 QCOMPARE(lvwph->m_clipItem->clip(), false);
342 QCOMPARE(lvwph->m_headerItem->y(), 0.);
343 QCOMPARE(lvwph->m_headerItem->height(), 50.);
344 QCOMPARE(lvwph->contentY(), 520.);
345 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
347 lvwph->positionAtBeginning();
349 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
350 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
351 verifyItem(0, 50., 150., false);
352 verifyItem(1, 200., 200., false);
353 verifyItem(2, 400., 350., false);
354 verifyItem(3, 750., 350., true);
355 QCOMPARE(lvwph->m_minYExtent, 0.);
356 QCOMPARE(lvwph->m_clipItem->y(), 0.);
357 QCOMPARE(lvwph->m_clipItem->clip(), false);
358 QCOMPARE(lvwph->m_headerItem->y(), 0.);
359 QCOMPARE(lvwph->m_headerItem->height(), 50.);
360 QCOMPARE(lvwph->contentY(), 0.);
361 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
362 }
364 void testIndex0GrowOnScreen()
365 {
366 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
367 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
368 verifyItem(0, 50., 150., false);
369 verifyItem(1, 200., 200., false);
370 verifyItem(2, 400., 350., false);
371 verifyItem(3, 750., 350., true);
372 QCOMPARE(lvwph->m_minYExtent, 0.);
373 QCOMPARE(lvwph->m_clipItem->y(), 0.);
374 QCOMPARE(lvwph->m_clipItem->clip(), false);
375 QCOMPARE(lvwph->m_headerItem->y(), 0.);
376 QCOMPARE(lvwph->m_headerItem->height(), 50.);
377 QCOMPARE(lvwph->contentY(), 0.);
378 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
380 model->setProperty(0, "size", 400);
382 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
383 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
384 verifyItem(0, 50., 400., false);
385 verifyItem(1, 450., 200., false);
386 verifyItem(2, 650., 350., true);
387 QCOMPARE(lvwph->m_minYExtent, 0.);
388 QCOMPARE(lvwph->m_clipItem->y(), 0.);
389 QCOMPARE(lvwph->m_clipItem->clip(), false);
390 QCOMPARE(lvwph->m_headerItem->y(), 0.);
391 QCOMPARE(lvwph->m_headerItem->height(), 50.);
392 QCOMPARE(lvwph->contentY(), 0.);
393 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
394 }
396 void testIndex0GrowOffScreen()
397 {
398 changeContentY(375);
399 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
400 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
401 verifyItem(0, -325., 150., true);
402 verifyItem(1, -175, 200., false);
403 verifyItem(2, 25, 350., false);
404 verifyItem(3, 375, 350., false);
405 verifyItem(4, 725, 350., true);
406 QCOMPARE(lvwph->m_minYExtent, 0.);
407 QCOMPARE(lvwph->m_clipItem->y(), 375.);
408 QCOMPARE(lvwph->m_clipItem->clip(), false);
409 QCOMPARE(lvwph->m_headerItem->y(), 0.);
410 QCOMPARE(lvwph->m_headerItem->height(), 50.);
411 QCOMPARE(lvwph->contentY(), 375.);
412 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
414 model->setProperty(0, "size", 400);
416 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
417 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
418 verifyItem(0, -575., 400., true);
419 verifyItem(1, -175, 200., false);
420 verifyItem(2, 25, 350., false);
421 verifyItem(3, 375, 350., false);
422 verifyItem(4, 725, 350., true);
423 QCOMPARE(lvwph->m_minYExtent, 250.);
424 QCOMPARE(lvwph->m_clipItem->y(), 375.);
425 QCOMPARE(lvwph->m_clipItem->clip(), false);
426 QCOMPARE(lvwph->m_headerItem->y(), 0.);
427 QCOMPARE(lvwph->m_headerItem->height(), 50.);
428 QCOMPARE(lvwph->contentY(), 375.);
429 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
431 scrollToTop();
433 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
434 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
435 verifyItem(0, 50., 400., false);
436 verifyItem(1, 450, 200., false);
437 verifyItem(2, 650, 350., true);
438 QCOMPARE(lvwph->m_minYExtent, 250.);
439 QCOMPARE(lvwph->m_clipItem->y(), -250.);
440 QCOMPARE(lvwph->m_clipItem->clip(), false);
441 QCOMPARE(lvwph->m_headerItem->y(), -250.);
442 QCOMPARE(lvwph->m_headerItem->height(), 50.);
443 QCOMPARE(lvwph->contentY(), -250.);
444 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
446 changeContentY(30);
448 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
449 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
450 verifyItem(0, 20., 400., false);
451 verifyItem(1, 420, 200., false);
452 verifyItem(2, 620, 350., true);
453 QCOMPARE(lvwph->m_minYExtent, 250.);
454 QCOMPARE(lvwph->m_clipItem->y(), -220.);
455 QCOMPARE(lvwph->m_clipItem->clip(), false);
456 QCOMPARE(lvwph->m_headerItem->y(), -250.);
457 QCOMPARE(lvwph->m_headerItem->height(), 50.);
458 QCOMPARE(lvwph->contentY(), -220.);
459 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
460 }
462 void testIndex0GrowNotCreated()
463 {
464 changeContentY(520);
465 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
466 QCOMPARE(lvwph->m_firstVisibleIndex, 1);
467 verifyItem(0, -320., 200., true);
468 verifyItem(1, -120, 350., false);
469 verifyItem(2, 230, 350., false);
470 verifyItem(3, 580, 350., true);
471 QCOMPARE(lvwph->m_minYExtent, 0.);
472 QCOMPARE(lvwph->m_clipItem->y(), 520.);
473 QCOMPARE(lvwph->m_clipItem->clip(), false);
474 QCOMPARE(lvwph->m_headerItem->y(), 0.);
475 QCOMPARE(lvwph->m_headerItem->height(), 50.);
476 QCOMPARE(lvwph->contentY(), 520.);
477 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
479 model->setProperty(0, "size", 400);
481 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
482 QCOMPARE(lvwph->m_firstVisibleIndex, 1);
483 verifyItem(0, -320., 200., true);
484 verifyItem(1, -120, 350., false);
485 verifyItem(2, 230, 350., false);
486 verifyItem(3, 580, 350., true);
487 QCOMPARE(lvwph->m_minYExtent, 0.);
488 QCOMPARE(lvwph->m_clipItem->y(), 520.);
489 QCOMPARE(lvwph->m_clipItem->clip(), false);
490 QCOMPARE(lvwph->m_headerItem->y(), 0.);
491 QCOMPARE(lvwph->m_headerItem->height(), 50.);
492 QCOMPARE(lvwph->contentY(), 520.);
493 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
495 scrollToTop();
497 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
498 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
499 verifyItem(0, 50., 400., false);
500 verifyItem(1, 450, 200., false);
501 verifyItem(2, 650, 350., true);
502 QCOMPARE(lvwph->m_minYExtent, 250.);
503 QCOMPARE(lvwph->m_clipItem->y(), -250.);
504 QCOMPARE(lvwph->m_clipItem->clip(), false);
505 QCOMPARE(lvwph->m_headerItem->y(), -250.);
506 QCOMPARE(lvwph->m_headerItem->height(), 50.);
507 QCOMPARE(lvwph->contentY(), -250.);
508 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
509 }
511 void testShowHideShowHeaderAtBottom()
512 {
513 scrollToBottom();
514 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
515 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
516 verifyItem(0, -508., 350., true);
517 verifyItem(1, -158, 350., false);
518 verifyItem(2, 192, 350., false);
519 QCOMPARE(lvwph->m_minYExtent, 0.);
520 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
521 QCOMPARE(lvwph->m_clipItem->clip(), false);
522 QCOMPARE(lvwph->m_headerItem->y(), 0.);
523 QCOMPARE(lvwph->m_headerItem->height(), 50.);
524 QCOMPARE(lvwph->contentY(), 1258.);
525 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
527 changeContentY(-30);
528 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
529 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
530 verifyItem(0, -508., 350., true);
531 verifyItem(1, -158, 350., false);
532 verifyItem(2, 192, 350., false);
533 QCOMPARE(lvwph->m_minYExtent, 0.);
534 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
535 QCOMPARE(lvwph->m_clipItem->clip(), true);
536 QCOMPARE(lvwph->m_headerItem->y(), 1208.);
537 QCOMPARE(lvwph->m_headerItem->height(), 50.);
538 QCOMPARE(lvwph->contentY(), 1228.);
539 QCOMPARE(lvwph->m_headerItemShownHeight, 30.);
541 changeContentY(30);
542 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
543 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
544 verifyItem(0, -508., 350., true);
545 verifyItem(1, -158, 350., false);
546 verifyItem(2, 192, 350., false);
547 QCOMPARE(lvwph->m_minYExtent, 0.);
548 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
549 QCOMPARE(lvwph->m_clipItem->clip(), false);
550 QCOMPARE(lvwph->m_headerItem->y(), 0.);
551 QCOMPARE(lvwph->m_headerItem->height(), 50.);
552 QCOMPARE(lvwph->contentY(), 1258.);
553 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
555 changeContentY(-30);
556 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
557 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
558 verifyItem(0, -508., 350., true);
559 verifyItem(1, -158, 350., false);
560 verifyItem(2, 192, 350., false);
561 QCOMPARE(lvwph->m_minYExtent, 0.);
562 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
563 QCOMPARE(lvwph->m_clipItem->clip(), true);
564 QCOMPARE(lvwph->m_headerItem->y(), 1208.);
565 QCOMPARE(lvwph->m_headerItem->height(), 50.);
566 QCOMPARE(lvwph->contentY(), 1228.);
567 QCOMPARE(lvwph->m_headerItemShownHeight, 30.);
568 }
570 void testChangeDelegateAtBottom()
571 {
572 scrollToBottom();
573 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
574 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
575 verifyItem(0, -508., 350., true);
576 verifyItem(1, -158, 350., false);
577 verifyItem(2, 192, 350., false);
578 QCOMPARE(lvwph->m_minYExtent, 0.);
579 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
580 QCOMPARE(lvwph->m_clipItem->clip(), false);
581 QCOMPARE(lvwph->m_headerItem->y(), 0.);
582 QCOMPARE(lvwph->m_headerItem->height(), 50.);
583 QCOMPARE(lvwph->contentY(), 1258.);
584 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
586 lvwph->setDelegate(otherDelegate);
588 QTRY_COMPARE(lvwph->m_visibleItems.count(), 6);
589 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
590 verifyItem(0, 50., 35., false);
591 verifyItem(1, 85, 35., false);
592 verifyItem(2, 120, 35., false);
593 verifyItem(3, 155, 35., false);
594 verifyItem(4, 190, 35., false);
595 verifyItem(5, 225, 35., false);
596 QCOMPARE(lvwph->m_minYExtent, 0.);
597 QCOMPARE(lvwph->m_clipItem->y(), 0.);
598 QCOMPARE(lvwph->m_clipItem->clip(), false);
599 QCOMPARE(lvwph->m_headerItem->y(), 0.);
600 QCOMPARE(lvwph->m_headerItem->height(), 50.);
601 QCOMPARE(lvwph->contentY(), 0.);
602 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
603 }
605 void testGrowHeaderAtTop()
606 {
607 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
608 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
609 verifyItem(0, 50., 150., false);
610 verifyItem(1, 200., 200., false);
611 verifyItem(2, 400., 350., false);
612 verifyItem(3, 750., 350., true);
613 QCOMPARE(lvwph->m_minYExtent, 0.);
614 QCOMPARE(lvwph->m_clipItem->y(), 0.);
615 QCOMPARE(lvwph->m_clipItem->clip(), false);
616 QCOMPARE(lvwph->m_headerItem->y(), 0.);
617 QCOMPARE(lvwph->m_headerItem->height(), 50.);
618 QCOMPARE(lvwph->contentY(), 0.);
619 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
621 lvwph->m_headerItem->setHeight(100);
623 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
624 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
625 verifyItem(0, 100., 150., false);
626 verifyItem(1, 250., 200., false);
627 verifyItem(2, 450., 350., false);
628 verifyItem(3, 800., 350., true);
629 QCOMPARE(lvwph->m_minYExtent, 0.);
630 QCOMPARE(lvwph->m_clipItem->y(), 0.);
631 QCOMPARE(lvwph->m_clipItem->clip(), false);
632 QCOMPARE(lvwph->m_headerItem->y(), 0.);
633 QCOMPARE(lvwph->m_headerItem->height(), 100.);
634 QCOMPARE(lvwph->contentY(), 0.);
635 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
636 }
638 void testGrowHeaderAtBottom()
639 {
640 scrollToBottom();
641 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
642 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
643 verifyItem(0, -508., 350., true);
644 verifyItem(1, -158, 350., false);
645 verifyItem(2, 192, 350., false);
646 QCOMPARE(lvwph->m_minYExtent, 0.);
647 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
648 QCOMPARE(lvwph->m_clipItem->clip(), false);
649 QCOMPARE(lvwph->m_headerItem->y(), 0.);
650 QCOMPARE(lvwph->m_headerItem->height(), 50.);
651 QCOMPARE(lvwph->contentY(), 1258.);
652 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
654 lvwph->m_headerItem->setHeight(100);
656 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
657 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
658 verifyItem(0, -508., 350., true);
659 verifyItem(1, -158, 350., false);
660 verifyItem(2, 192, 350., false);
661 QCOMPARE(lvwph->m_minYExtent, -650.);
662 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
663 QCOMPARE(lvwph->m_clipItem->clip(), false);
664 QCOMPARE(lvwph->m_headerItem->y(), 0.);
665 QCOMPARE(lvwph->m_headerItem->height(), 100.);
666 QCOMPARE(lvwph->contentY(), 1258.);
667 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
669 changeContentY(-30);
671 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
672 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
673 verifyItem(0, -508., 350., true);
674 verifyItem(1, -158, 350., false);
675 verifyItem(2, 192, 350., false);
676 QCOMPARE(lvwph->m_minYExtent, -650.);
677 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
678 QCOMPARE(lvwph->m_clipItem->clip(), true);
679 QCOMPARE(lvwph->m_headerItem->y(), 1158.);
680 QCOMPARE(lvwph->m_headerItem->height(), 100.);
681 QCOMPARE(lvwph->contentY(), 1228.);
682 QCOMPARE(lvwph->m_headerItemShownHeight, 30.);
685 scrollToTop();
687 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
688 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
689 verifyItem(0, 100., 150., false);
690 verifyItem(1, 250., 200., false);
691 verifyItem(2, 450., 350., false);
692 verifyItem(3, 800., 350., true);
693 QCOMPARE(lvwph->m_minYExtent, 50.);
694 QCOMPARE(lvwph->m_clipItem->y(), -50.);
695 QCOMPARE(lvwph->m_clipItem->clip(), false);
696 QCOMPARE(lvwph->m_headerItem->y(), -50.);
697 QCOMPARE(lvwph->m_headerItem->height(), 100.);
698 QCOMPARE(lvwph->contentY(), -50.);
699 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
700 }
702 void testGrowHeaderPartlyShown()
703 {
704 scrollToBottom();
705 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
706 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
707 verifyItem(0, -508., 350., true);
708 verifyItem(1, -158, 350., false);
709 verifyItem(2, 192, 350., false);
710 QCOMPARE(lvwph->m_minYExtent, 0.);
711 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
712 QCOMPARE(lvwph->m_clipItem->clip(), false);
713 QCOMPARE(lvwph->m_headerItem->y(), 0.);
714 QCOMPARE(lvwph->m_headerItem->height(), 50.);
715 QCOMPARE(lvwph->contentY(), 1258.);
716 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
718 changeContentY(-30);
720 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
721 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
722 verifyItem(0, -508., 350., true);
723 verifyItem(1, -158, 350., false);
724 verifyItem(2, 192, 350., false);
725 QCOMPARE(lvwph->m_minYExtent, 0.);
726 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
727 QCOMPARE(lvwph->m_clipItem->clip(), true);
728 QCOMPARE(lvwph->m_headerItem->y(), 1208.);
729 QCOMPARE(lvwph->m_headerItem->height(), 50.);
730 QCOMPARE(lvwph->contentY(), 1228.);
731 QCOMPARE(lvwph->m_headerItemShownHeight, 30.);
733 lvwph->m_headerItem->setHeight(100);
735 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
736 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
737 verifyItem(0, -508., 350., true);
738 verifyItem(1, -158, 350., false);
739 verifyItem(2, 192, 350., false);
740 QCOMPARE(lvwph->m_minYExtent, -700.);
741 QCOMPARE(lvwph->m_clipItem->y(), 1308.);
742 QCOMPARE(lvwph->m_clipItem->clip(), true);
743 QCOMPARE(lvwph->m_headerItem->y(), 1208.);
744 QCOMPARE(lvwph->m_headerItem->height(), 100.);
745 QCOMPARE(lvwph->contentY(), 1228.);
746 QCOMPARE(lvwph->m_headerItemShownHeight, 80.);
748 scrollToTop();
750 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
751 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
752 verifyItem(0, 100., 150., false);
753 verifyItem(1, 250., 200., false);
754 verifyItem(2, 450., 350., false);
755 verifyItem(3, 800., 350., true);
756 QCOMPARE(lvwph->m_minYExtent, 0.);
757 QCOMPARE(lvwph->m_clipItem->y(), 0.);
758 QCOMPARE(lvwph->m_clipItem->clip(), false);
759 QCOMPARE(lvwph->m_headerItem->y(), 0.);
760 QCOMPARE(lvwph->m_headerItem->height(), 100.);
761 QCOMPARE(lvwph->contentY(), 0.);
762 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
763 }
765 void testShrinkHeaderMoreThanPartlyShown()
766 {
767 scrollToBottom();
768 lvwph->m_headerItem->setHeight(100);
769 changeContentY(-30);
771 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
772 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
773 verifyItem(0, -508., 350., true);
774 verifyItem(1, -158, 350., false);
775 verifyItem(2, 192, 350., false);
776 QCOMPARE(lvwph->m_minYExtent, -650.);
777 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
778 QCOMPARE(lvwph->m_clipItem->clip(), true);
779 QCOMPARE(lvwph->m_headerItem->y(), 1158.);
780 QCOMPARE(lvwph->m_headerItem->height(), 100.);
781 QCOMPARE(lvwph->contentY(), 1228.);
782 QCOMPARE(lvwph->m_headerItemShownHeight, 30.);
784 lvwph->m_headerItem->setHeight(50);
786 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
787 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
788 verifyItem(0, -508., 350., true);
789 verifyItem(1, -158, 350., false);
790 verifyItem(2, 192, 350., false);
791 QCOMPARE(lvwph->m_minYExtent, -670.);
792 QCOMPARE(lvwph->m_clipItem->y(), 1228.);
793 QCOMPARE(lvwph->m_clipItem->clip(), false);
794 QCOMPARE(lvwph->m_headerItem->y(), 1158.);
795 QCOMPARE(lvwph->m_headerItem->height(), 50.);
796 QCOMPARE(lvwph->contentY(), 1228.);
797 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
798 QTRY_VERIFY(lvwph->isAtYEnd());
800 scrollToTop();
802 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
803 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
804 verifyItem(0, 50., 150., false);
805 verifyItem(1, 200., 200., false);
806 verifyItem(2, 400., 350., false);
807 verifyItem(3, 750., 350., true);
808 QCOMPARE(lvwph->m_minYExtent, 30.);
809 QCOMPARE(lvwph->m_clipItem->y(), -30.);
810 QCOMPARE(lvwph->m_clipItem->clip(), false);
811 QCOMPARE(lvwph->m_headerItem->y(), -30.);
812 QCOMPARE(lvwph->m_headerItem->height(), 50.);
813 QCOMPARE(lvwph->contentY(), -30.);
814 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
815 }
817 void testSetEmptyHeaderAtTop()
818 {
819 lvwph->setHeader(nullptr);
821 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
822 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
823 verifyItem(0, 0., 150., false);
824 verifyItem(1, 150., 200., false);
825 verifyItem(2, 350., 350., false);
826 verifyItem(3, 700., 350., true);
827 QCOMPARE(lvwph->m_minYExtent, 0.);
828 QCOMPARE(lvwph->m_clipItem->y(), 0.);
829 QCOMPARE(lvwph->m_clipItem->clip(), false);
830 QCOMPARE(lvwph->m_headerItem, (QQuickItem*)nullptr);
831 QCOMPARE(lvwph->contentY(), 0.);
832 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
833 }
835 void testSetEmptyHeaderAtBottom()
836 {
837 scrollToBottom();
838 lvwph->setHeader(nullptr);
840 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
841 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
842 verifyItem(0, -508., 350., true);
843 verifyItem(1, -158, 350., false);
844 verifyItem(2, 192, 350., false);
845 QCOMPARE(lvwph->m_minYExtent, -750.);
846 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
847 QCOMPARE(lvwph->m_clipItem->clip(), false);
848 QCOMPARE(lvwph->m_headerItem, (QQuickItem*)nullptr);
849 QCOMPARE(lvwph->contentY(), 1258.);
850 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
852 scrollToTop();
854 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
855 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
856 verifyItem(0, 0., 150., false);
857 verifyItem(1, 150., 200., false);
858 verifyItem(2, 350., 350., false);
859 verifyItem(3, 700., 350., true);
860 QCOMPARE(lvwph->m_minYExtent, -50.);
861 QCOMPARE(lvwph->m_clipItem->y(), 50.);
862 QCOMPARE(lvwph->m_clipItem->clip(), false);
863 QCOMPARE(lvwph->m_headerItem, (QQuickItem*)nullptr);
864 QCOMPARE(lvwph->contentY(), 50.);
865 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
866 }
868 void testSetEmptyHeaderWhenPartlyShownClipped()
869 {
870 scrollToBottom();
871 changeContentY(-30);
872 lvwph->setHeader(nullptr);
874 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
875 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
876 verifyItem(0, -508., 350., true);
877 verifyItem(1, -158, 350., false);
878 verifyItem(2, 192, 350., false);
879 QCOMPARE(lvwph->m_minYExtent, -720.);
880 QCOMPARE(lvwph->m_clipItem->y(), 1228.);
881 QCOMPARE(lvwph->m_clipItem->clip(), false);
882 QCOMPARE(lvwph->m_headerItem, (QQuickItem*)nullptr);
883 QCOMPARE(lvwph->contentY(), 1228.);
884 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
885 QTRY_VERIFY(lvwph->isAtYEnd());
887 scrollToTop();
889 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
890 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
891 verifyItem(0, 0., 150., false);
892 verifyItem(1, 150., 200., false);
893 verifyItem(2, 350., 350., false);
894 verifyItem(3, 700., 350., true);
895 QCOMPARE(lvwph->m_minYExtent, -20.);
896 QCOMPARE(lvwph->m_clipItem->y(), 20.);
897 QCOMPARE(lvwph->m_clipItem->clip(), false);
898 QCOMPARE(lvwph->m_headerItem, (QQuickItem*)nullptr);
899 QCOMPARE(lvwph->contentY(), 20.);
900 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
901 }
903 void testSetEmptyHeaderWhenPartlyShownNotClipped()
904 {
905 changeContentY(30);
906 lvwph->setHeader(nullptr);
908 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
909 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
910 verifyItem(0, -30., 150., false);
911 verifyItem(1, 120., 200., false);
912 verifyItem(2, 320., 350., false);
913 verifyItem(3, 670., 350., true);
914 QCOMPARE(lvwph->m_minYExtent, 0.);
915 QCOMPARE(lvwph->m_clipItem->y(), 30.);
916 QCOMPARE(lvwph->m_clipItem->clip(), false);
917 QCOMPARE(lvwph->m_headerItem, (QQuickItem*)nullptr);
918 QCOMPARE(lvwph->contentY(), 30.);
919 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
920 }
922 void testSetNullDelegate()
923 {
924 lvwph->setDelegate(nullptr);
926 QTRY_COMPARE(lvwph->m_visibleItems.count(), 0);
927 QCOMPARE(lvwph->m_firstVisibleIndex, -1);
928 QCOMPARE(lvwph->m_minYExtent, 0.);
929 QCOMPARE(lvwph->m_clipItem->y(), 0.);
930 QCOMPARE(lvwph->m_clipItem->clip(), false);
931 QCOMPARE(lvwph->m_headerItem->y(), 0.);
932 QCOMPARE(lvwph->m_headerItem->height(), 50.);
933 QCOMPARE(lvwph->contentY(), 0.);
934 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
935 QTRY_COMPARE(lvwph->contentHeight(), 50.);
936 QVERIFY(lvwph->isAtYBeginning());
937 QVERIFY(lvwph->isAtYEnd());
938 }
940 void testInsertItems()
941 {
942 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 1), Q_ARG(QVariant, 100));
943 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 1), Q_ARG(QVariant, 125));
945 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
946 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
947 verifyItem(0, 50., 150., false);
948 verifyItem(1, 200., 125., false);
949 verifyItem(2, 325., 100., false);
950 verifyItem(3, 425., 200., false);
951 verifyItem(4, 625., 350., true);
952 QCOMPARE(lvwph->m_minYExtent, 0.);
953 QCOMPARE(lvwph->m_clipItem->y(), 0.);
954 QCOMPARE(lvwph->m_clipItem->clip(), false);
955 QCOMPARE(lvwph->m_headerItem->y(), 0.);
956 QCOMPARE(lvwph->m_headerItem->height(), 50.);
957 QCOMPARE(lvwph->contentY(), 0.);
958 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
959 }
961 void testInsertItemsOnNotShownPosition()
962 {
963 changeContentY(700);
965 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
966 QTRY_COMPARE(lvwph->m_firstVisibleIndex, 2);
967 verifyItem(0, -300., 350., false);
968 verifyItem(1, 50, 350., false);
969 verifyItem(2, 400, 350., false);
970 verifyItem(3, 750, 350., true);
971 QCOMPARE(lvwph->m_minYExtent, 0.);
972 QCOMPARE(lvwph->m_clipItem->y(), 700.);
973 QCOMPARE(lvwph->m_clipItem->clip(), false);
974 QCOMPARE(lvwph->m_headerItem->y(), 0.);
975 QCOMPARE(lvwph->m_headerItem->height(), 50.);
976 QCOMPARE(lvwph->contentY(), 700.);
977 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
979 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 1), Q_ARG(QVariant, 100));
980 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 1), Q_ARG(QVariant, 125));
982 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
983 QCOMPARE(lvwph->m_firstVisibleIndex, 4);
984 verifyItem(0, -300., 350., false);
985 verifyItem(1, 50, 350., false);
986 verifyItem(2, 400, 350., false);
987 verifyItem(3, 750, 350., true);
988 QCOMPARE(lvwph->m_minYExtent, 0.);
989 QCOMPARE(lvwph->m_clipItem->y(), 700.);
990 QCOMPARE(lvwph->m_clipItem->clip(), false);
991 QCOMPARE(lvwph->m_headerItem->y(), 0.);
992 QCOMPARE(lvwph->m_headerItem->height(), 50.);
993 QCOMPARE(lvwph->contentY(), 700.);
994 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
996 scrollToTop();
998 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
999 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1000 verifyItem(0, 50., 150., false);
1001 verifyItem(1, 200., 125., false);
1002 verifyItem(2, 325., 100., false);
1003 verifyItem(3, 425., 200., false);
1004 verifyItem(4, 625., 350., true);
1005 QCOMPARE(lvwph->m_minYExtent, 225.);
1006 QCOMPARE(lvwph->m_clipItem->y(), -225.);
1007 QCOMPARE(lvwph->m_clipItem->clip(), false);
1008 QCOMPARE(lvwph->m_headerItem->y(), -225.);
1009 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1010 QCOMPARE(lvwph->contentY(), -225.);
1011 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1014 void testInsertItemsAtEndOfViewport()
1016 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 3), Q_ARG(QVariant, 100));
1017 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 3), Q_ARG(QVariant, 125));
1019 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1020 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1021 verifyItem(0, 50., 150., false);
1022 verifyItem(1, 200., 200., false);
1023 verifyItem(2, 400., 350., false);
1024 verifyItem(3, 750., 125., true);
1025 QCOMPARE(lvwph->m_minYExtent, 0.);
1026 QCOMPARE(lvwph->m_clipItem->y(), 0.);
1027 QCOMPARE(lvwph->m_clipItem->clip(), false);
1028 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1029 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1030 QCOMPARE(lvwph->contentY(), 0.);
1031 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1034 void testInsertItemsBeforeValidIndex()
1036 changeContentY(520);
1038 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1039 QCOMPARE(lvwph->m_firstVisibleIndex, 1);
1040 verifyItem(0, -320., 200., true);
1041 verifyItem(1, -120, 350., false);
1042 verifyItem(2, 230, 350., false);
1043 verifyItem(3, 580, 350., true);
1044 QCOMPARE(lvwph->m_minYExtent, 0.);
1045 QCOMPARE(lvwph->m_clipItem->y(), 520.);
1046 QCOMPARE(lvwph->m_clipItem->clip(), false);
1047 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1048 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1049 QCOMPARE(lvwph->contentY(), 520.);
1050 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1052 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 1), Q_ARG(QVariant, 100));
1053 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 1), Q_ARG(QVariant, 125));
1055 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1056 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
1057 verifyItem(0, -320., 200., true);
1058 verifyItem(1, -120, 350., false);
1059 verifyItem(2, 230, 350., false);
1060 verifyItem(3, 580, 350., true);
1061 QCOMPARE(lvwph->m_minYExtent, 0.);
1062 QCOMPARE(lvwph->m_clipItem->y(), 520.);
1063 QCOMPARE(lvwph->m_clipItem->clip(), false);
1064 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1065 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1066 QCOMPARE(lvwph->contentY(), 520.);
1067 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1070 void testInsertItemsBeforeViewport()
1072 changeContentY(375);
1074 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
1075 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1076 verifyItem(0, -325., 150., true);
1077 verifyItem(1, -175, 200., false);
1078 verifyItem(2, 25, 350., false);
1079 verifyItem(3, 375, 350., false);
1080 verifyItem(4, 725, 350., true);
1081 QCOMPARE(lvwph->m_minYExtent, 0.);
1082 QCOMPARE(lvwph->m_clipItem->y(), 375.);
1083 QCOMPARE(lvwph->m_clipItem->clip(), false);
1084 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1085 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1086 QCOMPARE(lvwph->contentY(), 375.);
1087 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1089 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 1), Q_ARG(QVariant, 100));
1090 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 1), Q_ARG(QVariant, 125));
1092 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
1093 QCOMPARE(lvwph->m_firstVisibleIndex, 2);
1094 verifyItem(0, -275., 100., true);
1095 verifyItem(1, -175, 200., false);
1096 verifyItem(2, 25, 350., false);
1097 verifyItem(3, 375, 350., false);
1098 verifyItem(4, 725, 350., true);
1099 QCOMPARE(lvwph->m_minYExtent, -50.);
1100 QCOMPARE(lvwph->m_clipItem->y(), 375.);
1101 QCOMPARE(lvwph->m_clipItem->clip(), false);
1102 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1103 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1104 QCOMPARE(lvwph->contentY(), 375.);
1105 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1107 scrollToTop();
1109 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
1110 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1111 verifyItem(0, 50., 150., false);
1112 verifyItem(1, 200., 125., false);
1113 verifyItem(2, 325., 100., false);
1114 verifyItem(3, 425., 200., false);
1115 verifyItem(4, 625., 350., true);
1116 QCOMPARE(lvwph->m_minYExtent, 225.);
1117 QCOMPARE(lvwph->m_clipItem->y(), -225.);
1118 QCOMPARE(lvwph->m_clipItem->clip(), false);
1119 QCOMPARE(lvwph->m_headerItem->y(), -225.);
1120 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1121 QCOMPARE(lvwph->contentY(), -225.);
1122 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1125 void testInsertItemsAtBottom()
1127 scrollToBottom();
1129 QVERIFY(lvwph->isAtYEnd());
1131 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 6), Q_ARG(QVariant, 100));
1132 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 6), Q_ARG(QVariant, 125));
1134 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
1135 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
1136 verifyItem(0, -508., 350., true);
1137 verifyItem(1, -158, 350., false);
1138 verifyItem(2, 192, 350., false);
1139 verifyItem(3, 542, 125., true);
1140 verifyItem(4, 667, 100., true);
1141 QCOMPARE(lvwph->m_minYExtent, 0.);
1142 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
1143 QCOMPARE(lvwph->m_clipItem->clip(), false);
1144 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1145 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1146 QCOMPARE(lvwph->contentY(), 1258.);
1147 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1148 QVERIFY(!lvwph->isAtYEnd());
1150 scrollToBottom();
1152 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1153 QCOMPARE(lvwph->m_firstVisibleIndex, 4);
1154 verifyItem(0, -383., 350., true);
1155 verifyItem(1, -33, 350., false);
1156 verifyItem(2, 317, 125., false);
1157 verifyItem(3, 442, 100., false);
1158 QCOMPARE(lvwph->m_minYExtent, 0.);
1159 QCOMPARE(lvwph->m_clipItem->y(), 1483.);
1160 QCOMPARE(lvwph->m_clipItem->clip(), false);
1161 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1162 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1163 QCOMPARE(lvwph->contentY(), 1483.);
1164 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1165 QVERIFY(lvwph->isAtYEnd());
1168 void testInsertItemAtTop()
1170 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 75));
1172 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1173 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1174 verifyItem(0, 50., 75., false);
1175 verifyItem(1, 125., 150., false);
1176 verifyItem(2, 275., 200., false);
1177 verifyItem(3, 475., 350., false);
1178 QCOMPARE(lvwph->m_minYExtent, 0.);
1179 QCOMPARE(lvwph->m_clipItem->y(), 0.);
1180 QCOMPARE(lvwph->m_clipItem->clip(), false);
1181 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1182 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1183 QCOMPARE(lvwph->contentY(), 0.);
1184 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1185 QVERIFY(lvwph->isAtYBeginning());
1188 void testInsertItem10SmallItemsAtTopWhenAtBottom()
1190 scrollToBottom();
1192 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 75));
1193 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 75));
1194 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 75));
1195 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 75));
1196 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 75));
1197 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 75));
1198 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 75));
1199 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 75));
1200 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 75));
1201 QMetaObject::invokeMethod(model, "insertItem", Q_ARG(QVariant, 0), Q_ARG(QVariant, 75));
1203 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
1204 QCOMPARE(lvwph->m_firstVisibleIndex, 13);
1205 verifyItem(0, -508., 350., true);
1206 verifyItem(1, -158, 350., false);
1207 verifyItem(2, 192, 350., false);
1208 QCOMPARE(lvwph->m_minYExtent, 0.);
1209 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
1210 QCOMPARE(lvwph->m_clipItem->clip(), false);
1211 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1212 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1213 QCOMPARE(lvwph->contentY(), 1258.);
1214 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1216 changeContentY(-1700);
1218 QTRY_COMPARE(lvwph->m_visibleItems.count(), 12);
1219 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1220 verifyItem(0, -308., 75., true);
1221 verifyItem(1, -233., 75., true);
1222 verifyItem(2, -158., 75., true);
1223 verifyItem(3, -83., 75., true);
1224 verifyItem(4, -8., 75., false);
1225 verifyItem(5, 67., 75., false);
1226 verifyItem(6, 142., 75., false);
1227 verifyItem(7, 217., 75., false);
1228 verifyItem(8, 292., 75., false);
1229 verifyItem(9, 367., 75., false);
1230 verifyItem(10, 442., 150., false);
1231 verifyItem(11, 592., 200., true);
1232 QCOMPARE(lvwph->m_minYExtent, 750.);
1233 QCOMPARE(lvwph->m_clipItem->y(), -392.);
1234 QCOMPARE(lvwph->m_clipItem->clip(), true);
1235 QCOMPARE(lvwph->m_headerItem->y(), -442.);
1236 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1237 QCOMPARE(lvwph->contentY(), -442.);
1238 QCOMPARE(lvwph->m_headerItemShownHeight, 50.);
1241 void testRemoveItemsAtTop()
1243 QMetaObject::invokeMethod(model, "removeItems", Q_ARG(QVariant, 0), Q_ARG(QVariant, 2));
1245 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
1246 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1247 verifyItem(0, 50., 350., false);
1248 verifyItem(1, 400., 350., false);
1249 verifyItem(2, 750., 350., true);
1250 QCOMPARE(lvwph->m_minYExtent, 0.);
1251 QCOMPARE(lvwph->m_clipItem->y(), 0.);
1252 QCOMPARE(lvwph->m_clipItem->clip(), false);
1253 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1254 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1255 QCOMPARE(lvwph->contentY(), 0.);
1256 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1257 QVERIFY(lvwph->isAtYBeginning());
1260 void testRemoveNonCreatedItemsAtTopWhenAtBottom()
1262 scrollToBottom();
1264 QMetaObject::invokeMethod(model, "removeItems", Q_ARG(QVariant, 0), Q_ARG(QVariant, 2));
1266 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
1267 QCOMPARE(lvwph->m_firstVisibleIndex, 1);
1268 verifyItem(0, -508., 350., true);
1269 verifyItem(1, -158, 350., false);
1270 verifyItem(2, 192, 350., false);
1271 QCOMPARE(lvwph->m_minYExtent, 0.);
1272 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
1273 QCOMPARE(lvwph->m_clipItem->clip(), false);
1274 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1275 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1276 QCOMPARE(lvwph->contentY(), 1258.);
1277 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1280 void testRemoveLastItemsAtBottom()
1282 scrollToBottom();
1284 QMetaObject::invokeMethod(model, "removeItems", Q_ARG(QVariant, 4), Q_ARG(QVariant, 2));
1286 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
1287 QCOMPARE(lvwph->m_firstVisibleIndex, 1);
1288 verifyItem(0, -358., 200., true);
1289 verifyItem(1, -158, 350., false);
1290 verifyItem(2, 192, 350., false);
1291 QCOMPARE(lvwph->m_minYExtent, -150.);
1292 QCOMPARE(lvwph->m_clipItem->y(), 558.);
1293 QCOMPARE(lvwph->m_clipItem->clip(), false);
1294 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1295 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1296 QCOMPARE(lvwph->contentY(), 558.);
1297 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1300 void testRemoveItemOutOfViewport()
1302 changeContentY(520);
1304 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1305 QCOMPARE(lvwph->m_firstVisibleIndex, 1);
1306 verifyItem(0, -320., 200., true);
1307 verifyItem(1, -120, 350., false);
1308 verifyItem(2, 230, 350., false);
1309 verifyItem(3, 580, 350., true);
1310 QCOMPARE(lvwph->m_minYExtent, 0.);
1311 QCOMPARE(lvwph->m_clipItem->y(), 520.);
1312 QCOMPARE(lvwph->m_clipItem->clip(), false);
1313 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1314 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1315 QCOMPARE(lvwph->contentY(), 520.);
1316 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1319 QMetaObject::invokeMethod(model, "removeItems", Q_ARG(QVariant, 1), Q_ARG(QVariant, 1));
1321 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1322 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1323 verifyItem(0, -270., 150., true);
1324 verifyItem(1, -120., 350., false);
1325 verifyItem(2, 230, 350., false);
1326 verifyItem(3, 580, 350., true);
1327 QCOMPARE(lvwph->m_minYExtent, -200.);
1328 QCOMPARE(lvwph->m_clipItem->y(), 520.);
1329 QCOMPARE(lvwph->m_clipItem->clip(), false);
1330 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1331 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1332 QCOMPARE(lvwph->contentY(), 520.);
1333 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1336 void testMoveFirstItems()
1338 QMetaObject::invokeMethod(model, "moveItems", Q_ARG(QVariant, 0), Q_ARG(QVariant, 1), Q_ARG(QVariant, 1));
1340 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1341 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1342 verifyItem(0, 50., 200., false);
1343 verifyItem(1, 250., 150., false);
1344 verifyItem(2, 400., 350., false);
1345 verifyItem(3, 750., 350., true);
1346 QCOMPARE(lvwph->m_minYExtent, 0.);
1347 QCOMPARE(lvwph->m_clipItem->y(), 0.);
1348 QCOMPARE(lvwph->m_clipItem->clip(), false);
1349 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1350 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1351 QCOMPARE(lvwph->contentY(), 0.);
1352 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1356 void testMoveFirstOutOfVisibleItems()
1358 QMetaObject::invokeMethod(model, "moveItems", Q_ARG(QVariant, 0), Q_ARG(QVariant, 4), Q_ARG(QVariant, 1));
1360 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
1361 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1362 verifyItem(0, 50., 200., false);
1363 verifyItem(1, 250., 350., false);
1364 verifyItem(2, 600., 350., true);
1365 QCOMPARE(lvwph->m_minYExtent, 0.);
1366 QCOMPARE(lvwph->m_clipItem->y(), 0.);
1367 QCOMPARE(lvwph->m_clipItem->clip(), false);
1368 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1369 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1370 QCOMPARE(lvwph->contentY(), 0.);
1371 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1375 void testMoveFirstToLastAtBottom()
1377 scrollToBottom();
1379 QTRY_COMPARE(lvwph->m_visibleItems.count(), 3);
1380 QCOMPARE(lvwph->m_firstVisibleIndex, 3);
1381 verifyItem(0, -508., 350., true);
1382 verifyItem(1, -158, 350., false);
1383 verifyItem(2, 192, 350., false);
1384 QCOMPARE(lvwph->m_minYExtent, 0.);
1385 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
1386 QCOMPARE(lvwph->m_clipItem->clip(), false);
1387 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1388 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1389 QCOMPARE(lvwph->contentY(), 1258.);
1390 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1392 QMetaObject::invokeMethod(model, "moveItems", Q_ARG(QVariant, 0), Q_ARG(QVariant, 5), Q_ARG(QVariant, 1));
1394 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1395 QCOMPARE(lvwph->m_firstVisibleIndex, 2);
1396 verifyItem(0, -508., 350., true);
1397 verifyItem(1, -158, 350., false);
1398 verifyItem(2, 192, 350., false);
1399 verifyItem(3, 542, 150., true);
1400 QCOMPARE(lvwph->m_minYExtent, 0.);
1401 QCOMPARE(lvwph->m_clipItem->y(), 1258.);
1402 QCOMPARE(lvwph->m_clipItem->clip(), false);
1403 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1404 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1405 QCOMPARE(lvwph->contentY(), 1258.);
1406 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1407 QVERIFY(!lvwph->isAtYEnd());
1410 void testChangeSizeVisibleItemNotOnViewport()
1412 changeContentY(440);
1414 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
1415 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1416 verifyItem(0, -390., 150., true);
1417 verifyItem(1, -240., 200., true);
1418 verifyItem(2, -40, 350., false);
1419 verifyItem(3, 310, 350., false);
1420 verifyItem(4, 660, 350., true);
1421 QCOMPARE(lvwph->m_minYExtent, 0.);
1422 QCOMPARE(lvwph->m_clipItem->y(), 440.);
1423 QCOMPARE(lvwph->m_clipItem->clip(), false);
1424 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1425 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1426 QCOMPARE(lvwph->contentY(), 440.);
1427 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1429 model->setProperty(1, "size", 100);
1431 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
1432 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1433 verifyItem(0, -290., 150., true);
1434 verifyItem(1, -140., 100., true);
1435 verifyItem(2, -40, 350., false);
1436 verifyItem(3, 310, 350., false);
1437 verifyItem(4, 660, 350., true);
1438 QCOMPARE(lvwph->m_minYExtent, -100.);
1439 QCOMPARE(lvwph->m_clipItem->y(), 440.);
1440 QCOMPARE(lvwph->m_clipItem->clip(), false);
1441 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1442 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1443 QCOMPARE(lvwph->contentY(), 440.);
1444 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1447 void testShowHeaderCloseToTheTop()
1449 changeContentY(375);
1451 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
1452 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1453 verifyItem(0, -325., 150., true);
1454 verifyItem(1, -175, 200., false);
1455 verifyItem(2, 25, 350., false);
1456 verifyItem(3, 375, 350., false);
1457 verifyItem(4, 725, 350., true);
1458 QCOMPARE(lvwph->m_minYExtent, 0.);
1459 QCOMPARE(lvwph->m_clipItem->y(), 375.);
1460 QCOMPARE(lvwph->m_clipItem->clip(), false);
1461 QCOMPARE(lvwph->m_headerItem->y(), 0.);
1462 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1463 QCOMPARE(lvwph->contentY(), 375.);
1464 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);;
1466 lvwph->showHeader();
1468 QTRY_VERIFY(!lvwph->m_headerShowAnimation->isRunning());
1469 QTRY_COMPARE(lvwph->m_visibleItems.count(), 5);
1470 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1471 verifyItem(0, -375., 150., true);
1472 verifyItem(1, -225, 200., true);
1473 verifyItem(2, -25, 350., false);
1474 verifyItem(3, 325, 350., false);
1475 verifyItem(4, 675, 350., true);
1476 QCOMPARE(lvwph->m_minYExtent, 50.);
1477 QCOMPARE(lvwph->m_clipItem->y(), 375.);
1478 QCOMPARE(lvwph->m_clipItem->clip(), true);
1479 QCOMPARE(lvwph->m_headerItem->y(), 325.);
1480 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1481 QCOMPARE(lvwph->contentY(), 325.);
1482 QCOMPARE(lvwph->m_headerItemShownHeight, 50.);;
1484 scrollToTop();
1486 QTRY_COMPARE(lvwph->m_visibleItems.count(), 4);
1487 QCOMPARE(lvwph->m_firstVisibleIndex, 0);
1488 verifyItem(0, 50., 150., false);
1489 verifyItem(1, 200., 200., false);
1490 verifyItem(2, 400., 350., false);
1491 verifyItem(3, 750., 350., true);
1492 QCOMPARE(lvwph->m_minYExtent, 50.);
1493 QCOMPARE(lvwph->m_clipItem->y(), -50.);
1494 QCOMPARE(lvwph->m_clipItem->clip(), false);
1495 QCOMPARE(lvwph->m_headerItem->y(), -50.);
1496 QCOMPARE(lvwph->m_headerItem->height(), 50.);
1497 QCOMPARE(lvwph->contentY(), -50.);
1498 QCOMPARE(lvwph->m_headerItemShownHeight, 0.);
1501private:
1502 QQuickView *view;
1503 ListViewWithPageHeader *lvwph;
1504 QQuickListModel *model;
1505 QQmlComponent *otherDelegate;
1508QTEST_MAIN(ListViewWithPageHeaderTest)
1510#include "listviewwithpageheadertest.moc"