aboutsummaryrefslogtreecommitdiffstats
path: root/tests/auto/quick/qquicktableview
diff options
context:
space:
mode:
authorMitch Curtis <mitch.curtis@qt.io>2018-07-12 14:38:32 +0200
committerMitch Curtis <mitch.curtis@qt.io>2018-07-17 18:03:20 +0000
commite792c08ef2bb4d4676df2fe7cc4537ea993d07d2 (patch)
tree5291ba3613758ac0e12d303aafb6214cbbb8d99e /tests/auto/quick/qquicktableview
parent197c22be541e18b3e8db0d259d4a3e7be3030bb9 (diff)
TableView: invalidate table when model is reset
Signals like rowsInserted() were already accounted for in QQuickTableViewPrivate::connectToModel(), but modelReset() was not. Change-Id: I6b8248d745d507d4ea846e9bee717182915792b3 Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Diffstat (limited to 'tests/auto/quick/qquicktableview')
-rw-r--r--tests/auto/quick/qquicktableview/testmodel.h44
-rw-r--r--tests/auto/quick/qquicktableview/tst_qquicktableview.cpp54
2 files changed, 98 insertions, 0 deletions
diff --git a/tests/auto/quick/qquicktableview/testmodel.h b/tests/auto/quick/qquicktableview/testmodel.h
index 06384f7a5e..211beee9cb 100644
--- a/tests/auto/quick/qquicktableview/testmodel.h
+++ b/tests/auto/quick/qquicktableview/testmodel.h
@@ -76,6 +76,50 @@ public:
emit dataChanged(index, index);
}
+ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
+ {
+ if (row < 0 || count <= 0)
+ return false;
+
+ beginInsertRows(parent, row, row + count - 1);
+ m_rows += count;
+ endInsertRows();
+ return true;
+ }
+
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override
+ {
+ if (!checkIndex(createIndex(row, 0)) || !checkIndex(createIndex(row + count - 1, 0)))
+ return false;
+
+ beginRemoveRows(parent, row, row + count - 1);
+ m_rows -= count;
+ endRemoveRows();
+ return true;
+ }
+
+ bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
+ {
+ if (column < 0 || count <= 0)
+ return false;
+
+ beginInsertColumns(parent, column, column + count - 1);
+ m_columns += count;
+ endInsertColumns();
+ return true;
+ }
+
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) override
+ {
+ if (!checkIndex(createIndex(0, column)) || !checkIndex(createIndex(0, column + count - 1)))
+ return false;
+
+ beginRemoveColumns(parent, column, column + count - 1);
+ m_columns -= count;
+ endRemoveColumns();
+ return true;
+ }
+
signals:
void rowCountChanged();
void columnCountChanged();
diff --git a/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp b/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp
index a725a125c2..2a6179847d 100644
--- a/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp
+++ b/tests/auto/quick/qquicktableview/tst_qquicktableview.cpp
@@ -101,6 +101,7 @@ private slots:
void flickOvershoot_data();
void flickOvershoot();
void checkRowColumnCount();
+ void modelSignals();
};
tst_QQuickTableView::tst_QQuickTableView()
@@ -780,6 +781,59 @@ void tst_QQuickTableView::checkRowColumnCount()
QCOMPARE(qmlCountAfterUpFlick, qmlCountAfterInit);
}
+void tst_QQuickTableView::modelSignals()
+{
+ LOAD_TABLEVIEW("plaintableview.qml");
+
+ TestModel model(1, 1);
+ tableView->setModel(QVariant::fromValue(&model));
+ WAIT_UNTIL_POLISHED;
+ QCOMPARE(tableView->rows(), 1);
+ QCOMPARE(tableView->columns(), 1);
+
+ QVERIFY(model.insertRows(0, 1));
+ WAIT_UNTIL_POLISHED;
+ QCOMPARE(tableView->rows(), 2);
+ QCOMPARE(tableView->columns(), 1);
+
+ QVERIFY(model.removeRows(1, 1));
+ WAIT_UNTIL_POLISHED;
+ QCOMPARE(tableView->rows(), 1);
+ QCOMPARE(tableView->columns(), 1);
+
+ model.insertColumns(1, 1);
+ WAIT_UNTIL_POLISHED;
+ QCOMPARE(tableView->rows(), 1);
+ QCOMPARE(tableView->columns(), 2);
+
+ model.removeColumns(1, 1);
+ WAIT_UNTIL_POLISHED;
+ QCOMPARE(tableView->rows(), 1);
+ QCOMPARE(tableView->columns(), 1);
+
+ model.setRowCount(10);
+ WAIT_UNTIL_POLISHED;
+ QCOMPARE(tableView->rows(), 10);
+ QCOMPARE(tableView->columns(), 1);
+
+ model.setColumnCount(10);
+ WAIT_UNTIL_POLISHED;
+ QCOMPARE(tableView->rows(), 10);
+ QCOMPARE(tableView->columns(), 10);
+
+ model.setRowCount(0);
+ WAIT_UNTIL_POLISHED;
+ QCOMPARE(tableView->rows(), 0);
+ QCOMPARE(tableView->columns(), 10);
+
+ model.setColumnCount(0);
+ // TODO: When the QAbstractItemModel's column count is set to 0,
+ // QQmlAdaptorModel::columnCount() likes to return whatever it was previously,
+ // even though the model doesn't actually have any columns... not sure what to do about that.
+ QCOMPARE(tableView->rows(), 0);
+ QCOMPARE(tableView->columns(), 10);
+}
+
QTEST_MAIN(tst_QQuickTableView)
#include "tst_qquicktableview.moc"