summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorMarius Bugge Monsen <mmonsen@trolltech.com>2009-05-08 14:36:17 +0200
committerMarius Bugge Monsen <mmonsen@trolltech.com>2009-05-08 14:36:17 +0200
commitde51b3ca5ab7e4b81594b218c19873a5f8fcce5b (patch)
tree0bb7921bd5e1d970b06077e1e4002b0f547ea359 /tests
parentbe1f3f5a7abc19ec91e6c984f3a7152b760af3c1 (diff)
Expand the QtGraphicsListView test with data-sets.
Diffstat (limited to 'tests')
-rw-r--r--tests/qgraphicslistview/tst_qgraphicslistview.cpp795
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>