tests/auto/qlistview/tst_qlistview.cpp
changeset 18 2f34d5167611
parent 3 41300fa6a67c
child 30 5dc02b23752f
--- a/tests/auto/qlistview/tst_qlistview.cpp	Tue Feb 02 00:43:10 2010 +0200
+++ b/tests/auto/qlistview/tst_qlistview.cpp	Fri Apr 16 15:50:13 2010 +0300
@@ -1,6 +1,6 @@
 /****************************************************************************
 **
-** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
+** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
 ** All rights reserved.
 ** Contact: Nokia Corporation (qt-info@nokia.com)
 **
@@ -606,9 +606,8 @@
     view2.setWrapping(true);
     // We really want to make sure it is shown, because the layout won't be known until it is shown
     view2.show();
-    for (int i = 0; i < 5 && !view2.m_shown; ++i) {
-        QTest::qWait(500);
-    }
+    QTest::qWaitForWindowShown(&view2);
+    QTRY_VERIFY(view2.m_shown);
 
     QVERIFY(view2.m_index.isValid());
     QVERIFY(view2.m_index.row() != 0);
@@ -760,7 +759,8 @@
     view.setUniformItemSizes(true);
     view.setRowHidden(0,true);
     view.show();
-    QTest::qWait(100);
+    QTest::qWaitForWindowShown(&view);
+    QTest::qWait(10);
 }
 
 void tst_QListView::batchedMode()
@@ -778,10 +778,10 @@
     view.setBatchSize(2);
     view.resize(200,400);
     view.show();
+    QTest::qWaitForWindowShown(&view);
+    QTest::qWait(100);
 
-#if !defined(Q_OS_WINCE)
-    QTest::qWait(100);
-#else
+#if defined(Q_OS_WINCE)
     QTest::qWait(2000);
 #endif
     QBitArray ba;
@@ -1203,9 +1203,9 @@
     //we click the item
     QPoint p = lv.visualRect(index).center();
     QTest::mouseClick(lv.viewport(), Qt::LeftButton, Qt::NoModifier, p);
-    //let's wait 1 second because the scrolling is delayed
-    QTest::qWait(1000);
-    QCOMPARE(lv.visualRect(index).y(),0);
+    //let's wait because the scrolling is delayed
+    QTest::qWait(QApplication::doubleClickInterval() + 150);
+    QTRY_COMPARE(lv.visualRect(index).y(),0);
 
     //we scroll down. As the item is to tall for the view, it will disappear
     QTest::keyClick(lv.viewport(), Qt::Key_Down, Qt::NoModifier);
@@ -1222,9 +1222,9 @@
     //we click the item
     p = lv.visualRect(index).center();
     QTest::mouseClick(lv.viewport(), Qt::LeftButton, Qt::NoModifier, p);
-    //let's wait 1 second because the scrolling is delayed
-    QTest::qWait(1000);
-    QCOMPARE(lv.visualRect(index).x(),0);
+    //let's wait because the scrolling is delayed
+    QTest::qWait(QApplication::doubleClickInterval() + 150);
+    QTRY_COMPARE(lv.visualRect(index).x(),0);
 
     //we scroll right. As the item is too wide for the view, it will disappear
     QTest::keyClick(lv.viewport(), Qt::Key_Right, Qt::NoModifier);
@@ -1243,9 +1243,9 @@
     //we click the item
     p = lv.visualRect(index).center();
     QTest::mouseClick(lv.viewport(), Qt::LeftButton, Qt::NoModifier, p);
-    //let's wait 1 second because the scrolling is delayed
-    QTest::qWait(1000);
-    QCOMPARE(lv.visualRect(index).y(),0);
+    //let's wait because the scrolling is delayed
+    QTest::qWait(QApplication::doubleClickInterval() + 150);
+    QTRY_COMPARE(lv.visualRect(index).y(),0);
 
     //we scroll down. As the item is too tall for the view, it will partially disappear
     QTest::keyClick(lv.viewport(), Qt::Key_Down, Qt::NoModifier);
@@ -1277,7 +1277,7 @@
 
     for (int h = 30; h <= 210; ++h) {
         lv.resize(250, h);
-        QTest::qWait(100); // wait for the layout to be done
+        QApplication::processEvents(); // wait for the layout to be done
         int visibleRowCount = lv.viewport()->size().height() / rowHeight;
         int invisibleRowCount = rowCount - visibleRowCount;
         QCOMPARE(lv.verticalScrollBar()->maximum(), invisibleRowCount);
@@ -1366,7 +1366,7 @@
 
         model.setStringList(list);
         QApplication::processEvents();
-        QTest::qWait(100);
+        QTest::qWait(50);
 
         QStringList replacement;
         for (i = 0; i < itemCount; ++i) {
@@ -1375,10 +1375,9 @@
         model.setStringList(replacement);
 
         QApplication::processEvents();
-        QTest::qWait(100);
 
-        QCOMPARE(lv.horizontalScrollBar()->isVisible(), horizontalScrollBarVisible);
-        QCOMPARE(lv.verticalScrollBar()->isVisible(), verticalScrollBarVisible);
+        QTRY_COMPARE(lv.horizontalScrollBar()->isVisible(), horizontalScrollBarVisible);
+        QTRY_COMPARE(lv.verticalScrollBar()->isVisible(), verticalScrollBarVisible);
     }
 }
 
@@ -1433,10 +1432,9 @@
     lv.setFixedSize(150, 150);
     lv.show();
     QApplication::processEvents();
-    QTest::qWait(100);
 
-    QCOMPARE(lv.horizontalScrollBar()->isVisible(), false);
-    QCOMPARE(lv.verticalScrollBar()->isVisible(), true);
+    QTRY_COMPARE(lv.horizontalScrollBar()->isVisible(), false);
+    QTRY_COMPARE(lv.verticalScrollBar()->isVisible(), true);
 }
 
 #if defined(Q_OS_WIN) && !defined(Q_OS_WINCE)
@@ -1557,7 +1555,8 @@
     QStringListModel model(QStringList() << QLatin1String("item1") << QString());
     view.setModel(&model);
     view.show();
-    QTest::qWait(100);
+    QTest::qWaitForWindowShown(&view);
+    QTest::qWait(20);
 }
 
 void tst_QListView::task250446_scrollChanged()
@@ -1569,21 +1568,21 @@
     QVERIFY(index.isValid());
     view.setCurrentIndex(index);
     view.show();
-    QTest::qWait(100);
+    QTest::qWaitForWindowShown(&view);
     const int scrollValue = view.verticalScrollBar()->maximum();
     view.verticalScrollBar()->setValue(scrollValue);
     QCOMPARE(view.verticalScrollBar()->value(), scrollValue);
     QCOMPARE(view.currentIndex(), index);
 
     view.showMinimized();
-    QTest::qWait(100);
-    QCOMPARE(view.verticalScrollBar()->value(), scrollValue);
-    QCOMPARE(view.currentIndex(), index);
+    QTest::qWait(50);
+    QTRY_COMPARE(view.verticalScrollBar()->value(), scrollValue);
+    QTRY_COMPARE(view.currentIndex(), index);
 
     view.showNormal();
-    QTest::qWait(100);
-    QCOMPARE(view.verticalScrollBar()->value(), scrollValue);
-    QCOMPARE(view.currentIndex(), index);
+    QTest::qWait(50);
+    QTRY_COMPARE(view.verticalScrollBar()->value(), scrollValue);
+    QTRY_COMPARE(view.currentIndex(), index);
 }
 
 void tst_QListView::task196118_visualRegionForSelection()
@@ -1699,7 +1698,7 @@
         view.setViewMode(QListView::IconMode);
         view.setModel(&model);
         view.show();
-        QTest::qWait(30);
+        QTest::qWaitForWindowShown(&view);
 
         // Verfify that item sizes are non-uniform
         QVERIFY(view.sizeHintForIndex(model.index(0, 0)).height() > view.sizeHintForIndex(model.index(1, 0)).height());
@@ -1729,7 +1728,7 @@
         view.setViewMode(QListView::IconMode);
         view.setModel(&model);
         view.show();
-        QTest::qWait(30);
+        QTest::qWaitForWindowShown(&view);
 
         // Verfify that item sizes are non-uniform
         QVERIFY(view.sizeHintForIndex(model.index(0, 0)).width() > view.sizeHintForIndex(model.index(1, 0)).width());
@@ -1789,7 +1788,6 @@
     view.show();
     QApplication::setActiveWindow(&view);
     QTest::qWaitForWindowShown(&view);
-    QTest::qWait(30);
     QTRY_COMPARE(static_cast<QWidget *>(&view), QApplication::activeWindow());
     QTest::keyClick(&view, Qt::Key_Down);
     QTest::qWait(30);
@@ -1834,6 +1832,24 @@
         QVERIFY(index.isValid());
         QCOMPARE(index.row(), 2 * i + 1);
     }
+
+    //QTBUG-7929  should not crash
+    view.show();
+    QTest::qWaitForWindowShown(&view);
+    QScrollBar *bar = view.flow() == QListView::TopToBottom
+            ? view.verticalScrollBar() : view.horizontalScrollBar();
+
+    int nbVisibleItem = rowCount / 2 - bar->maximum();
+
+    bar->setValue(bar->maximum());
+    QApplication::processEvents();
+    for (int i = rowCount; i > rowCount / 2; i--) {
+        view.setRowHidden(i, true);
+    }
+    QApplication::processEvents();
+    QTest::qWait(50);
+    QCOMPARE(bar->value(), bar->maximum());
+    QCOMPARE(bar->maximum(), rowCount/4 - nbVisibleItem);
 }
 
 void tst_QListView::taskQTBUG_633_changeModelData()