summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorVolker Hilsheimer <[email protected]>2025-07-02 23:59:21 +0200
committerVolker Hilsheimer <[email protected]>2025-07-03 23:11:37 +0200
commit22effeae2ca4565ad537ac95f638754a92afcf72 (patch)
treeefb981d721a3e57c15f7f6c98f252d65fe227149 /tests/auto
parentb6faf63995b63d5958cf4b95ad1e9bab17d1bc6d (diff)
QRangeModel: consistently call roleNames() through the vtable
Calling the implementation of roleNames() directly breaks overrides, as we get inconsistent results. Add a testcase that verifies that we can call setData and itemData on a list of QObject subclasses. Pick-to: 6.10 Change-Id: Ia4fc7859bf9136a6c3452e1317a856c790916315 Reviewed-by: Fabian Kosmale <[email protected]>
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp b/tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp
index 5a49d9cf024..878fd173675 100644
--- a/tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp
+++ b/tests/auto/corelib/itemmodels/qrangemodel/tst_qrangemodel.cpp
@@ -286,6 +286,7 @@ private slots:
void ranges();
void json();
void ownership();
+ void overrideRoleNames();
void dimensions_data() { createTestData(); }
void dimensions();
@@ -1008,6 +1009,45 @@ void tst_QRangeModel::ownership()
}
}
+void tst_QRangeModel::overrideRoleNames()
+{
+ // verify that an overridden roleNames() gets called consistently
+ class RoleModel : public QRangeModel
+ {
+ public:
+ RoleModel() : QRangeModel(QList<SingleColumn<Object *>>{
+ new Object,
+ new Object,
+ new Object,
+ }) {
+ }
+
+ QHash<int, QByteArray> roleNames() const override
+ {
+ return {
+ {Qt::UserRole, "string"},
+ {Qt::UserRole + 1, "number"}
+ };
+ }
+ };
+
+ RoleModel model;
+ const QList<int> expectedKeys = {Qt::UserRole, Qt::UserRole + 1};
+ QCOMPARE(model.roleNames().size(), expectedKeys.size());
+
+ const QModelIndex index = model.index(0, 0);
+ QVERIFY(model.setData(index, "string value", Qt::UserRole));
+ QVERIFY(model.setData(index, 42, Qt::UserRole + 1));
+ QVERIFY(!model.setData(index, "display"));
+
+ const auto itemData = model.itemData(index);
+ QCOMPARE(itemData.keys(), expectedKeys);
+ QCOMPARE(itemData.value(Qt::UserRole), "string value");
+ QCOMPARE(itemData.value(Qt::UserRole + 1), 42);
+
+ QVERIFY(model.setItemData(model.index(1, 0), itemData));
+}
+
void tst_QRangeModel::dimensions()
{
QFETCH(Factory, factory);