tests/auto/qlistview/tst_qlistview.cpp
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
   117     void shiftSelectionWithNonUniformItemSizes();
   117     void shiftSelectionWithNonUniformItemSizes();
   118     void clickOnViewportClearsSelection();
   118     void clickOnViewportClearsSelection();
   119     void task262152_setModelColumnNavigate();
   119     void task262152_setModelColumnNavigate();
   120     void taskQTBUG_2233_scrollHiddenItems_data();
   120     void taskQTBUG_2233_scrollHiddenItems_data();
   121     void taskQTBUG_2233_scrollHiddenItems();
   121     void taskQTBUG_2233_scrollHiddenItems();
       
   122     void taskQTBUG_633_changeModelData();
       
   123     void taskQTBUG_435_deselectOnViewportClick();
       
   124     void taskQTBUG_2678_spacingAndWrappedText();
       
   125     void taskQTBUG_5877_skippingItemInPageDownUp();
   122 };
   126 };
   123 
   127 
   124 // Testing get/set functions
   128 // Testing get/set functions
   125 void tst_QListView::getSetCheck()
   129 void tst_QListView::getSetCheck()
   126 {
   130 {
   504     QCoreApplication::processEvents();
   508     QCoreApplication::processEvents();
   505 
   509 
   506     QModelIndex idx = vu.moveCursor(QMoveCursorListView::MoveHome, Qt::NoModifier);
   510     QModelIndex idx = vu.moveCursor(QMoveCursorListView::MoveHome, Qt::NoModifier);
   507     QCOMPARE(idx, model.index(0,0));
   511     QCOMPARE(idx, model.index(0,0));
   508     idx = vu.moveCursor(QMoveCursorListView::MoveDown, Qt::NoModifier);
   512     idx = vu.moveCursor(QMoveCursorListView::MoveDown, Qt::NoModifier);
   509     QModelIndex p = model.index(8,0);
       
   510     QCOMPARE(idx, model.index(8,0));
   513     QCOMPARE(idx, model.index(8,0));
   511 
       
   512 }
   514 }
   513 
   515 
   514 void tst_QListView::moveCursor3()
   516 void tst_QListView::moveCursor3()
   515 {
   517 {
   516     //this tests is for task 159792
   518     //this tests is for task 159792
   582     QCOMPARE(index.row(), 1);
   584     QCOMPARE(index.row(), 1);
   583 
   585 
   584     index = view.indexAt(QPoint(20,2 * sz.height()));
   586     index = view.indexAt(QPoint(20,2 * sz.height()));
   585     QVERIFY(!index.isValid());
   587     QVERIFY(!index.isValid());
   586 
   588 
   587 
   589     // Check when peeking out of the viewport bounds
       
   590     index = view.indexAt(QPoint(view.viewport()->rect().width(), 0));
       
   591     QVERIFY(!index.isValid());
       
   592     index = view.indexAt(QPoint(-1, 0));
       
   593     QVERIFY(!index.isValid());
       
   594     index = view.indexAt(QPoint(20, view.viewport()->rect().height()));
       
   595     QVERIFY(!index.isValid());
       
   596     index = view.indexAt(QPoint(20, -1));
       
   597     QVERIFY(!index.isValid());
   588 
   598 
   589     model.rCount = 30;
   599     model.rCount = 30;
   590     QListViewShowEventListener view2;
   600     QListViewShowEventListener view2;
   591     // Set the height to a small enough value so that it wraps to a new section.
   601     // Set the height to a small enough value so that it wraps to a new section.
   592     view2.resize(300,100);
   602     view2.resize(300,100);
   600         QTest::qWait(500);
   610         QTest::qWait(500);
   601     }
   611     }
   602 
   612 
   603     QVERIFY(view2.m_index.isValid());
   613     QVERIFY(view2.m_index.isValid());
   604     QVERIFY(view2.m_index.row() != 0);
   614     QVERIFY(view2.m_index.row() != 0);
   605 
       
   606 }
   615 }
   607 
   616 
   608 void tst_QListView::clicked()
   617 void tst_QListView::clicked()
   609 {
   618 {
   610     QtTestModel model;
   619     QtTestModel model;
   696             model.setData(model.index(r, c), QString("%1,%2").arg(r).arg(c));
   705             model.setData(model.index(r, c), QString("%1,%2").arg(r).arg(c));
   697 
   706 
   698 
   707 
   699     QListView view;
   708     QListView view;
   700     view.setModel(&model);
   709     view.setModel(&model);
   701 
       
   702 
   710 
   703 
   711 
   704     //
   712     //
   705     // Set and get with a valid model
   713     // Set and get with a valid model
   706     //
   714     //
   737             QCOMPARE(idx.column(), c);
   745             QCOMPARE(idx.column(), c);
   738         }
   746         }
   739         QCOMPARE(startrow, 2);
   747         QCOMPARE(startrow, 2);
   740     }
   748     }
   741 }
   749 }
   742 
       
   743 
   750 
   744 void tst_QListView::hideFirstRow()
   751 void tst_QListView::hideFirstRow()
   745 {
   752 {
   746     QStringList items;
   753     QStringList items;
   747     for (int i=0; i <100; ++i)
   754     for (int i=0; i <100; ++i)
   809         if (idx.row() >= ba.size())
   816         if (idx.row() >= ba.size())
   810             ba.resize(idx.row() + 1);
   817             ba.resize(idx.row() + 1);
   811         ba.setBit(idx.row(), true);
   818         ba.setBit(idx.row(), true);
   812     }
   819     }
   813     QCOMPARE(ba.size(), 3);
   820     QCOMPARE(ba.size(), 3);
   814 
       
   815 }
   821 }
   816 
   822 
   817 void tst_QListView::setCurrentIndex()
   823 void tst_QListView::setCurrentIndex()
   818 {
   824 {
   819     QStringList items;
   825     QStringList items;
  1130 #else
  1136 #else
  1131     v.resize(525,525);
  1137     v.resize(525,525);
  1132 #endif
  1138 #endif
  1133 
  1139 
  1134     v.show();
  1140     v.show();
       
  1141     QTest::qWaitForWindowShown(&v);
  1135     QApplication::processEvents();
  1142     QApplication::processEvents();
  1136 
  1143 
  1137     v.setSelection(selectionRect, QItemSelectionModel::ClearAndSelect);
  1144     v.setSelection(selectionRect, QItemSelectionModel::ClearAndSelect);
  1138 
  1145 
  1139     QModelIndexList selected = v.selectionModel()->selectedIndexes();
  1146     QModelIndexList selected = v.selectionModel()->selectedIndexes();
  1140 
  1147 
  1141     QCOMPARE(selected.count(), expectedItems.count());
  1148     QCOMPARE(selected.count(), expectedItems.count());
  1142     for (int i = 0; i < selected.count(); ++i) {
  1149     for (int i = 0; i < selected.count(); ++i) {
  1143         QVERIFY(expectedItems.contains(selected.at(i).row()));
  1150         QVERIFY(expectedItems.contains(selected.at(i).row()));
  1144     }
  1151     }
  1145 
       
  1146 }
  1152 }
  1147 
  1153 
  1148 void tst_QListView::scrollTo()
  1154 void tst_QListView::scrollTo()
  1149 {
  1155 {
  1150     QListView lv;
  1156     QListView lv;
  1182     list << "Short item";
  1188     list << "Short item";
  1183     model.setStringList(list);
  1189     model.setStringList(list);
  1184     lv.setModel(&model);
  1190     lv.setModel(&model);
  1185     lv.setFixedSize(100, 200);
  1191     lv.setFixedSize(100, 200);
  1186     lv.show();
  1192     lv.show();
       
  1193     QTest::qWaitForWindowShown(&lv);
  1187 
  1194 
  1188     //by default, the list view scrolls per item and has no wrapping
  1195     //by default, the list view scrolls per item and has no wrapping
  1189     QModelIndex index = model.index(6,0);
  1196     QModelIndex index = model.index(6,0);
  1190 
  1197 
  1191     //we save the size of the item for later comparisons
  1198     //we save the size of the item for later comparisons
  1244     QTest::keyClick(lv.viewport(), Qt::Key_Down, Qt::NoModifier);
  1251     QTest::keyClick(lv.viewport(), Qt::Key_Down, Qt::NoModifier);
  1245     QVERIFY(lv.visualRect(index).y()<0);
  1252     QVERIFY(lv.visualRect(index).y()<0);
  1246 
  1253 
  1247     QTest::keyClick(lv.viewport(), Qt::Key_Up, Qt::NoModifier);
  1254     QTest::keyClick(lv.viewport(), Qt::Key_Up, Qt::NoModifier);
  1248     QCOMPARE(lv.visualRect(index).y(), 0);
  1255     QCOMPARE(lv.visualRect(index).y(), 0);
  1249 
       
  1250 }
  1256 }
  1251 
  1257 
  1252 
  1258 
  1253 void tst_QListView::scrollBarRanges()
  1259 void tst_QListView::scrollBarRanges()
  1254 {
  1260 {
  1765     QVERIFY(view.selectionModel()->isSelected(index));
  1771     QVERIFY(view.selectionModel()->isSelected(index));
  1766 
  1772 
  1767     QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, point);
  1773     QTest::mouseRelease(view.viewport(), Qt::LeftButton, 0, point);
  1768     //now the selection should be cleared
  1774     //now the selection should be cleared
  1769     QVERIFY(!view.selectionModel()->hasSelection());
  1775     QVERIFY(!view.selectionModel()->hasSelection());
  1770 
       
  1771 }
  1776 }
  1772 
  1777 
  1773 void tst_QListView::task262152_setModelColumnNavigate()
  1778 void tst_QListView::task262152_setModelColumnNavigate()
  1774 {
  1779 {
  1775     QListView view;
  1780     QListView view;
  1780 
  1785 
  1781     view.setModel(&model);
  1786     view.setModel(&model);
  1782     view.setModelColumn(1);
  1787     view.setModelColumn(1);
  1783 
  1788 
  1784     view.show();
  1789     view.show();
  1785     QTest::qWait(100);
  1790     QApplication::setActiveWindow(&view);
       
  1791     QTest::qWaitForWindowShown(&view);
       
  1792     QTest::qWait(30);
       
  1793     QTRY_COMPARE(static_cast<QWidget *>(&view), QApplication::activeWindow());
  1786     QTest::keyClick(&view, Qt::Key_Down);
  1794     QTest::keyClick(&view, Qt::Key_Down);
  1787     QTest::qWait(100);
  1795     QTest::qWait(30);
  1788     QCOMPARE(view.currentIndex(), model.index(1,1));
  1796     QTRY_COMPARE(view.currentIndex(), model.index(1,1));
  1789     QTest::keyClick(&view, Qt::Key_Down);
  1797     QTest::keyClick(&view, Qt::Key_Down);
  1790     QTest::qWait(100);
  1798     QTest::qWait(30);
  1791     QCOMPARE(view.currentIndex(), model.index(2,1));
  1799     QTRY_COMPARE(view.currentIndex(), model.index(2,1));
  1792 
       
  1793 }
  1800 }
  1794 
  1801 
  1795 void tst_QListView::taskQTBUG_2233_scrollHiddenItems_data()
  1802 void tst_QListView::taskQTBUG_2233_scrollHiddenItems_data()
  1796 {
  1803 {
  1797     QTest::addColumn<int>("flow");
  1804     QTest::addColumn<int>("flow");
  1827         QVERIFY(index.isValid());
  1834         QVERIFY(index.isValid());
  1828         QCOMPARE(index.row(), 2 * i + 1);
  1835         QCOMPARE(index.row(), 2 * i + 1);
  1829     }
  1836     }
  1830 }
  1837 }
  1831 
  1838 
       
  1839 void tst_QListView::taskQTBUG_633_changeModelData()
       
  1840 {
       
  1841     QListView view;
       
  1842     view.setFlow(QListView::LeftToRight);
       
  1843     QStandardItemModel model(5,1);
       
  1844     for (int i = 0; i < model.rowCount(); ++i) {
       
  1845         model.setData( model.index(i, 0), QString::number(i));
       
  1846     }
       
  1847 
       
  1848     view.setModel(&model);
       
  1849     view.show();
       
  1850     QTest::qWaitForWindowShown(&view);
       
  1851     model.setData( model.index(1, 0), QLatin1String("long long text"));
       
  1852     QTest::qWait(100); //leave time for relayouting the items
       
  1853     QRect rectLongText = view.visualRect(model.index(1,0));
       
  1854     QRect rect2 = view.visualRect(model.index(2,0));
       
  1855     QVERIFY( ! rectLongText.intersects(rect2) );
       
  1856 }
       
  1857 
       
  1858 void tst_QListView::taskQTBUG_435_deselectOnViewportClick()
       
  1859 {
       
  1860     QListView view;
       
  1861     QStringListModel model( QStringList() << "1" << "2" << "3" << "4");
       
  1862     view.setModel(&model);
       
  1863     view.setSelectionMode(QAbstractItemView::ExtendedSelection);
       
  1864     view.selectAll();
       
  1865     QCOMPARE(view.selectionModel()->selectedIndexes().count(), model.rowCount());
       
  1866 
       
  1867 
       
  1868     QPoint p = view.visualRect(model.index(model.rowCount() - 1)).center() + QPoint(0, 20);
       
  1869     //first the left button
       
  1870     QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p);
       
  1871     QVERIFY(!view.selectionModel()->hasSelection());
       
  1872 
       
  1873     view.selectAll();
       
  1874     QCOMPARE(view.selectionModel()->selectedIndexes().count(), model.rowCount());
       
  1875 
       
  1876     //and now the right button
       
  1877     QTest::mouseClick(view.viewport(), Qt::RightButton, 0, p);
       
  1878     QVERIFY(!view.selectionModel()->hasSelection());
       
  1879 }
       
  1880 
       
  1881 void tst_QListView::taskQTBUG_2678_spacingAndWrappedText()
       
  1882 {
       
  1883     static const QString lorem("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.");
       
  1884     QStringListModel model(QStringList() << lorem << lorem << "foo" << lorem << "bar" << lorem << lorem);
       
  1885     QListView w;
       
  1886     w.setModel(&model);
       
  1887     w.setViewMode(QListView::ListMode);
       
  1888     w.setWordWrap(true);
       
  1889     w.setSpacing(10);
       
  1890     w.show();
       
  1891     QTest::qWaitForWindowShown(&w);
       
  1892     QCOMPARE(w.horizontalScrollBar()->minimum(), w.horizontalScrollBar()->maximum());
       
  1893 }
       
  1894 
       
  1895 void tst_QListView::taskQTBUG_5877_skippingItemInPageDownUp()
       
  1896 {
       
  1897     QList<int> currentItemIndexes;
       
  1898     QtTestModel model(0);
       
  1899     model.colCount = 1;
       
  1900     model.rCount = 100;
       
  1901 
       
  1902     currentItemIndexes << 0 << 6 << 16 << 25 << 34 << 42 << 57 << 68 << 77
       
  1903                        << 83 << 91 << 94;
       
  1904     QMoveCursorListView vu;
       
  1905     vu.setModel(&model);
       
  1906     vu.show();
       
  1907 
       
  1908     QTest::qWaitForWindowShown(&vu);
       
  1909 
       
  1910     int itemHeight = vu.visualRect(model.index(0, 0)).height();
       
  1911     int visibleRowCount = vu.viewport()->height() / itemHeight;
       
  1912     int scrolledRowCount = visibleRowCount - 1;
       
  1913 
       
  1914     for (int i = 0; i < currentItemIndexes.size(); ++i) {
       
  1915         vu.selectionModel()->setCurrentIndex(model.index(currentItemIndexes[i], 0),
       
  1916                                              QItemSelectionModel::SelectCurrent);
       
  1917 
       
  1918         QModelIndex idx = vu.moveCursor(QMoveCursorListView::MovePageDown, Qt::NoModifier);
       
  1919         int newCurrent = qMin(currentItemIndexes[i] + scrolledRowCount, 99);
       
  1920         QCOMPARE(idx, model.index(newCurrent, 0));
       
  1921 
       
  1922         idx = vu.moveCursor(QMoveCursorListView::MovePageUp, Qt::NoModifier);
       
  1923         newCurrent = qMax(currentItemIndexes[i] - scrolledRowCount, 0);
       
  1924         QCOMPARE(idx, model.index(newCurrent, 0));
       
  1925     }
       
  1926 }
       
  1927 
  1832 QTEST_MAIN(tst_QListView)
  1928 QTEST_MAIN(tst_QListView)
  1833 #include "tst_qlistview.moc"
  1929 #include "tst_qlistview.moc"