Reuse QQuickView in GridView table driven tests
authorMartin Jones <martin.jones@nokia.com>
Tue, 13 Mar 2012 23:50:31 +0000 (09:50 +1000)
committerQt by Nokia <qt-info@nokia.com>
Wed, 14 Mar 2012 00:12:19 +0000 (01:12 +0100)
Makes the tests run faster since we're not waiting for a
window to appear all the time.

Change-Id: Id2442cf32055084088c19865499055c7282bcae0
Reviewed-by: Bea Lam <bea.lam@nokia.com>
tests/auto/quick/qquickgridview/tst_qquickgridview.cpp

index 7d00491..928151d 100644 (file)
@@ -64,6 +64,8 @@ Q_DECLARE_METATYPE(QQuickGridView::Flow)
 using namespace QQuickViewTestUtil;
 using namespace QQuickVisualTestUtil;
 
+#define SHARE_VIEWS
+
 class tst_QQuickGridView : public QQmlDataTest
 {
     Q_OBJECT
@@ -71,6 +73,7 @@ public:
     tst_QQuickGridView();
 
 private slots:
+    void init();
     void items();
     void changed();
     void inserted();
@@ -149,10 +152,53 @@ private:
     void matchIndexLists(const QVariantList &indexLists, const QList<int> &expectedIndexes);
     void matchItemsAndIndexes(const QVariantMap &items, const QaimModel &model, const QList<int> &expectedIndexes);
     void matchItemLists(const QVariantList &itemLists, const QList<QQuickItem *> &expectedItems);
+
+#ifdef SHARE_VIEWS
+    QQuickView *getView() {
+        if (m_view) {
+            if (QString(QTest::currentTestFunction()) != testForView) {
+                delete m_view;
+                m_view = 0;
+            } else {
+                m_view->setSource(QUrl());
+                return m_view;
+            }
+        }
+
+        testForView = QTest::currentTestFunction();
+        m_view = createView();
+        return m_view;
+    }
+    void releaseView(QQuickView *view) {
+        Q_ASSERT(view == m_view);
+        m_view->setSource(QUrl());
+    }
+#else
+    QQuickView *getView() {
+        return createView();
+    }
+    void releaseView(QQuickView *view) {
+        delete view;
+    }
+#endif
+
+    QQuickView *m_view;
+    QString testForView;
 };
 
-tst_QQuickGridView::tst_QQuickGridView()
+tst_QQuickGridView::tst_QQuickGridView() : m_view(0)
+{
+}
+
+void tst_QQuickGridView::init()
 {
+#ifdef SHARE_VIEWS
+    if (m_view && QString(QTest::currentTestFunction()) != testForView) {
+        testForView = QString();
+        delete m_view;
+        m_view = 0;
+    }
+#endif
 }
 
 void tst_QQuickGridView::items()
@@ -334,7 +380,7 @@ void tst_QQuickGridView::inserted_more()
     for (int i = 0; i < 30; i++)
         model.addItem("Item" + QString::number(i), "");
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     QQmlContext *ctxt = canvas->rootContext();
     ctxt->setContextProperty("testModel", &model);
     ctxt->setContextProperty("testRightToLeft", QVariant(false));
