tests/auto/qtableview/tst_qtableview.cpp
changeset 19 fcece45ef507
parent 18 2f34d5167611
child 22 79de32ba3296
--- a/tests/auto/qtableview/tst_qtableview.cpp	Fri Apr 16 15:50:13 2010 +0300
+++ b/tests/auto/qtableview/tst_qtableview.cpp	Mon May 03 13:17:34 2010 +0300
@@ -199,6 +199,9 @@
     void taskQTBUG_5062_spansInconsistency();
     void taskQTBUG_4516_clickOnRichTextLabel();
     void taskQTBUG_5237_wheelEventOnHeader();
+    void taskQTBUG_8585_crashForNoGoodReason();
+    void taskQTBUG_7774_RtoLVisualRegionForSelection();
+    void taskQTBUG_8777_scrollToSpans();
 
     void mouseWheel_data();
     void mouseWheel();
@@ -3948,5 +3951,88 @@
     QVERIFY(sbValueBefore != sbValueAfter);
 }
 
+class TestTableView : public QTableView {
+Q_OBJECT
+public:
+    TestTableView(QWidget *parent = 0) : QTableView(parent)
+    {
+        connect(this, SIGNAL(entered(const QModelIndex&)), this, SLOT(openEditor(const QModelIndex&)));
+    }
+    ~TestTableView(){}
+public slots:
+    void onDataChanged()
+    {
+        for (int i = 0; i < model()->rowCount(); i++) {
+            setRowHidden(i, model()->data(model()->index(i, 0)).toBool());
+        }
+    }
+
+    void openEditor(const QModelIndex& index)
+    { openPersistentEditor(index); }
+};
+
+
+void tst_QTableView::taskQTBUG_8585_crashForNoGoodReason()
+{
+    QStandardItemModel model;
+    model.insertColumn(0, QModelIndex());
+    for(int i = 0; i < 20; i++)
+    {
+        model.insertRow(i);
+    }
+
+    TestTableView w;
+    w.setMouseTracking(true);
+    w.setModel(&model);
+    connect(&model, SIGNAL(dataChanged(QModelIndex,QModelIndex)), &w, SLOT(onDataChanged()));
+    w.show();
+    QTest::qWaitForWindowShown(&w);
+    for (int i = 0; i < 10; i++)
+    {
+        QTest::mouseMove(w.viewport(), QPoint(50, 20));
+        w.model()->setData(w.indexAt(QPoint(50, 20)), true);
+        QTest::mouseMove(w.viewport(), QPoint(50, 25));
+    }
+}
+
+class TableView7774 : public QTableView
+{
+public:
+    QRegion visualRegionForSelection(const QItemSelection &selection) const
+    {
+        return QTableView::visualRegionForSelection(selection);
+    }
+};
+
+void tst_QTableView::taskQTBUG_7774_RtoLVisualRegionForSelection()
+{
+    TableView7774 view;
+    QStandardItemModel model(5,5);
+    view.setModel(&model);
+    view.setLayoutDirection(Qt::RightToLeft);
+    view.show();
+    QTest::qWaitForWindowShown(&view);
+
+    QItemSelectionRange range(model.index(2, 0), model.index(2, model.columnCount() - 1));
+    QItemSelection selection;
+    selection << range;
+    QRegion region = view.visualRegionForSelection(selection);
+    QCOMPARE(region.rects().at(0), view.visualRect(range.topLeft()) | view.visualRect(range.bottomRight()));
+}
+
+void tst_QTableView::taskQTBUG_8777_scrollToSpans()
+{
+    QTableWidget table(75,5);
+    for (int i=0; i<50; i++)
+        table.setSpan(2+i, 0, 1, 5);
+    table.setCurrentCell(0,2);
+    table.show();
+
+    for (int i = 0; i < 45; ++i)
+        QTest::keyClick(&table, Qt::Key_Down);
+
+    QVERIFY(table.verticalScrollBar()->value() > 10);
+}
+
 QTEST_MAIN(tst_QTableView)
 #include "tst_qtableview.moc"