Reuse QQuickView in ListView table driven tests
authorMartin Jones <martin.jones@nokia.com>
Tue, 13 Mar 2012 05:54:19 +0000 (15:54 +1000)
committerQt by Nokia <qt-info@nokia.com>
Tue, 13 Mar 2012 08:47:23 +0000 (09:47 +0100)
Makes the tests run faster since we're not waiting for a
window to appear all the time.

Change-Id: Ibff3706873dbad2f92d2135eae260368f4f4bb10
Reviewed-by: Bea Lam <bea.lam@nokia.com>
tests/auto/quick/qquicklistview/tst_qquicklistview.cpp

index 1a49418..14707ca 100644 (file)
@@ -63,6 +63,8 @@ Q_DECLARE_METATYPE(QQuickListView::Orientation)
 using namespace QQuickViewTestUtil;
 using namespace QQuickVisualTestUtil;
 
+#define SHARE_VIEWS
+
 class tst_QQuickListView : public QQmlDataTest
 {
     Q_OBJECT
@@ -70,6 +72,7 @@ public:
     tst_QQuickListView();
 
 private slots:
+    void init();
     // Test both QListModelInterface and QAbstractItemModel model types
     void qListModelInterface_items();
     void qListModelInterface_package_items();
@@ -206,6 +209,38 @@ private:
     void inserted_more_data();
     void removed_more_data();
     void moved_data();
+
+#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;
 };
 
 class TestObject : public QObject
@@ -247,10 +282,21 @@ public:
     int mCacheBuffer;
 };
 
-tst_QQuickListView::tst_QQuickListView()
+tst_QQuickListView::tst_QQuickListView() : m_view(0)
 {
 }
 
+void tst_QQuickListView::init()
+{
+#ifdef SHARE_VIEWS
+    if (m_view && QString(QTest::currentTestFunction()) != testForView) {
+        testForView = QString();
+        delete m_view;
+        m_view = 0;
+    }
+#endif
+}
+
 template <class T>
 void tst_QQuickListView::items(const QUrl &source, bool forceLayout)
 {
@@ -486,7 +532,7 @@ void tst_QQuickListView::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);
 
@@ -544,7 +590,7 @@ void tst_QQuickListView::inserted_more()
         QTRY_COMPARE(number->text(), model.number(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
     delete testObject;
 }
 
@@ -635,7 +681,7 @@ void tst_QQuickListView::insertBeforeVisible()
     QFETCH(int, cacheBuffer);
 
     QQuickText *name;
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     QmlListModel model;
     for (int i = 0; i < 30; i++)
@@ -696,7 +742,7 @@ void tst_QQuickListView::insertBeforeVisible()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
     delete testObject;
 }
 
@@ -914,7 +960,7 @@ void tst_QQuickListView::removed_more(const QUrl &source)
 
     QQuickText *name;
     QQuickText *number;
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     T model;
     for (int i = 0; i < 30; i++)
@@ -976,7 +1022,7 @@ void tst_QQuickListView::removed_more(const QUrl &source)
         QTRY_COMPARE(number->text(), model.number(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
     delete testObject;
 }
 
@@ -1136,7 +1182,7 @@ void tst_QQuickListView::moved(const QUrl &source)
 
     QQuickText *name;
     QQuickText *number;
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     T model;
     for (int i = 0; i < 30; i++)
@@ -1201,7 +1247,7 @@ void tst_QQuickListView::moved(const QUrl &source)
             QTRY_COMPARE(listview->currentIndex(), i);
     }
 
-    delete canvas;
+    releaseView(canvas);
     delete testObject;
 }
 
@@ -1363,7 +1409,7 @@ void tst_QQuickListView::multipleChanges()
     QFETCH(int, newCount);
     QFETCH(int, newCurrentIndex);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     QmlListModel model;
     for (int i = 0; i < startCount; i++)
@@ -1435,7 +1481,7 @@ void tst_QQuickListView::multipleChanges()
     }
 
     delete testObject;
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickListView::multipleChanges_data()
@@ -2189,7 +2235,7 @@ void tst_QQuickListView::currentIndex_delayedItemCreation()
 {
     QFETCH(bool, setCurrentToZero);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     // test currentIndexChanged() is emitted even if currentIndex = 0 on start up
     // (since the currentItem will have changed and that shares the same index)
@@ -2207,7 +2253,7 @@ void tst_QQuickListView::currentIndex_delayedItemCreation()
     QCOMPARE(listview->currentIndex(), 0);
     QTRY_COMPARE(spy.count(), 1);
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickListView::currentIndex_delayedItemCreation_data()
@@ -3030,7 +3076,7 @@ void tst_QQuickListView::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);
@@ -3092,12 +3138,12 @@ void tst_QQuickListView::header()
     QVERIFY(item);
     QCOMPARE(item->pos(), firstDelegatePos);
 
-    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", 0.0);
     canvas->rootContext()->setContextProperty("initialViewHeight", 0.0);
@@ -3116,8 +3162,7 @@ void tst_QQuickListView::header()
     QTRY_COMPARE(listview->headerItem()->pos(), initialHeaderPos);
     QCOMPARE(QPointF(listview->contentX(), listview->contentY()), initialContentPos);
 
-
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickListView::header_data()
@@ -3212,7 +3257,7 @@ void tst_QQuickListView::footer()
     QFETCH(QPointF, changedContentPos);
     QFETCH(QPointF, resizeContentPos);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     QmlListModel model;
     for (int i = 0; i < 3; i++)
@@ -3306,7 +3351,7 @@ void tst_QQuickListView::footer()
     footer->setWidth(40);
     QTRY_COMPARE(QPointF(listview->contentX(), listview->contentY()), resizeContentPos);
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickListView::footer_data()
@@ -3835,7 +3880,7 @@ void tst_QQuickListView::indexAt_itemAt()
     QFETCH(qreal, y);
     QFETCH(int, index);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     QmlListModel model;
     for (int i = 0; i < 30; i++)
