diff options
Diffstat (limited to 'tests/auto/corelib/itemmodels')
5 files changed, 148 insertions, 28 deletions
diff --git a/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp b/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp index 64170b15dd..c4d2df7c3e 100644 --- a/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp +++ b/tests/auto/corelib/itemmodels/qabstractitemmodel/tst_qabstractitemmodel.cpp @@ -379,7 +379,7 @@ void tst_QAbstractItemModel::hasChildren() { QtTestModel model(1, 1); QModelIndex idx = model.index(0, 0, QModelIndex()); - QVERIFY(model.hasChildren(idx) == false); + QVERIFY(!model.hasChildren(idx)); } void tst_QAbstractItemModel::data() diff --git a/tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp b/tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp index ba143a31f8..e0e688cc3a 100644 --- a/tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp +++ b/tests/auto/corelib/itemmodels/qitemmodel/modelstotest.cpp @@ -78,6 +78,9 @@ public: QList<test> tests; static void setupDatabase(); + +private: + QScopedPointer<QTemporaryDir> m_dirModelTempDir; }; @@ -306,18 +309,20 @@ QModelIndex ModelsToTest::populateTestArea(QAbstractItemModel *model) } if (QDirModel *dirModel = qobject_cast<QDirModel *>(model)) { - if (!QDir::current().mkdir("test")) - qFatal("%s: cannot create directory %s", - Q_FUNC_INFO, - qPrintable(QDir::toNativeSeparators(QDir::currentPath()+"/test"))); + m_dirModelTempDir.reset(new QTemporaryDir); + if (!m_dirModelTempDir->isValid()) + qFatal("Cannot create temporary directory \"%s\": %s", + qPrintable(QDir::toNativeSeparators(m_dirModelTempDir->path())), + qPrintable(m_dirModelTempDir->errorString())); + + QDir tempDir(m_dirModelTempDir->path()); for (int i = 0; i < 26; ++i) { - QString subdir = QString("test/foo_%1").arg(i); - if (!QDir::current().mkdir(subdir)) - qFatal("%s: cannot create directory %s", - Q_FUNC_INFO, - qPrintable(QDir::toNativeSeparators(QDir::currentPath()+"/"+subdir))); + const QString subdir = QString("foo_") + QString::number(i); + if (!tempDir.mkdir(subdir)) + qFatal("Cannot create directory %s", + qPrintable(QDir::toNativeSeparators(tempDir.path() + QLatin1Char('/') +subdir))); } - return dirModel->index(QDir::currentPath()+"/test"); + return dirModel->index(tempDir.path()); } if (QSqlQueryModel *queryModel = qobject_cast<QSqlQueryModel *>(model)) { @@ -382,22 +387,8 @@ QModelIndex ModelsToTest::populateTestArea(QAbstractItemModel *model) */ void ModelsToTest::cleanupTestArea(QAbstractItemModel *model) { - if (qobject_cast<QDirModel *>(model)) - { - if (QDir(QDir::currentPath()+"/test").exists()) - { - for (int i = 0; i < 26; ++i) { - QString subdir(QString("test/foo_%1").arg(i)); - if (!QDir::current().rmdir(subdir)) - qFatal("%s: cannot remove directory %s", - Q_FUNC_INFO, - qPrintable(QDir::toNativeSeparators(QDir::currentPath()+"/"+subdir))); - } - if (!QDir::current().rmdir("test")) - qFatal("%s: cannot remove directory %s", - Q_FUNC_INFO, - qPrintable(QDir::toNativeSeparators(QDir::currentPath()+"/test"))); - } + if (qobject_cast<QDirModel *>(model)) { + m_dirModelTempDir.reset(); } else if (qobject_cast<QSqlQueryModel *>(model)) { QSqlQuery q("DROP TABLE test"); } diff --git a/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp b/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp index 709b35b6e0..6971f7ef78 100644 --- a/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp +++ b/tests/auto/corelib/itemmodels/qitemmodel/tst_qitemmodel.cpp @@ -49,6 +49,9 @@ class tst_QItemModel : public QObject { Q_OBJECT +public: + tst_QItemModel(); + public slots: void init(); void cleanup(); @@ -124,6 +127,11 @@ private: bool insertRecursively; }; +tst_QItemModel::tst_QItemModel() +{ + qRegisterMetaType<QAbstractItemModel::LayoutChangeHint>(); +} + void tst_QItemModel::init() { testModels = new ModelsToTest(); diff --git a/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp b/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp index 8d331389f5..38e2900c25 100644 --- a/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp +++ b/tests/auto/corelib/itemmodels/qitemselectionmodel/tst_qitemselectionmodel.cpp @@ -94,6 +94,9 @@ private slots: void testChainedSelectionClear(); void testClearCurrentIndex(); + void QTBUG48402_data(); + void QTBUG48402(); + private: QAbstractItemModel *model; QItemSelectionModel *selection; @@ -1530,7 +1533,7 @@ void tst_QItemSelectionModel::resetModel() model.reset(); QVERIFY(selectionModel->selection().isEmpty()); - QVERIFY(selectionModel->hasSelection() == false); + QVERIFY(!selectionModel->hasSelection()); selectionModel->select(QItemSelection(model.index(0, 0), model.index(5, 5)), QItemSelectionModel::Select); @@ -2756,5 +2759,96 @@ void tst_QItemSelectionModel::testClearCurrentIndex() QVERIFY(currentIndexSpy.size() == 2); } +void tst_QItemSelectionModel::QTBUG48402_data() +{ + QTest::addColumn<int>("rows"); + QTest::addColumn<int>("columns"); + + QTest::addColumn<int>("selectTop"); + QTest::addColumn<int>("selectLeft"); + QTest::addColumn<int>("selectBottom"); + QTest::addColumn<int>("selectRight"); + + QTest::addColumn<int>("removeTop"); + QTest::addColumn<int>("removeBottom"); + + QTest::addColumn<int>("deselectTop"); + QTest::addColumn<int>("deselectLeft"); + QTest::addColumn<int>("deselectBottom"); + QTest::addColumn<int>("deselectRight"); + + QTest::newRow("4x4 top intersection") + << 4 << 4 + << 0 << 2 << 1 << 3 + << 1 << 1 + << 1 << 2 << 1 << 3; + + QTest::newRow("4x4 bottom intersection") + << 4 << 4 + << 0 << 2 << 1 << 3 + << 0 << 0 + << 0 << 2 << 0 << 3; + + QTest::newRow("4x4 middle intersection") + << 4 << 4 + << 0 << 2 << 2 << 3 + << 1 << 1 + << 1 << 2 << 1 << 3; + + QTest::newRow("4x4 full inclusion") + << 4 << 4 + << 0 << 2 << 1 << 3 + << 0 << 1 + << 0 << 2 << 1 << 3; +} +class QTBUG48402_helper : public QObject +{ + Q_OBJECT +public: + QModelIndex tl; + QModelIndex br; +public slots: + void changed(const QItemSelection &, const QItemSelection &deselected) + { + tl = deselected.first().topLeft(); + br = deselected.first().bottomRight(); + } +}; + +void tst_QItemSelectionModel::QTBUG48402() +{ + QFETCH(int, rows); + QFETCH(int, columns); + QFETCH(int, selectTop); + QFETCH(int, selectLeft); + QFETCH(int, selectBottom); + QFETCH(int, selectRight); + QFETCH(int, removeTop); + QFETCH(int, removeBottom); + QFETCH(int, deselectTop); + QFETCH(int, deselectLeft); + QFETCH(int, deselectBottom); + QFETCH(int, deselectRight); + + MyStandardItemModel model(rows, columns); + QItemSelectionModel selections(&model); + + QModelIndex stl = model.index(selectTop, selectLeft); + QModelIndex sbr = model.index(selectBottom, selectRight); + QModelIndex dtl = model.index(deselectTop, deselectLeft); + QModelIndex dbr = model.index(deselectBottom, deselectRight); + + selections.select(QItemSelection(stl, sbr), QItemSelectionModel::ClearAndSelect); + QTBUG48402_helper helper; + helper.connect(&selections, &QItemSelectionModel::selectionChanged, &helper, &QTBUG48402_helper::changed); + QVERIFY(selections.isSelected(stl)); + QVERIFY(selections.isSelected(sbr)); + QVERIFY(selections.hasSelection()); + + model.removeRows(removeTop, removeBottom - removeTop + 1); + + QCOMPARE(QItemSelectionRange(helper.tl, helper.br), QItemSelectionRange(dtl, dbr)); +} + QTEST_MAIN(tst_QItemSelectionModel) #include "tst_qitemselectionmodel.moc" diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp index 1c30adc8de..0302ae5cbf 100644 --- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp +++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp @@ -87,6 +87,7 @@ private slots: void filter_qtbug30662(); void changeSourceLayout(); + void changeSourceLayoutFilteredOut(); void removeSourceRows_data(); void removeSourceRows(); void insertSourceRows_data(); @@ -1533,6 +1534,32 @@ void tst_QSortFilterProxyModel::changeSourceLayout() } } +void tst_QSortFilterProxyModel::changeSourceLayoutFilteredOut() +{ + QStandardItemModel model(2, 1); + model.setData(model.index(0, 0), QString("b")); + model.setData(model.index(1, 0), QString("a")); + QSortFilterProxyModel proxy; + proxy.setSourceModel(&model); + + int beforeSortFilter = proxy.rowCount(); + + QSignalSpy removeSpy(&proxy, &QSortFilterProxyModel::rowsRemoved); + // Filter everything out + proxy.setFilterRegExp(QRegExp("c")); + QCOMPARE(removeSpy.count(), 1); + QCOMPARE(0, proxy.rowCount()); + + // change layout of source model + model.sort(0, Qt::AscendingOrder); + + QSignalSpy insertSpy(&proxy, &QSortFilterProxyModel::rowsInserted); + // Remove filter; we expect an insert + proxy.setFilterRegExp(QRegExp("")); + QCOMPARE(insertSpy.count(), 1); + QCOMPARE(beforeSortFilter, proxy.rowCount()); +} + void tst_QSortFilterProxyModel::removeSourceRows_data() { QTest::addColumn<QStringList>("sourceItems"); |