@@ -393,7 +439,7 @@ void tst_QQuickGridView::inserted_more()
         QCOMPARE(number->text(), model.number(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::inserted_more_data()
@@ -502,7 +548,7 @@ void tst_QQuickGridView::insertBeforeVisible()
     QFETCH(int, cacheBuffer);
 
     QQuickText *name;
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     QaimModel model;
     for (int i = 0; i < 30; i++)
@@ -560,7 +606,7 @@ void tst_QQuickGridView::insertBeforeVisible()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::insertBeforeVisible_data()
@@ -741,7 +787,7 @@ void tst_QQuickGridView::removed_more()
 
     QQuickText *name;
     QQuickText *number;
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     QaimModel model;
     for (int i = 0; i < 30; i++)
@@ -798,7 +844,7 @@ void tst_QQuickGridView::removed_more()
         QTRY_COMPARE(number->text(), model.number(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::removed_more_data()
@@ -934,7 +980,7 @@ void tst_QQuickGridView::addOrRemoveBeforeVisible()
     QFETCH(bool, doAdd);
     QFETCH(qreal, newTopContentY);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     canvas->show();
 
     QaimModel model;
@@ -1000,7 +1046,7 @@ void tst_QQuickGridView::addOrRemoveBeforeVisible()
         QTRY_VERIFY(item->y() == (i/3)*60 + newTopContentY);
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::addOrRemoveBeforeVisible_data()
@@ -1061,7 +1107,7 @@ void tst_QQuickGridView::moved()
 
     QQuickText *name;
     QQuickText *number;
-    QScopedPointer<QQuickView> canvas(createView());
+    QQuickView *canvas = getView();
 
     QaimModel model;
     for (int i = 0; i < 30; i++)
@@ -1116,6 +1162,8 @@ void tst_QQuickGridView::moved()
         if (item == currentItem)
             QTRY_COMPARE(gridview->currentIndex(), i);
     }
+
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::moved_data()
@@ -1279,7 +1327,7 @@ void tst_QQuickGridView::multipleChanges()
     QFETCH(int, newCount);
     QFETCH(int, newCurrentIndex);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     QaimModel model;
     for (int i = 0; i < startCount; i++)
@@ -1347,7 +1395,7 @@ void tst_QQuickGridView::multipleChanges()
         QTRY_COMPARE(number->text(), model.number(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::multipleChanges_data()
@@ -2778,7 +2826,7 @@ void tst_QQuickGridView::footer()
     QFETCH(QPointF, firstDelegatePos);
     QFETCH(QPointF, resizeContentPos);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     canvas->show();
 
     QaimModel model;
@@ -2876,7 +2924,7 @@ void tst_QQuickGridView::footer()
     footer->setWidth(40);
     QTRY_COMPARE(QPointF(gridview->contentX(), gridview->contentY()), resizeContentPos);
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::footer_data()
@@ -2948,7 +2996,7 @@ void tst_QQuickGridView::header()
     for (int i = 0; i < 30; i++)
         model.addItem("Item" + QString::number(i), "");
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     canvas->rootContext()->setContextProperty("testModel", &model);
     canvas->rootContext()->setContextProperty("initialViewWidth", 240);
     canvas->rootContext()->setContextProperty("initialViewHeight", 320);
@@ -3016,12 +3064,12 @@ void tst_QQuickGridView::header()
     header->setWidth(40);
     QTRY_COMPARE(QPointF(gridview->contentX(), gridview->contentY()), resizeContentPos);
 
-    delete canvas;
+    releaseView(canvas);
 
 
     // QTBUG-21207 header should become visible if view resizes from initial empty size
 
-    canvas = createView();
+    canvas = getView();
     canvas->rootContext()->setContextProperty("testModel", &model);
     canvas->rootContext()->setContextProperty("initialViewWidth", 240);
     canvas->rootContext()->setContextProperty("initialViewHeight", 320);
@@ -3040,7 +3088,7 @@ void tst_QQuickGridView::header()
     QTRY_COMPARE(gridview->headerItem()->pos(), initialHeaderPos);
     QCOMPARE(QPointF(gridview->contentX(), gridview->contentY()), initialContentPos);
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::header_data()
@@ -3244,7 +3292,7 @@ void tst_QQuickGridView::indexAt_itemAt()
     QFETCH(qreal, y);
     QFETCH(int, index);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     QaimModel model;
     model.addItem("Fred", "12345");
@@ -3279,7 +3327,7 @@ void tst_QQuickGridView::indexAt_itemAt()
     QCOMPARE(gridview->indexAt(x, y), index);
     QVERIFY(gridview->itemAt(x, y) == item);
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::onAdd()
@@ -3290,7 +3338,7 @@ void tst_QQuickGridView::onAdd()
     const int delegateWidth = 50;
     const int delegateHeight = 100;
     QaimModel model;
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     canvas->setGeometry(0,0,5 * delegateWidth, 5 * delegateHeight); // just ensure all items fit
 
     // these initial items should not trigger GridView.onAdd
@@ -3321,7 +3369,7 @@ void tst_QQuickGridView::onAdd()
     for (int i=0; i<items.count(); i++)
         QCOMPARE(result[i].toString(), items[i].first);
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::onAdd_data()
@@ -3354,7 +3402,7 @@ void tst_QQuickGridView::onRemove()
     for (int i=0; i<initialItemCount; i++)
         model.addItem(QString("value %1").arg(i), "dummy value");
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     QQmlContext *ctxt = canvas->rootContext();
     ctxt->setContextProperty("testModel", &model);
     ctxt->setContextProperty("delegateWidth", delegateWidth);
@@ -3366,7 +3414,7 @@ void tst_QQuickGridView::onRemove()
     QTRY_COMPARE(model.count(), qobject_cast<QQuickGridView*>(canvas->rootObject())->count());
     QCOMPARE(object->property("removedDelegateCount"), QVariant(removeCount));
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::onRemove_data()
@@ -3602,7 +3650,7 @@ void tst_QQuickGridView::snapToRow()
     QFETCH(qreal, endExtent);
     QFETCH(qreal, startExtent);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     canvas->setSource(testFileUrl("snapToRow.qml"));
     canvas->show();
@@ -3653,7 +3701,7 @@ void tst_QQuickGridView::snapToRow()
     else
         QCOMPARE(gridview->contentX(), startExtent);
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::snapOneRow_data()
@@ -3697,7 +3745,7 @@ void tst_QQuickGridView::snapOneRow()
     QFETCH(qreal, endExtent);
     QFETCH(qreal, startExtent);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     canvas->setSource(testFileUrl("snapOneRow.qml"));
     canvas->show();
@@ -3765,7 +3813,7 @@ void tst_QQuickGridView::snapOneRow()
         QCOMPARE(currentIndexSpy.count(), 6);
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 
@@ -3846,7 +3894,7 @@ void tst_QQuickGridView::populateTransitions()
             model.addItem("item" + QString::number(i), "");
     }
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     canvas->rootContext()->setContextProperty("testModel", &model);
     canvas->rootContext()->setContextProperty("usePopulateTransition", usePopulateTransition);
     canvas->rootContext()->setContextProperty("dynamicallyPopulate", dynamicallyPopulate);
@@ -3944,7 +3992,7 @@ void tst_QQuickGridView::populateTransitions()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::populateTransitions_data()
@@ -3984,7 +4032,7 @@ void tst_QQuickGridView::addTransitions()
     QaimModel model_targetItems_transitionFrom;
     QaimModel model_displacedItems_transitionVia;
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     QQmlContext *ctxt = canvas->rootContext();
     ctxt->setContextProperty("testModel", &model);
     ctxt->setContextProperty("model_targetItems_transitionFrom", &model_targetItems_transitionFrom);
@@ -4080,7 +4128,7 @@ void tst_QQuickGridView::addTransitions()
         QCOMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::addTransitions_data()
@@ -4189,7 +4237,7 @@ void tst_QQuickGridView::moveTransitions()
     QaimModel model_targetItems_transitionVia;
     QaimModel model_displacedItems_transitionVia;
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     QQmlContext *ctxt = canvas->rootContext();
     ctxt->setContextProperty("testModel", &model);
     ctxt->setContextProperty("model_targetItems_transitionVia", &model_targetItems_transitionVia);
@@ -4277,7 +4325,7 @@ void tst_QQuickGridView::moveTransitions()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::moveTransitions_data()
@@ -4395,7 +4443,7 @@ void tst_QQuickGridView::removeTransitions()
     QaimModel model_targetItems_transitionTo;
     QaimModel model_displacedItems_transitionVia;
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     QQmlContext *ctxt = canvas->rootContext();
     ctxt->setContextProperty("testModel", &model);
     ctxt->setContextProperty("model_targetItems_transitionTo", &model_targetItems_transitionTo);
@@ -4492,7 +4540,7 @@ void tst_QQuickGridView::removeTransitions()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::removeTransitions_data()
@@ -4599,7 +4647,7 @@ void tst_QQuickGridView::displacedTransitions()
     QPointF moveDisplaced_transitionVia(50, -100);
     QPointF removeDisplaced_transitionVia(150, 100);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     QQmlContext *ctxt = canvas->rootContext();
     ctxt->setContextProperty("testModel", &model);
     ctxt->setContextProperty("model_displaced_transitionVia", &model_displaced_transitionVia);
@@ -4709,7 +4757,7 @@ void tst_QQuickGridView::displacedTransitions()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::displacedTransitions_data()
@@ -4822,7 +4870,7 @@ void tst_QQuickGridView::multipleTransitions()
     for (int i = 0; i < initialCount; i++)
         model.addItem("Original item" + QString::number(i), "");
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     QQmlContext *ctxt = canvas->rootContext();
     ctxt->setContextProperty("testModel", &model);
     ctxt->setContextProperty("addTargets_transitionFrom", addTargets_transitionFrom);
@@ -4924,7 +4972,7 @@ void tst_QQuickGridView::multipleTransitions()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickGridView::multipleTransitions_data()