diff --git a/tests/auto/corelib/platform/androiditemmodel/testdata/src/org/qtproject/qt/android/tests/TestQtAbstractItemModel.java b/tests/auto/corelib/platform/androiditemmodel/testdata/src/org/qtproject/qt/android/tests/TestQtAbstractItemModel.java index bd4884c3fa2..5ac40ee657f 100644 --- a/tests/auto/corelib/platform/androiditemmodel/testdata/src/org/qtproject/qt/android/tests/TestQtAbstractItemModel.java +++ b/tests/auto/corelib/platform/androiditemmodel/testdata/src/org/qtproject/qt/android/tests/TestQtAbstractItemModel.java @@ -10,10 +10,17 @@ import java.util.List; import org.qtproject.qt.android.QtAbstractItemModel; import org.qtproject.qt.android.QtModelIndex; -public class TestQtAbstractItemModel extends QtAbstractItemModel +public class TestQtAbstractItemModel + extends QtAbstractItemModel implements QtAbstractItemModel.OnDataChangedListener { int m_rows = 0; int m_cols = 0; + int m_dataChangedCount = 0; + + public TestQtAbstractItemModel() + { + setOnDataChangedListener(this); + } @Override public int columnCount(QtModelIndex parent) @@ -92,6 +99,18 @@ public class TestQtAbstractItemModel extends QtAbstractItemModel endInsertRows(); } + @Override + public boolean setData(QtModelIndex index, Object value, int role) + { + dataChanged(index, index , new int[]{role}); + return true; + } + + @Override + public void onDataChanged(QtModelIndex topLeft, QtModelIndex bottomRight, int[] roles) { + m_dataChangedCount++; + } + public void addRow() { beginInsertRows(new QtModelIndex(), m_rows, m_rows); @@ -130,5 +149,6 @@ public class TestQtAbstractItemModel extends QtAbstractItemModel m_rows = 0; m_cols = 0; endResetModel(); + m_dataChangedCount = 0; } } diff --git a/tests/auto/corelib/platform/androiditemmodel/testdata/src/org/qtproject/qt/android/tests/TestQtAbstractListModel.java b/tests/auto/corelib/platform/androiditemmodel/testdata/src/org/qtproject/qt/android/tests/TestQtAbstractListModel.java index d79a24cee23..cdefdba5a83 100644 --- a/tests/auto/corelib/platform/androiditemmodel/testdata/src/org/qtproject/qt/android/tests/TestQtAbstractListModel.java +++ b/tests/auto/corelib/platform/androiditemmodel/testdata/src/org/qtproject/qt/android/tests/TestQtAbstractListModel.java @@ -10,9 +10,16 @@ import java.util.List; import org.qtproject.qt.android.QtAbstractListModel; import org.qtproject.qt.android.QtModelIndex; -public class TestQtAbstractListModel extends QtAbstractListModel +public class TestQtAbstractListModel + extends QtAbstractListModel implements QtAbstractListModel.OnDataChangedListener { int m_rows = 0; + int m_dataChangedCount = 0; + + public TestQtAbstractListModel() + { + setOnDataChangedListener(this); + } @Override public Object data(QtModelIndex index, int role) { @@ -65,6 +72,18 @@ public class TestQtAbstractListModel extends QtAbstractListModel endInsertRows(); } + @Override + public boolean setData(QtModelIndex index, Object value, int role) + { + dataChanged(index, index , new int[]{role}); + return true; + } + + @Override + public void onDataChanged(QtModelIndex topLeft, QtModelIndex bottomRight, int[] roles) { + m_dataChangedCount++; + } + public void addRow() { beginInsertRows(new QtModelIndex(), m_rows, m_rows); @@ -86,5 +105,6 @@ public class TestQtAbstractListModel extends QtAbstractListModel beginResetModel(); m_rows = 0; endResetModel(); + m_dataChangedCount = 0; } } diff --git a/tests/auto/corelib/platform/androiditemmodel/tst_androiditemmodel.cpp b/tests/auto/corelib/platform/androiditemmodel/tst_androiditemmodel.cpp index b0043e5affc..2b691e759ad 100644 --- a/tests/auto/corelib/platform/androiditemmodel/tst_androiditemmodel.cpp +++ b/tests/auto/corelib/platform/androiditemmodel/tst_androiditemmodel.cpp @@ -12,6 +12,7 @@ #include #include #include +#include using namespace Qt::Literals; @@ -39,6 +40,8 @@ private slots: void fetchMore(); void hasIndex(); void data(); + void setData_data(); + void setData(); }; void tst_AndroidItemModel::initTestCase_data() @@ -204,6 +207,55 @@ void tst_AndroidItemModel::data() } } +void tst_AndroidItemModel::setData_data() +{ + QTest::addColumn("row"); + QTest::addColumn("column"); + QTest::addColumn("role"); + + QTest::newRow("role0") << 0 << 0 << 0; + QTest::newRow("role1") << 0 << 0 << 1; + QTest::newRow("role2") << 0 << 0 << 2; +} + +void tst_AndroidItemModel::setData() +{ + QFETCH_GLOBAL(bool, isList); + QFETCH(int, row); + QFETCH(int, column); + QFETCH(int, role); + + jboolean success = false; + QSignalSpy spy( + qProxy, + SIGNAL(dataChanged(const QModelIndex &, const QModelIndex &, const QList &))); + + jModel.callMethod("addRow"); + if (!isList) + jModel.callMethod("addCol"); + + QCOMPARE_EQ(qProxy->rowCount(), 1); + QCOMPARE_EQ(qProxy->columnCount(), 1); + + JQtModelIndex index = jModel.callMethod("index", row, column, JQtModelIndex()); + QVERIFY(jModel.callMethod("setData", index, QJniObject(Void()), role)); + QTRY_COMPARE_WITH_TIMEOUT(spy.count(), 1, 50); + + const QList arguments = spy.takeFirst(); + QCOMPARE(arguments.size(), 3); + + const auto topLeft = qvariant_cast(arguments.at(0)); + const auto bottomRight = qvariant_cast(arguments.at(1)); + const auto roles = qvariant_cast>(arguments.at(2)); + + QCOMPARE(topLeft, qProxy->index(row, column, QModelIndex())); + QCOMPARE(bottomRight, qProxy->index(row, column, QModelIndex())); + QCOMPARE(roles, QList{role}); + + jint jDataChangedCount = jModel.getField("m_dataChangedCount"); + QTRY_COMPARE_WITH_TIMEOUT(jDataChangedCount, 1, 50); +} + void tst_AndroidItemModel::resetModel() { jModel.callMethod("reset");