diff options
Diffstat (limited to 'tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp')
-rw-r--r-- | tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp | 57 |
1 files changed, 48 insertions, 9 deletions
diff --git a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp index d40ccebefc..d3407de53b 100644 --- a/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp +++ b/tests/auto/sql/models/qsqltablemodel/tst_qsqltablemodel.cpp @@ -85,6 +85,8 @@ private slots: void submitAll(); void setRecord_data() { generic_data(); } void setRecord(); + void setRecordReimpl_data() { generic_data(); } + void setRecordReimpl(); void insertRow_data() { generic_data_with_strategies(); } void insertRow(); void insertRowFailure_data() { generic_data_with_strategies(); } @@ -505,24 +507,28 @@ void tst_QSqlTableModel::setRecord() rec.setValue(2, rec.value(2).toString() + 'X'); QVERIFY(model.setRecord(i, rec)); + // dataChanged() emitted by setData() for each *changed* column if ((QSqlTableModel::EditStrategy)submitpolicy == QSqlTableModel::OnManualSubmit) { - // setRecord should emit dataChanged() itself for manualSubmit - QCOMPARE(spy.count(), 1); + QCOMPARE(spy.count(), 2); QCOMPARE(spy.at(0).count(), 2); - QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(0)), model.index(i, 0)); - QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(1)), model.index(i, rec.count() - 1)); + QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(0)), model.index(i, 1)); + QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(1)), model.index(i, 1)); + QCOMPARE(qvariant_cast<QModelIndex>(spy.at(1).at(0)), model.index(i, 2)); + QCOMPARE(qvariant_cast<QModelIndex>(spy.at(1).at(1)), model.index(i, 2)); QVERIFY(model.submitAll()); } else if ((QSqlTableModel::EditStrategy)submitpolicy == QSqlTableModel::OnRowChange && i == model.rowCount() -1) model.submit(); else { - // dataChanged() emitted by selectRow() as well as setRecord() if ((QSqlTableModel::EditStrategy)submitpolicy != QSqlTableModel::OnManualSubmit) - QCOMPARE(spy.count(), 2); + // dataChanged() also emitted by selectRow() + QCOMPARE(spy.count(), 3); else - QCOMPARE(spy.count(), 1); + QCOMPARE(spy.count(), 2); QCOMPARE(spy.at(0).count(), 2); - QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(0)), model.index(i, 0)); - QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(1)), model.index(i, rec.count() - 1)); + QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(0)), model.index(i, 1)); + QCOMPARE(qvariant_cast<QModelIndex>(spy.at(0).at(1)), model.index(i, 1)); + QCOMPARE(qvariant_cast<QModelIndex>(spy.at(1).at(0)), model.index(i, 2)); + QCOMPARE(qvariant_cast<QModelIndex>(spy.at(1).at(1)), model.index(i, 2)); } } @@ -535,6 +541,39 @@ void tst_QSqlTableModel::setRecord() } } +class SetRecordReimplModel: public QSqlTableModel +{ + Q_OBJECT +public: + SetRecordReimplModel(QObject *parent, QSqlDatabase db):QSqlTableModel(parent, db) {} + bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) + { + return QSqlTableModel::setData(index, QString("Qt"), role); + } +}; + +void tst_QSqlTableModel::setRecordReimpl() +{ + QFETCH(QString, dbName); + QSqlDatabase db = QSqlDatabase::database(dbName); + CHECK_DATABASE(db); + SetRecordReimplModel model(0, db); + model.setEditStrategy(QSqlTableModel::OnManualSubmit); + model.setTable(test3); + model.setSort(0, Qt::AscendingOrder); + QVERIFY_SQL(model, select()); + + // make sure that a reimplemented setData() affects setRecord() + QSqlRecord rec = model.record(0); + rec.setValue(1, QString("x")); + rec.setValue(2, QString("y")); + QVERIFY(model.setRecord(0, rec)); + + rec = model.record(0); + QCOMPARE(rec.value(1).toString(), QString("Qt")); + QCOMPARE(rec.value(2).toString(), QString("Qt")); +} + void tst_QSqlTableModel::insertRow() { QFETCH(QString, dbName); |