diff options
author | Marius Bugge Monsen <mmonsen@trolltech.com> | 2009-05-08 14:36:17 +0200 |
---|---|---|
committer | Marius Bugge Monsen <mmonsen@trolltech.com> | 2009-05-08 14:36:17 +0200 |
commit | de51b3ca5ab7e4b81594b218c19873a5f8fcce5b (patch) | |
tree | 0bb7921bd5e1d970b06077e1e4002b0f547ea359 /tests | |
parent | be1f3f5a7abc19ec91e6c984f3a7152b760af3c1 (diff) |
Expand the QtGraphicsListView test with data-sets.
Diffstat (limited to 'tests')
-rw-r--r-- | tests/qgraphicslistview/tst_qgraphicslistview.cpp | 795 |
1 files changed, 448 insertions, 347 deletions
diff --git a/tests/qgraphicslistview/tst_qgraphicslistview.cpp b/tests/qgraphicslistview/tst_qgraphicslistview.cpp index f18e29f..1a21a40 100644 --- a/tests/qgraphicslistview/tst_qgraphicslistview.cpp +++ b/tests/qgraphicslistview/tst_qgraphicslistview.cpp @@ -29,15 +29,22 @@ #include <qlistdefaultmodel.h> #include <qlistcontroller.h> -class MockView : public QtGraphicsListView +class GraphicsListView : public QtGraphicsListView { public: - MockView() { } - + GraphicsListView() { } void setController(QtListController *c) { QtGraphicsListView::setController(c); } void setModel(QtListModelInterface *m) { QtGraphicsListView::setModel(m); } }; +class GraphicsListViewItem : public QtGraphicsListViewItem +{ +public: + GraphicsListViewItem(int index, QtGraphicsListView *view) : QtGraphicsListViewItem(index, view) { } + QSizeF GraphicsListViewItem::sizeHint(int, const QStyleOptionViewItemV4 *, Qt::SizeHint, const QSizeF&) const { return QSize(20, 20); } +}; + + class tst_QtGraphicsListView : public QObject { Q_OBJECT @@ -56,15 +63,17 @@ private slots: void getSetCheck(); void maximumFirstIndex_data(); void maximumFirstIndex(); - void itemAtVertical(); - void itemAtHorizontal(); - void layoutPositioningVertical(); - void layoutPositioningHorizontal(); + void itemAt_data(); + void itemAt(); + void layout_data(); + void layout(); protected: - MockView *listView; + GraphicsListView *view; }; +Q_DECLARE_METATYPE(QList<QRectF>) + tst_QtGraphicsListView::tst_QtGraphicsListView() { } @@ -83,380 +92,472 @@ void tst_QtGraphicsListView::cleanupTestCase() void tst_QtGraphicsListView::init() { - listView = new MockView(); + view = new GraphicsListView(); } void tst_QtGraphicsListView::cleanup() { - delete listView; + delete view; } void tst_QtGraphicsListView::getSetCheck() { - QCOMPARE(listView->horizontalOffset(), 0.); // default - QCOMPARE(listView->firstIndex(), 0); // default - QCOMPARE(listView->orientation(), Qt::Vertical); // default - QCOMPARE(listView->verticalOffset(), 0.); // default - - listView->setFirstIndex(9); - QCOMPARE(listView->firstIndex(), 9); - listView->setFirstIndex(0); - QCOMPARE(listView->firstIndex(), 0); - - QCOMPARE(listView->horizontalOffset(), 0.); - listView->setHorizontalOffset(0); - QCOMPARE(listView->horizontalOffset(), 0.); - listView->setHorizontalOffset(0.123); - QCOMPARE(listView->horizontalOffset(), 0.123); - listView->setHorizontalOffset(123.4); - QCOMPARE(listView->horizontalOffset(), 123.4); - - QCOMPARE(listView->verticalOffset(), 0.); - listView->setVerticalOffset(0); - QCOMPARE(listView->verticalOffset(), 0.); - listView->setVerticalOffset(0.123); - QCOMPARE(listView->verticalOffset(), 0.123); - listView->setVerticalOffset(123.4); - QCOMPARE(listView->verticalOffset(), 123.4); - - QCOMPARE(listView->orientation(), Qt::Vertical); - listView->setOrientation(Qt::Horizontal); - QCOMPARE(listView->orientation(), Qt::Horizontal); - - QVERIFY(listView->model() == 0); - QtListDefaultModel *model = new QtListDefaultModel(listView); - listView->setModel(model); - QCOMPARE(listView->model(), model); - - QSignalSpy deleted1(model, SIGNAL(destroyed(QObject*))); - listView->setModel(0); - QVERIFY(deleted1.isEmpty()); // check that the model is *not* deleted. Views don't own models ;) - listView->setModel(model); - - QVERIFY(listView->controller() == 0); + QCOMPARE(view->horizontalOffset(), 0.); // default + QCOMPARE(view->firstIndex(), 0); // default + QCOMPARE(view->orientation(), Qt::Vertical); // default + QCOMPARE(view->verticalOffset(), 0.); // default + + view->setFirstIndex(9); + QCOMPARE(view->firstIndex(), 9); + view->setFirstIndex(0); + QCOMPARE(view->firstIndex(), 0); + + QCOMPARE(view->horizontalOffset(), 0.); + view->setHorizontalOffset(0); + QCOMPARE(view->horizontalOffset(), 0.); + view->setHorizontalOffset(0.123); + QCOMPARE(view->horizontalOffset(), 0.123); + view->setHorizontalOffset(123.4); + QCOMPARE(view->horizontalOffset(), 123.4); + + QCOMPARE(view->verticalOffset(), 0.); + view->setVerticalOffset(0); + QCOMPARE(view->verticalOffset(), 0.); + view->setVerticalOffset(0.123); + QCOMPARE(view->verticalOffset(), 0.123); + view->setVerticalOffset(123.4); + QCOMPARE(view->verticalOffset(), 123.4); + + QCOMPARE(view->orientation(), Qt::Vertical); + view->setOrientation(Qt::Horizontal); + QCOMPARE(view->orientation(), Qt::Horizontal); + + QVERIFY(view->model() == 0); + QtListDefaultModel *model = new QtListDefaultModel(view); + view->setModel(model); + QCOMPARE(view->model(), model); + + // check that the model is not deleted + QSignalSpy modelDeleted(model, SIGNAL(destroyed(QObject*))); + view->setModel(0); + QVERIFY(modelDeleted.isEmpty()); + view->setModel(model); + + QVERIFY(view->controller() == 0); QtListController *controller = new QtListController(); - listView->setController(controller); - QCOMPARE(listView->controller(), controller); - QCOMPARE(listView->model(), model); // controller and model are independent - - QSignalSpy deleted2(controller, SIGNAL(destroyed(QObject*))); - listView->setController(0); - QVERIFY(listView->controller() == 0); - QVERIFY(deleted1.isEmpty()); - QVERIFY(deleted2.isEmpty()); + view->setController(controller); + QCOMPARE(view->controller(), controller); + QCOMPARE(view->model(), model); + + // check that the controller is not deleted + QSignalSpy controllerDeleted(controller, SIGNAL(destroyed(QObject*))); + view->setController(0); + QVERIFY(view->controller() == 0); + QVERIFY(modelDeleted.isEmpty()); + QVERIFY(controllerDeleted.isEmpty()); + + delete controller; + delete model; } void tst_QtGraphicsListView::maximumFirstIndex_data() { - QTest::addColumn<QStringList>("items"); - QTest::addColumn<int>("wholeVisibleItems"); - QTest::addColumn<int>("additionalVisibleSpace"); - QTest::addColumn<int>("expectedMaximum"); - - QTest::newRow("4 items fully visible") << (QStringList() - << "First" - << "Second" - << "Third" - << "Fourth") - << 4 << 0 << 0; - - QTest::newRow("3 items fully visible") << (QStringList() - << "First" - << "Second" - << "Third") - << 3 << 0 << 0; + QTest::addColumn<int>("count"); + QTest::addColumn<int>("orientation"); + QTest::addColumn<QSizeF>("size"); + QTest::addColumn<int>("maximumFirstIndex"); + + QTest::newRow("no items, vertical, all visible") + << 0 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 0; + + QTest::newRow("one item, vertical, all visible") + << 5 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 0; + + QTest::newRow("five items, vertical, all visible") + << 5 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 0; + + QTest::newRow("six items, vertical") + << 6 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 1; + + QTest::newRow("ten items, vertical") + << 10 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 5; + + QTest::newRow("no items, horizontal, all visible") + << 0 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 0; + + QTest::newRow("one item, horizontal, all visible") + << 5 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 0; + + QTest::newRow("five items, horizontal, all visible") + << 5 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 0; + + QTest::newRow("six items, horizontal") + << 6 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 1; + + QTest::newRow("ten items, horizontal") + << 10 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 5; } void tst_QtGraphicsListView::maximumFirstIndex() { - QFETCH(QStringList, items); - QFETCH(int, wholeVisibleItems); - QFETCH(int, additionalVisibleSpace); - QFETCH(int, expectedMaximum); + QFETCH(int, count); + QFETCH(int, orientation); + QFETCH(QSizeF, size); + QFETCH(int, maximumFirstIndex); QtListDefaultModel model; - for (int i = 0; i < items.count(); ++i) - model.insertItem(i, new QtListDefaultItem(items.at(i))); + for (int i = 0; i < count; ++i) + model.insertItem(i, new QtListDefaultItem()); - listView->setModel(&model); - listView->doLayout(); + view->setOrientation(static_cast<Qt::Orientation>(orientation)); + view->setGeometry(QRectF(QPointF(0, 0), size)); + view->setViewItemCreator(new QtGraphicsListViewItemCreator<GraphicsListViewItem>()); + view->setModel(&model); + view->doLayout(); - int width = 200; - int height = listView->viewItems().first()->preferredSize().height() * wholeVisibleItems + additionalVisibleSpace; - listView->setGeometry(QRectF(0, 0, width, height)); - QCOMPARE(listView->maximumFirstIndex(), expectedMaximum); + QCOMPARE(view->maximumFirstIndex(), maximumFirstIndex); } -void tst_QtGraphicsListView::itemAtVertical() +void tst_QtGraphicsListView::itemAt_data() { - QtListDefaultModel model; - for (int i = 0; i < 10; ++i) { - QtListDefaultItem *item = new QtListDefaultItem(QString("Item %1").arg(i)); - item->setSizeHint(QSizeF(100, 50+i)); // provide for some nice sizing hints ;) - model.insertItem(i, item); - } - listView->setModel(&model); - // this generates row-bottoms as follows; - // row: 0 50 - // row: 1 101 - // row: 2 153 - // row: 3 206 - // row: 4 260 - // row: 5 315 - // row: 6 371 - // row: 7 428 - // row: 8 486 - // row: 9 545 - - - listView->doLayout(); - QCOMPARE(listView->itemAt(QPointF(0, 0)), 0); - QCOMPARE(listView->itemAt(QPointF(99, 50)), 0); - QCOMPARE(listView->itemAt(QPointF(100, 50)), 0); - QCOMPARE(listView->itemAt(QPointF(100, 51)), 1); - QCOMPARE(listView->itemAt(QPointF(170, 51)), 1); - QCOMPARE(listView->itemAt(QPointF(10, 545)), 9); - QCOMPARE(listView->itemAt(QPointF(10, 546)), -1); - - // setting the firstIndex will make the itemAt be repositioned to the new baseline. - // meaning all y positions are offset by -153 - int expectedYOffset = 153; - listView->setFirstIndex(3); - QCOMPARE(listView->itemAt(QPointF(0, 0)), 3); - QCOMPARE(listView->itemAt(QPointF(99, 206-expectedYOffset)), 3); - QCOMPARE(listView->itemAt(QPointF(100, 207-expectedYOffset)), 4); - QCOMPARE(listView->itemAt(QPointF(170, 207-expectedYOffset)), 4); - QCOMPARE(listView->itemAt(QPointF(10, 545-expectedYOffset)), 9); - QCOMPARE(listView->itemAt(QPointF(10, 546-expectedYOffset)), -1); - - listView->setHorizontalOffset(10); // should have no effect. - QCOMPARE(listView->itemAt(QPointF(0, 0)), 3); - QCOMPARE(listView->itemAt(QPointF(99, 206-expectedYOffset)), 3); - QCOMPARE(listView->itemAt(QPointF(100, 207-expectedYOffset)), 4); - QCOMPARE(listView->itemAt(QPointF(170, 207-expectedYOffset)), 4); - QCOMPARE(listView->itemAt(QPointF(10, 545-expectedYOffset)), 9); - QCOMPARE(listView->itemAt(QPointF(10, 546-expectedYOffset)), -1); - - // vertical offset has an effect too - listView->setVerticalOffset(21); - expectedYOffset += 21; - QCOMPARE(listView->itemAt(QPointF(0, 0)), 3); - QCOMPARE(listView->itemAt(QPointF(99, 206-expectedYOffset)), 3); - QCOMPARE(listView->itemAt(QPointF(100, 207-expectedYOffset)), 4); - QCOMPARE(listView->itemAt(QPointF(170, 207-expectedYOffset)), 4); - QCOMPARE(listView->itemAt(QPointF(10, 545-expectedYOffset)), 9); - QCOMPARE(listView->itemAt(QPointF(10, 546-expectedYOffset)), -1); - - listView->setVerticalOffset(-21); - expectedYOffset -= 21 * 2; - // a negative offset means we move the items down in the view and thus some white space - // appears above. The listView does not show any items that come before the firstIndex! - QCOMPARE(listView->itemAt(QPointF(0, 0)), -1); - QCOMPARE(listView->itemAt(QPointF(0, 21)), 3); - QCOMPARE(listView->itemAt(QPointF(99, 206-expectedYOffset)), 3); - QCOMPARE(listView->itemAt(QPointF(100, 207-expectedYOffset)), 4); - QCOMPARE(listView->itemAt(QPointF(170, 207-expectedYOffset)), 4); - QCOMPARE(listView->itemAt(QPointF(10, 545-expectedYOffset)), 9); - QCOMPARE(listView->itemAt(QPointF(10, 546-expectedYOffset)), -1); + QTest::addColumn<int>("count"); + QTest::addColumn<int>("orientation"); + QTest::addColumn<QSizeF>("size"); + QTest::addColumn<int>("firstIndex"); + QTest::addColumn<qreal>("horizontalOffset"); + QTest::addColumn<qreal>("verticalOffset"); + QTest::addColumn<QPointF>("position"); + QTest::addColumn<int>("expectedIndex"); + + QTest::newRow("no items, vertical") + << 0 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << QPointF() + << -1; + + QTest::newRow("one item, vertical, all visible") + << 1 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << QPointF(50, 10) + << 0; + + QTest::newRow("five items, vertical, all visible") + << 5 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << QPointF(50, 90) + << 4; + + QTest::newRow("ten items, vertical, first index five") + << 10 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 5 + << 0. << 0. + << QPointF(50, 90) + << 9; + + QTest::newRow("ten items, vertical, vertical offset") + << 10 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 0 + << 0. << 100. + << QPointF(50, 90) + << 9; + + QTest::newRow("no items, horizontal") + << 0 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << QPointF() + << -1; + + QTest::newRow("one item, horizontal, all visible") + << 1 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << QPointF(10, 50) + << 0; + + QTest::newRow("five items, horizontal, all visible") + << 5 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << QPointF(90, 50) + << 4; + + QTest::newRow("ten items, horizontal, first index five") + << 10 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 5 + << 0. << 0. + << QPointF(90, 50) + << 9; + + QTest::newRow("ten items, horizontal, horizontal offset") + << 10 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 0 + << 100. << 0. + << QPointF(90, 50) + << 9; + } -void tst_QtGraphicsListView::itemAtHorizontal() +void tst_QtGraphicsListView::itemAt() { - listView->setOrientation(Qt::Horizontal); + QFETCH(int, count); + QFETCH(int, orientation); + QFETCH(QSizeF, size); + QFETCH(int, firstIndex); + QFETCH(qreal, horizontalOffset); + QFETCH(qreal, verticalOffset); + QFETCH(QPointF, position); + QFETCH(int, expectedIndex); + QtListDefaultModel model; - for (int i = 0; i < 10; ++i) { - QtListDefaultItem *item = new QtListDefaultItem(QString("Item %1").arg(i)); - item->setSizeHint(QSizeF(50+i, 100)); // provide for some nice sizing hints ;) - model.insertItem(i, item); - } - listView->setModel(&model); - // this generates row-right-edges as follows; - // column: 0 50 - // column: 1 101 - // column: 2 153 - // column: 3 206 - // column: 4 260 - // column: 5 315 - // column: 6 371 - // column: 7 428 - // column: 8 486 - // column: 9 545 - - listView->doLayout(); - QCOMPARE(listView->itemAt(QPointF(0, 0)), 0); - QCOMPARE(listView->itemAt(QPointF(50, 99)), 0); - QCOMPARE(listView->itemAt(QPointF(50, 100)), 0); - QCOMPARE(listView->itemAt(QPointF(51, 100)), 1); - QCOMPARE(listView->itemAt(QPointF(51, 170)), 1); - QCOMPARE(listView->itemAt(QPointF(545, 10)), 9); - QCOMPARE(listView->itemAt(QPointF(546, 10)), -1); - - // setting the firstIndex will make the itemAt be repositioned to the new baseline. - // meaning all y positions are offset by -153 - int expectedXOffset = 153; - listView->setFirstIndex(3); - QCOMPARE(listView->itemAt(QPointF(0, 0)), 3); - QCOMPARE(listView->itemAt(QPointF(206-expectedXOffset, 99)), 3); - QCOMPARE(listView->itemAt(QPointF(207-expectedXOffset, 100)), 4); - QCOMPARE(listView->itemAt(QPointF(207-expectedXOffset, 170)), 4); - QCOMPARE(listView->itemAt(QPointF(545-expectedXOffset, 10)), 9); - QCOMPARE(listView->itemAt(QPointF(546-expectedXOffset, 10)), -1); - - listView->setVerticalOffset(10); // should have no effect. - QCOMPARE(listView->itemAt(QPointF(0, 0)), 3); - QCOMPARE(listView->itemAt(QPointF(206-expectedXOffset, 99)), 3); - QCOMPARE(listView->itemAt(QPointF(207-expectedXOffset, 100)), 4); - QCOMPARE(listView->itemAt(QPointF(207-expectedXOffset, 170)), 4); - QCOMPARE(listView->itemAt(QPointF(545-expectedXOffset, 10)), 9); - QCOMPARE(listView->itemAt(QPointF(546-expectedXOffset, 10)), -1); - - // horizontalOffset offset has an effect too - listView->setHorizontalOffset(21); - expectedXOffset += 21; - QCOMPARE(listView->itemAt(QPointF(0, 0)), 3); - QCOMPARE(listView->itemAt(QPointF(206-expectedXOffset, 99)), 3); - QCOMPARE(listView->itemAt(QPointF(207-expectedXOffset, 100)), 4); - QCOMPARE(listView->itemAt(QPointF(207-expectedXOffset, 170)), 4); - QCOMPARE(listView->itemAt(QPointF(545-expectedXOffset, 10)), 9); - QCOMPARE(listView->itemAt(QPointF(546-expectedXOffset, 10)), -1); - - listView->setHorizontalOffset(-21); - expectedXOffset -= 21 * 2; - // a negative offset means we move the items right in the view and thus some white space - // appears left of them. The listView does not show any items that come before the firstIndex! - QCOMPARE(listView->itemAt(QPointF(0, 0)), -1); - QCOMPARE(listView->itemAt(QPointF(21, 0)), 3); - QCOMPARE(listView->itemAt(QPointF(206-expectedXOffset, 99)), 3); - QCOMPARE(listView->itemAt(QPointF(207-expectedXOffset, 100)), 4); - QCOMPARE(listView->itemAt(QPointF(207-expectedXOffset, 170)), 4); - QCOMPARE(listView->itemAt(QPointF(545-expectedXOffset, 10)), 9); - QCOMPARE(listView->itemAt(QPointF(546-expectedXOffset, 10)), -1); + for (int i = 0; i < count; ++i) + model.insertItem(i, new QtListDefaultItem()); + + view->setOrientation(static_cast<Qt::Orientation>(orientation)); + view->setGeometry(QRectF(QPointF(0, 0), size)); + view->setViewItemCreator(new QtGraphicsListViewItemCreator<GraphicsListViewItem>()); + view->setModel(&model); + view->setFirstIndex(firstIndex); + view->setHorizontalOffset(horizontalOffset); + view->setVerticalOffset(verticalOffset); + view->doLayout(); + + QCOMPARE(view->itemAt(position), expectedIndex); } -void tst_QtGraphicsListView::layoutPositioningVertical() +void tst_QtGraphicsListView::layout_data() { - QtListDefaultModel model; - for (int i = 0; i < 10; ++i) { - QtListDefaultItem *item = new QtListDefaultItem(QString("Item %1").arg(i)); - item->setSizeHint(QSizeF(100, 50+i)); // provide for some nice sizing hints ;) - model.insertItem(i, item); - } - listView->setModel(&model); - listView->setGeometry(0, 0, 200, 206); - QVERIFY(listView->children().isEmpty()); - listView->doLayout(); - - QCOMPARE(listView->childItems().count(), 4); - QList<int> visibleItems; - visibleItems << 0 << 1 << 2 << 3; - foreach (QGraphicsItem *child, listView->childItems()) { - QtGraphicsListViewItem *item = dynamic_cast<QtGraphicsListViewItem*>(child); - QVERIFY(item); - //qDebug() << item->index(); - QVERIFY(visibleItems.contains(item->index())); - } - - listView->setFirstIndex(2); - listView->setGeometry(0, 0, 200, 260); - listView->doLayout(); - QCOMPARE(listView->childItems().count(), 5); // would fit 0 till 4, but not 2 till 6 ;) - visibleItems.clear(); - visibleItems << 2 << 3 << 4 << 5 << 6; - foreach (QGraphicsItem *child, listView->childItems()) { - QtGraphicsListViewItem *item = dynamic_cast<QtGraphicsListViewItem*>(child); - QVERIFY(item); - //qDebug() << item->index(); - QVERIFY(visibleItems.contains(item->index())); - } - - listView->setFirstIndex(1); - listView->doLayout(); - QCOMPARE(listView->childItems().count(), 5); - visibleItems.clear(); - visibleItems << 1 << 2 << 3 << 4 << 5; - foreach (QGraphicsItem *child, listView->childItems()) { - QtGraphicsListViewItem *item = dynamic_cast<QtGraphicsListViewItem*>(child); - QVERIFY(item); - //qDebug() << item->index(); - QVERIFY(visibleItems.contains(item->index())); - } - - listView->setFirstIndex(7); - listView->setGeometry(0, 0, 200, 115); - listView->doLayout(); - QCOMPARE(listView->childItems().count(), 2); - visibleItems.clear(); - visibleItems << 7 << 8; - foreach (QGraphicsItem *child, listView->childItems()) { - QtGraphicsListViewItem *item = dynamic_cast<QtGraphicsListViewItem*>(child); - QVERIFY(item); - //qDebug() << item->index(); - QVERIFY(visibleItems.contains(item->index())); - } + QTest::addColumn<int>("count"); + QTest::addColumn<int>("orientation"); + QTest::addColumn<QSizeF>("size"); + QTest::addColumn<int>("firstIndex"); + QTest::addColumn<qreal>("horizontalOffset"); + QTest::addColumn<qreal>("verticalOffset"); + QTest::addColumn<QList<QRectF> >("expectedGeometries"); + + QTest::newRow("no items, vertical") + << 0 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << QList<QRectF>(); + + + QTest::newRow("one item, vertical, all visible") + << 1 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << (QList<QRectF>() << QRectF(0, 0, 20, 20)); + + + QTest::newRow("five items, vertical, all visible") + << 5 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << (QList<QRectF>() + << QRectF(0, 0, 20, 20) + << QRectF(0, 20, 20, 20) + << QRectF(0, 40, 20, 20) + << QRectF(0, 60, 20, 20) + << QRectF(0, 80, 20, 20)); + + QTest::newRow("ten items, vertical, five visible") + << 10 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << (QList<QRectF>() + << QRectF(0, 0, 20, 20) + << QRectF(0, 20, 20, 20) + << QRectF(0, 40, 20, 20) + << QRectF(0, 60, 20, 20) + << QRectF(0, 80, 20, 20)); + + QTest::newRow("ten items, vertical, five visible, first item five") + << 10 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 5 + << 0. << 0. + << (QList<QRectF>() + << QRectF(0, 0, 20, 20) + << QRectF(0, 20, 20, 20) + << QRectF(0, 40, 20, 20) + << QRectF(0, 60, 20, 20) + << QRectF(0, 80, 20, 20)); + + QTest::newRow("ten items, vertical, five visible, vertical offset") + << 10 + << int(Qt::Vertical) + << QSizeF(100, 100) + << 0 + << 0. << 10. + << (QList<QRectF>() + << QRectF(0, -10, 20, 20) + << QRectF(0, 10, 20, 20) + << QRectF(0, 30, 20, 20) + << QRectF(0, 50, 20, 20) + << QRectF(0, 70, 20, 20) + << QRectF(0, 90, 20, 20)); + + QTest::newRow("no items, horizontal") + << 0 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << QList<QRectF>(); + + + QTest::newRow("one item, horizontal, all visible") + << 1 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << (QList<QRectF>() << QRectF(0, 0, 20, 20)); + + + QTest::newRow("five items, horizontal, all visible") + << 5 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << (QList<QRectF>() + << QRectF(0, 0, 20, 20) + << QRectF(20, 0, 20, 20) + << QRectF(40, 0, 20, 20) + << QRectF(60, 0, 20, 20) + << QRectF(80, 0, 20, 20)); + + QTest::newRow("ten items, horizontal, five visible") + << 10 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 0 + << 0. << 0. + << (QList<QRectF>() + << QRectF(0, 0, 20, 20) + << QRectF(20, 0, 20, 20) + << QRectF(40, 0, 20, 20) + << QRectF(60, 0, 20, 20) + << QRectF(80, 0, 20, 20)); + + QTest::newRow("ten items, horizontal, five visible, first item five") + << 10 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 5 + << 0. << 0. + << (QList<QRectF>() + << QRectF(0, 0, 20, 20) + << QRectF(20, 0, 20, 20) + << QRectF(40, 0, 20, 20) + << QRectF(60, 0, 20, 20) + << QRectF(80, 0, 20, 20)); + + QTest::newRow("ten items, horizontal, five visible, horizontal offset") + << 10 + << int(Qt::Horizontal) + << QSizeF(100, 100) + << 0 + << 10. << 0. + << (QList<QRectF>() + << QRectF(-10, 0, 20, 20) + << QRectF(10, 0, 20, 20) + << QRectF(30, 0, 20, 20) + << QRectF(50, 0, 20, 20) + << QRectF(70, 0, 20, 20) + << QRectF(90, 0, 20, 20)); } -void tst_QtGraphicsListView::layoutPositioningHorizontal() +void tst_QtGraphicsListView::layout() { + QFETCH(int, count); + QFETCH(int, orientation); + QFETCH(QSizeF, size); + QFETCH(int, firstIndex); + QFETCH(qreal, horizontalOffset); + QFETCH(qreal, verticalOffset); + QFETCH(QList<QRectF>, expectedGeometries); + QtListDefaultModel model; - listView->setOrientation(Qt::Horizontal); - for (int i = 0; i < 10; ++i) { - QtListDefaultItem *item = new QtListDefaultItem(QString("Item %1").arg(i)); - item->setSizeHint(QSizeF(50+i, 100)); // provide for some nice sizing hints ;) - model.insertItem(i, item); - } - listView->setModel(&model); - listView->setGeometry(0, 0, 206, 200); - QVERIFY(listView->children().isEmpty()); - listView->updateLayout(); - - QCOMPARE(listView->childItems().count(), 4); - QList<int> visibleItems; - visibleItems << 0 << 1 << 2 << 3; - foreach (QGraphicsItem *child, listView->childItems()) { - QtGraphicsListViewItem *item = dynamic_cast<QtGraphicsListViewItem*>(child); - QVERIFY(item); - //qDebug() << item->index(); - QVERIFY(visibleItems.contains(item->index())); - } - - listView->setFirstIndex(2); - listView->setGeometry(0, 0, 260, 200); - listView->doLayout(); - QCOMPARE(listView->childItems().count(), 5); - visibleItems.clear(); - visibleItems << 2 << 3 << 4 << 5 << 6; - foreach (QGraphicsItem *child, listView->childItems()) { - QtGraphicsListViewItem *item = dynamic_cast<QtGraphicsListViewItem*>(child); - QVERIFY(item); - //qDebug() << item->index(); - QVERIFY(visibleItems.contains(item->index())); - } - - listView->setFirstIndex(1); - listView->doLayout(); - QCOMPARE(listView->childItems().count(), 5); - visibleItems.clear(); - visibleItems << 1 << 2 << 3 << 4 << 5; - foreach (QGraphicsItem *child, listView->childItems()) { - QtGraphicsListViewItem *item = dynamic_cast<QtGraphicsListViewItem*>(child); - QVERIFY(item); - //qDebug() << item->index(); - QVERIFY(visibleItems.contains(item->index())); - } - - listView->setFirstIndex(7); - listView->setGeometry(0, 0, 115, 200); - listView->doLayout(); - QCOMPARE(listView->childItems().count(), 2); - visibleItems.clear(); - visibleItems << 7 << 8; - foreach (QGraphicsItem *child, listView->childItems()) { - QtGraphicsListViewItem *item = dynamic_cast<QtGraphicsListViewItem*>(child); - QVERIFY(item); - //qDebug() << item->index(); - QVERIFY(visibleItems.contains(item->index())); - } + for (int i = 0; i < count; ++i) + model.insertItem(i, new QtListDefaultItem()); + + view->setOrientation(static_cast<Qt::Orientation>(orientation)); + view->setGeometry(QRectF(QPointF(0, 0), size)); + view->setViewItemCreator(new QtGraphicsListViewItemCreator<GraphicsListViewItem>()); + view->setModel(&model); + view->setFirstIndex(firstIndex); + view->setHorizontalOffset(horizontalOffset); + view->setVerticalOffset(verticalOffset); + view->doLayout(); + + QCOMPARE(view->viewItems().count(), expectedGeometries.count()); + for (int j = 0; j < expectedGeometries.count(); ++j) + QCOMPARE(view->viewItems().at(j)->geometry(), expectedGeometries.at(j)); } QTEST_MAIN(tst_QtGraphicsListView) -#include <tst_qgraphicslistview.moc> +#include <tst_qGraphicsListView.moc> |