@@ -3866,7 +3911,7 @@ void tst_QQuickListView::indexAt_itemAt()
     QCOMPARE(listview->indexAt(x,y), index);
     QVERIFY(listview->itemAt(x,y) == item);
 
-    delete canvas;
+    releaseView(canvas);
     delete testObject;
 }
 
@@ -3963,7 +4008,7 @@ void tst_QQuickListView::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("delegateHeight", delegateHeight);
@@ -3976,7 +4021,7 @@ void tst_QQuickListView::onRemove()
 
     QCOMPARE(object->property("removedDelegateCount"), QVariant(removeCount));
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickListView::onRemove_data()
@@ -4189,7 +4234,7 @@ void tst_QQuickListView::marginsResize()
     QFETCH(qreal, start);
     QFETCH(qreal, end);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     canvas->setSource(testFileUrl("margins2.qml"));
     canvas->show();
@@ -4222,7 +4267,7 @@ void tst_QQuickListView::marginsResize()
     else
         QTRY_COMPARE(listview->contentX(), start);
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickListView::marginsResize_data()
@@ -4278,7 +4323,7 @@ void tst_QQuickListView::snapToItem()
     QFETCH(qreal, endExtent);
     QFETCH(qreal, startExtent);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     canvas->setSource(testFileUrl("snapToItem.qml"));
     canvas->show();
@@ -4329,7 +4374,7 @@ void tst_QQuickListView::snapToItem()
     else
         QCOMPARE(listview->contentX(), startExtent);
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickListView::qListModelInterface_items()
@@ -4620,7 +4665,7 @@ void tst_QQuickListView::snapOneItem()
     QSKIP("QTBUG-24338");
 #endif
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
 
     canvas->setSource(testFileUrl("snapOneItem.qml"));
     canvas->show();
@@ -4688,7 +4733,7 @@ void tst_QQuickListView::snapOneItem()
         QCOMPARE(currentIndexSpy.count(), 6);
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickListView::unrequestedVisibility()
@@ -4873,7 +4918,7 @@ void tst_QQuickListView::populateTransitions()
             model.addItem("item" + QString::number(i), "");
     }
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     canvas->rootContext()->setContextProperty("testModel", &model);
     canvas->rootContext()->setContextProperty("testObject", new TestObject(canvas->rootContext()));
     canvas->rootContext()->setContextProperty("usePopulateTransition", usePopulateTransition);
@@ -4971,7 +5016,7 @@ void tst_QQuickListView::populateTransitions()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickListView::populateTransitions_data()
@@ -5011,7 +5056,7 @@ void tst_QQuickListView::addTransitions()
     QaimModel model_targetItems_transitionFrom;
     QaimModel model_displacedItems_transitionVia;
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     QQmlContext *ctxt = canvas->rootContext();
     TestObject *testObject = new TestObject;
     ctxt->setContextProperty("testModel", &model);
@@ -5109,7 +5154,7 @@ void tst_QQuickListView::addTransitions()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
     delete testObject;
 }
 
@@ -5206,7 +5251,7 @@ void tst_QQuickListView::moveTransitions()
     QaimModel model_targetItems_transitionVia;
     QaimModel model_displacedItems_transitionVia;
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     QQmlContext *ctxt = canvas->rootContext();
     TestObject *testObject = new TestObject;
     ctxt->setContextProperty("testModel", &model);
@@ -5294,7 +5339,7 @@ void tst_QQuickListView::moveTransitions()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
     delete testObject;
 }
 
@@ -5409,7 +5454,7 @@ void tst_QQuickListView::removeTransitions()
     QaimModel model_targetItems_transitionTo;
     QaimModel model_displacedItems_transitionVia;
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     QQmlContext *ctxt = canvas->rootContext();
     TestObject *testObject = new TestObject;
     ctxt->setContextProperty("testModel", &model);
@@ -5508,7 +5553,7 @@ void tst_QQuickListView::removeTransitions()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
     delete testObject;
 }
 
@@ -5608,7 +5653,7 @@ void tst_QQuickListView::displacedTransitions()
     QPointF moveDisplaced_transitionVia(50, -100);
     QPointF removeDisplaced_transitionVia(150, 100);
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     QQmlContext *ctxt = canvas->rootContext();
     TestObject *testObject = new TestObject(canvas);
     ctxt->setContextProperty("testModel", &model);
@@ -5720,7 +5765,7 @@ void tst_QQuickListView::displacedTransitions()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 void tst_QQuickListView::displacedTransitions_data()
@@ -5832,7 +5877,7 @@ void tst_QQuickListView::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();
     TestObject *testObject = new TestObject;
     ctxt->setContextProperty("testModel", &model);
@@ -5924,7 +5969,7 @@ void tst_QQuickListView::multipleTransitions()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
     delete testObject;
 }
 
@@ -5996,7 +6041,7 @@ void tst_QQuickListView::multipleDisplaced()
     for (int i = 0; i < 30; i++)
         model.addItem("Original item" + QString::number(i), "");
 
-    QQuickView *canvas = createView();
+    QQuickView *canvas = getView();
     QQmlContext *ctxt = canvas->rootContext();
     ctxt->setContextProperty("testModel", &model);
     ctxt->setContextProperty("testObject", new TestObject(canvas));
@@ -6033,7 +6078,7 @@ void tst_QQuickListView::multipleDisplaced()
         QTRY_COMPARE(name->text(), model.name(i));
     }
 
-    delete canvas;
+    releaseView(canvas);
 }
 
 QList<int> tst_QQuickListView::toIntList(const QVariantList &list)