summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib
diff options
context:
space:
mode:
authorMarc Mutz <marc.mutz@kdab.com>2016-08-03 12:11:38 +0300
committerMarc Mutz <marc.mutz@kdab.com>2016-08-12 08:27:53 +0000
commitb57f743c469f16f0c9ad5a9f0182454b74deff97 (patch)
tree1ad1d6709e810cbb1357006ac0431a7b00292714 /tests/auto/corelib
parent4e24ff2e68f942db1d8f90de43dae8db410e706b (diff)
QStringListModel: fix dataChanged's roles parameter
In QStringListModel, the display and the edit roles are synonyms, so when one is changed, the other changes with it. However, in setData() we only emitted a vector with just the role that was passed in by the user. Fix by always passing both roles, regardless of which one was used to set the data. Change-Id: I498e7cb33796fae266901817b01ad85d861d4bb4 Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'tests/auto/corelib')
-rw-r--r--tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp10
-rw-r--r--tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp45
2 files changed, 53 insertions, 2 deletions
diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
index 5928ee8688..4dd0b19ce8 100644
--- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
+++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp
@@ -2134,17 +2134,23 @@ void tst_QSortFilterProxyModel::changeSourceDataForwardsRoles_qtbug35440()
QModelIndex index;
+ // QStringListModel doesn't distinguish between edit and display roles,
+ // so changing one always changes the other, too.
+ QVector<int> expectedChangedRoles;
+ expectedChangedRoles.append(Qt::DisplayRole);
+ expectedChangedRoles.append(Qt::EditRole);
+
index = model.index(0, 0);
QVERIFY(index.isValid());
model.setData(index, QStringLiteral("teststring"), Qt::DisplayRole);
QCOMPARE(spy.length(), 1);
- QCOMPARE(spy.at(0).at(2).value<QVector<int> >(), QVector<int>() << Qt::DisplayRole);
+ QCOMPARE(spy.at(0).at(2).value<QVector<int> >(), expectedChangedRoles);
index = model.index(1, 0);
QVERIFY(index.isValid());
model.setData(index, QStringLiteral("teststring2"), Qt::EditRole);
QCOMPARE(spy.length(), 2);
- QCOMPARE(spy.at(1).at(2).value<QVector<int> >(), QVector<int>() << Qt::EditRole);
+ QCOMPARE(spy.at(1).at(2).value<QVector<int> >(), expectedChangedRoles);
}
void tst_QSortFilterProxyModel::sortFilterRole()
diff --git a/tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp b/tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp
index 53f3d9c0a2..60952616d5 100644
--- a/tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp
+++ b/tests/auto/corelib/itemmodels/qstringlistmodel/tst_qstringlistmodel.cpp
@@ -40,6 +40,8 @@
#include "qmodellistener.h"
#include <qstringlistmodel.h>
+#include <algorithm>
+
void QModelListener::rowsAboutToBeRemovedOrInserted(const QModelIndex & parent, int start, int end )
{
for (int i = 0; start + i <= end; i++) {
@@ -80,6 +82,9 @@ private slots:
void rowsAboutToBeInserted_rowsInserted();
void rowsAboutToBeInserted_rowsInserted_data();
+
+ void setData_emits_both_roles_data();
+ void setData_emits_both_roles();
};
void tst_QStringListModel::rowsAboutToBeRemoved_rowsRemoved_data()
@@ -216,5 +221,45 @@ void tst_QStringListModel::rowsAboutToBeInserted_rowsInserted()
delete model;
}
+void tst_QStringListModel::setData_emits_both_roles_data()
+{
+ QTest::addColumn<int>("row");
+ QTest::addColumn<QString>("data");
+ QTest::addColumn<int>("role");
+
+#define ROW(row, string, role) \
+ QTest::newRow(#row " -> " string) << row << QString(string) << int(Qt::role)
+ ROW(0, "1", EditRole);
+ ROW(1, "2", DisplayRole);
+#undef ROW
+}
+
+template <class C>
+C sorted(C c)
+{
+ std::sort(c.begin(), c.end());
+ return qMove(c);
+}
+
+void tst_QStringListModel::setData_emits_both_roles()
+{
+ QFETCH(int, row);
+ QFETCH(QString, data);
+ QFETCH(int, role);
+
+ QStringListModel model(QStringList() << "one" << "two");
+ QVector<int> expected;
+ expected.reserve(2);
+ expected.append(Qt::DisplayRole);
+ expected.append(Qt::EditRole);
+
+ QSignalSpy spy(&model, &QAbstractItemModel::dataChanged);
+ QVERIFY(spy.isValid());
+ model.setData(model.index(row, 0), data, role);
+ QCOMPARE(spy.size(), 1);
+ QCOMPARE(sorted(spy.at(0).at(2).value<QVector<int> >()),
+ expected);
+}
+
QTEST_MAIN(tst_QStringListModel)
#include "tst_qstringlistmodel.moc"