diff options
Diffstat (limited to 'tests/auto/widgets/itemviews')
12 files changed, 309 insertions, 32 deletions
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp index 58a66f99b4..45c86800d6 100644 --- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp +++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp @@ -1217,6 +1217,9 @@ void tst_QAbstractItemView::task250754_fontChange() font.setPixelSize(60); tree.setFont(font); +#ifdef Q_OS_WINRT + QSKIP("Resizing the widget does not work as expected for WinRT, so the scroll bar might not be visible"); +#endif //now with the huge items, the scrollbar must be visible QTRY_VERIFY(tree.verticalScrollBar()->isVisible()); @@ -1534,6 +1537,9 @@ void tst_QAbstractItemView::testClickedSignal() QSignalSpy clickedSpy(&view, SIGNAL(clicked(QModelIndex))); QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Fails on WinRT - QTBUG-68297", Abort); +#endif QCOMPARE(clickedSpy.count(), 1); QTest::mouseClick(view.viewport(), Qt::RightButton, 0, p); @@ -2257,6 +2263,9 @@ void tst_QAbstractItemView::QTBUG46785_mouseout_hover_state() QTest::mouseMove(table.viewport(), QPoint(-50, 0)); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "QTest::mouseMove does not work on WinRT", Abort); +#endif QTRY_VERIFY(delegate.m_paintedWithoutHover); } diff --git a/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp b/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp index 58b34e8aea..c58dbf599c 100644 --- a/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp +++ b/tests/auto/widgets/itemviews/qcolumnview/tst_qcolumnview.cpp @@ -948,8 +948,10 @@ void tst_QColumnView::parentCurrentIndex() QTRY_COMPARE(view.createdColumns[0]->currentIndex(), first); QTRY_COMPARE(view.createdColumns[1]->currentIndex(), second); +#ifndef Q_OS_WINRT // The next two lines should be removed when QTBUG-22707 is resolved. QEXPECT_FAIL("", "QTBUG-22707", Abort); +#endif QVERIFY(view.createdColumns[2]); QTRY_COMPARE(view.createdColumns[2]->currentIndex(), third); diff --git a/tests/auto/widgets/itemviews/qdirmodel/tst_qdirmodel.cpp b/tests/auto/widgets/itemviews/qdirmodel/tst_qdirmodel.cpp index 48d39bbb11..d401154228 100644 --- a/tests/auto/widgets/itemviews/qdirmodel/tst_qdirmodel.cpp +++ b/tests/auto/widgets/itemviews/qdirmodel/tst_qdirmodel.cpp @@ -314,6 +314,9 @@ void tst_QDirModel::mkdir() model.setReadOnly(false); QModelIndex parent = model.index(SRCDIR "dirtest"); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Sandboxed applications cannot access SRCDIR - QTBUG-68297", Abort); +#endif QVERIFY(parent.isValid()); QCOMPARE(model.rowCount(parent), 1); // start out with only 'test1' - in's in the depot @@ -351,6 +354,9 @@ void tst_QDirModel::rmdir() model.setReadOnly(false); QModelIndex parent = model.index(SRCDIR "/dirtest"); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Sandboxed applications cannot access SRCDIR - QTBUG-68297", Abort); +#endif QVERIFY(parent.isValid()); QCOMPARE(model.rowCount(parent), 1); // start out with only 'test1' - in's in the depot @@ -460,6 +466,9 @@ bool tst_QDirModel::rowsAboutToBeRemoved_cleanup(const QString &test_path) void tst_QDirModel::rowsAboutToBeRemoved() { +#ifdef Q_OS_WINRT + QSKIP("Test fails on WinRT - QTBUG-68297"); +#endif QFETCH(QString, test_path); QFETCH(QStringList, initial_files); QFETCH(int, remove_row); @@ -571,6 +580,9 @@ void tst_QDirModel::unreadable() void tst_QDirModel::filePath() { QFile::remove(SRCDIR "test.lnk"); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Sandboxed applications cannot access SRCDIR - QTBUG-68297", Abort); +#endif QVERIFY(QFile(SRCDIR "tst_qdirmodel.cpp").link(SRCDIR "test.lnk")); QDirModel model; model.setResolveSymlinks(false); @@ -629,6 +641,9 @@ void tst_QDirModel::filter() QDirModel model; model.setNameFilters(QStringList() << "*.nada"); QModelIndex index = model.index(SRCDIR "test"); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Sandboxed applications cannot access SRCDIR - QTBUG-68297", Abort); +#endif QCOMPARE(model.rowCount(index), 0); QModelIndex index2 = model.index(SRCDIR "test/file01.tst"); QVERIFY(!index2.isValid()); @@ -638,6 +653,9 @@ void tst_QDirModel::filter() void tst_QDirModel::task244669_remove() { QFile f1(SRCDIR "dirtest/f1.txt"); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "Sandboxed applications cannot access SRCDIR - QTBUG-68297", Abort); +#endif QVERIFY(f1.open(QIODevice::WriteOnly)); f1.close(); QFile f2(SRCDIR "dirtest/f2.txt"); diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp index 0dd98cf61c..b6932d4892 100644 --- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp +++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp @@ -244,7 +244,9 @@ private slots: void testMinMaxSectionSize_data(); void testMinMaxSectionSize(); void sizeHintCrash(); + void testResetCachedSizeHint(); void statusTips(); + protected: void setupTestData(bool use_reset_model = false); void additionalInit(); @@ -266,9 +268,9 @@ Q_OBJECT public: QtTestModel(QObject *parent = 0): QAbstractTableModel(parent), - cols(0), rows(0), wrongIndex(false) {} - int rowCount(const QModelIndex&) const { return rows; } - int columnCount(const QModelIndex&) const { return cols; } + cols(0), rows(0), wrongIndex(false), m_bMultiLine(false) {} + int rowCount(const QModelIndex&) const override { return rows; } + int columnCount(const QModelIndex&) const override { return cols; } bool isEditable(const QModelIndex &) const { return true; } QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const { @@ -280,11 +282,15 @@ public: return QVariant(); if (orientation == Qt::Horizontal && col >= cols) return QVariant(); + if (m_bMultiLine) + return QString("%1\n%1").arg(section); return QLatin1Char('[') + QString::number(row) + QLatin1Char(',') + QString::number(col) + QLatin1String(",0] -- Header"); } - QVariant data(const QModelIndex &idx, int) const + QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const override { + if (role != Qt::DisplayRole) + return QVariant(); if (idx.row() < 0 || idx.column() < 0 || idx.column() >= cols || idx.row() >= rows) { wrongIndex = true; qWarning("Invalid modelIndex [%d,%d,%p]", idx.row(), idx.column(), idx.internalPointer()); @@ -367,8 +373,16 @@ public: emit layoutChanged(); } + void setMultiLineHeader(bool bEnable) + { + beginResetModel(); + m_bMultiLine = bEnable; + endResetModel(); + } + int cols, rows; mutable bool wrongIndex; + bool m_bMultiLine; }; // Testing get/set functions @@ -391,6 +405,7 @@ void tst_QHeaderView::getSetCheck() // int QHeaderView::defaultSectionSize() // void QHeaderView::setDefaultSectionSize(int) + obj1.setMinimumSectionSize(0); obj1.setDefaultSectionSize(-1); QVERIFY(obj1.defaultSectionSize() >= 0); obj1.setDefaultSectionSize(0); @@ -657,6 +672,8 @@ void tst_QHeaderView::sectionSize() { #if defined Q_OS_QNX QSKIP("The section size is dpi dependent on QNX"); +#elif defined Q_OS_WINRT + QSKIP("Fails on WinRT - QTBUG-68297"); #endif QFETCH(QList<int>, boundsCheck); QFETCH(QList<int>, defaultSizes); @@ -761,6 +778,8 @@ void tst_QHeaderView::visualIndexAt() { #if defined Q_OS_QNX QSKIP("The section size is dpi dependent on QNX"); +#elif defined Q_OS_WINRT + QSKIP("Fails on WinRT - QTBUG-68297"); #endif QFETCH(QList<int>, hidden); QFETCH(QList<int>, from); @@ -830,11 +849,9 @@ void tst_QHeaderView::offset() void tst_QHeaderView::sectionSizeHint() { - // Test bad arguments - view->sectionSizeHint(-1); - view->sectionSizeHint(99999); - - // TODO how to test the return value? + QCOMPARE(view->sectionSizeHint(-1), -1); + QCOMPARE(view->sectionSizeHint(99999), -1); + QVERIFY(view->sectionSizeHint(0) >= 0); } void tst_QHeaderView::logicalIndex() @@ -2044,6 +2061,7 @@ void tst_QHeaderView::defaultSectionSize() QHeaderView h((Qt::Orientation)direction); h.setModel(&m); + h.setMinimumSectionSize(0); QCOMPARE(h.defaultSectionSize(), oldDefaultSize); h.setDefaultSectionSize(newDefaultSize); @@ -2144,6 +2162,9 @@ void tst_QHeaderView::preserveHiddenSectionWidth() void tst_QHeaderView::invisibleStretchLastSection() { +#ifdef Q_OS_WINRT + QSKIP("Fails on WinRT - QTBUG-68297"); +#endif int count = 6; QStandardItemModel model(1, count); QHeaderView view(Qt::Horizontal); @@ -2281,6 +2302,7 @@ void tst_QHeaderView::QTBUG6058_reset() QHeaderView view(Qt::Vertical); view.setModel(&proxy); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); proxy.setSourceModel(&model1); @@ -3306,8 +3328,16 @@ void tst_QHeaderView::testMinMaxSectionSize() QHeaderView &header = *tv.horizontalHeader(); header.setMinimumSectionSize(sectionSizeMin); header.setMaximumSectionSize(sectionSizeMax); + // check bounds for default section size + header.setDefaultSectionSize(sectionSizeMin - 1); + QCOMPARE(header.defaultSectionSize(), sectionSizeMin); + header.setDefaultSectionSize(sectionSizeMax + 1); + QCOMPARE(header.defaultSectionSize(), sectionSizeMax); + header.setDefaultSectionSize(defaultSectionSize); + QCOMPARE(header.defaultSectionSize(), defaultSectionSize); header.setStretchLastSection(stretchLastSection); + QCOMPARE(header.stretchLastSection(), stretchLastSection); // check defaults QCOMPARE(header.sectionSize(0), defaultSectionSize); @@ -3338,6 +3368,26 @@ void tst_QHeaderView::testMinMaxSectionSize() QTRY_COMPARE(header.sectionSize(0), defaultSectionSize); } +void tst_QHeaderView::testResetCachedSizeHint() +{ + QtTestModel model; + model.rows = model.cols = 10; + + QTableView tv; + tv.setModel(&model); + tv.show(); + QVERIFY(QTest::qWaitForWindowExposed(&tv)); + + QSize s1 = tv.horizontalHeader()->sizeHint(); + model.setMultiLineHeader(true); + QSize s2 = tv.horizontalHeader()->sizeHint(); + model.setMultiLineHeader(false); + QSize s3 = tv.horizontalHeader()->sizeHint(); + QCOMPARE(s1, s3); + QVERIFY(s1 != s2); +} + + class StatusTipHeaderView : public QHeaderView { public: @@ -3372,7 +3422,7 @@ void tst_QHeaderView::statusTips() // Ensure it is moved away first and then moved to the relevant section QTest::mouseMove(QApplication::desktop(), headerView.rect().bottomLeft() + QPoint(20, 20)); - QPoint centerPoint = QRect(headerView.sectionPosition(0), headerView.y(), + QPoint centerPoint = QRect(headerView.sectionPosition(0), 0, headerView.sectionSize(0), headerView.height()).center(); QTest::mouseMove(headerView.windowHandle(), centerPoint); QTRY_VERIFY(headerView.gotStatusTipEvent); @@ -3380,7 +3430,7 @@ void tst_QHeaderView::statusTips() headerView.gotStatusTipEvent = false; headerView.statusTipText.clear(); - centerPoint = QRect(headerView.sectionPosition(1), headerView.y(), + centerPoint = QRect(headerView.sectionPosition(1), 0, headerView.sectionSize(1), headerView.height()).center(); QTest::mouseMove(headerView.windowHandle(), centerPoint); QTRY_VERIFY(headerView.gotStatusTipEvent); diff --git a/tests/auto/widgets/itemviews/qitemview/BLACKLIST b/tests/auto/widgets/itemviews/qitemview/BLACKLIST new file mode 100644 index 0000000000..d5fc89f204 --- /dev/null +++ b/tests/auto/widgets/itemviews/qitemview/BLACKLIST @@ -0,0 +1,2 @@ +[scrollTo] +winrt diff --git a/tests/auto/widgets/itemviews/qlistview/qlistview.pro b/tests/auto/widgets/itemviews/qlistview/qlistview.pro index e49a0c5fbf..75f45ab432 100644 --- a/tests/auto/widgets/itemviews/qlistview/qlistview.pro +++ b/tests/auto/widgets/itemviews/qlistview/qlistview.pro @@ -3,4 +3,3 @@ TARGET = tst_qlistview QT += widgets gui-private widgets-private core-private testlib testlib-private SOURCES += tst_qlistview.cpp win32:!winrt: LIBS += -luser32 -linux*: CONFIG += insignificant_test # Crashes diff --git a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp index d0c9dae313..5227db64ec 100644 --- a/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp +++ b/tests/auto/widgets/itemviews/qlistview/tst_qlistview.cpp @@ -149,6 +149,8 @@ private slots: void taskQTBUG_7232_AllowUserToControlSingleStep(); void taskQTBUG_51086_skippingIndexesInSelectedIndexes(); void taskQTBUG_47694_indexOutOfBoundBatchLayout(); + void itemAlignment(); + void internalDragDropMove(); }; // Testing get/set functions @@ -1462,6 +1464,9 @@ void tst_QListView::wordWrap() QApplication::processEvents(); QTRY_COMPARE(lv.horizontalScrollBar()->isVisible(), false); +#ifdef Q_OS_WINRT +QSKIP("setFixedSize does not work on WinRT. Vertical scroll bar will not be visible."); +#endif QTRY_COMPARE(lv.verticalScrollBar()->isVisible(), true); } @@ -2083,6 +2088,9 @@ void tst_QListView::taskQTBUG_21115_scrollToAndHiddenItems_data() void tst_QListView::taskQTBUG_21115_scrollToAndHiddenItems() { QFETCH(int, flow); +#ifdef Q_OS_WINRT + QSKIP("Fails on WinRT - QTBUG-68297"); +#endif ScrollPerItemListView lv; lv.setUniformItemSizes(true); @@ -2293,6 +2301,9 @@ void tst_QListView::testScrollToWithHidden() lv.scrollTo(model.index(26, 0)); int expectedScrollBarValue = lv.verticalScrollBar()->value(); +#ifdef Q_OS_WINRT + QSKIP("Might fail on WinRT - QTBUG-68297"); +#endif QVERIFY(expectedScrollBarValue != 0); lv.scrollTo(model.index(25, 0)); @@ -2419,6 +2430,7 @@ void tst_QListView::taskQTBUG_39902_mutualScrollBars() void tst_QListView::horizontalScrollingByVerticalWheelEvents() { +#if QT_CONFIG(wheelevent) QListView lv; lv.setWrapping(true); @@ -2460,6 +2472,9 @@ void tst_QListView::horizontalScrollingByVerticalWheelEvents() int vValue = lv.verticalScrollBar()->value(); QApplication::sendEvent(lv.viewport(), &wheelDownEvent); QVERIFY(lv.verticalScrollBar()->value() > vValue); +#else + QSKIP("Built with --no-feature-wheelevent"); +#endif } void tst_QListView::taskQTBUG_7232_AllowUserToControlSingleStep() @@ -2540,5 +2555,76 @@ void tst_QListView::taskQTBUG_47694_indexOutOfBoundBatchLayout() view.scrollTo(model.index(batchSize - 1, 0)); } +void tst_QListView::itemAlignment() +{ + auto item1 = new QStandardItem("111"); + auto item2 = new QStandardItem("111111"); + QStandardItemModel model; + model.appendRow(item1); + model.appendRow(item2); + + QListView w; + w.setModel(&model); + w.setWrapping(true); + w.show(); + QVERIFY(QTest::qWaitForWindowExposed(&w)); + + QVERIFY(w.visualRect(item1->index()).width() > 0); + QVERIFY(w.visualRect(item1->index()).width() == w.visualRect(item2->index()).width()); + + w.setItemAlignment(Qt::AlignLeft); + QApplication::processEvents(); + + QVERIFY(w.visualRect(item1->index()).width() < w.visualRect(item2->index()).width()); +} + +void tst_QListView::internalDragDropMove() +{ + const QString platform(QGuiApplication::platformName().toLower()); + if (platform != QLatin1String("xcb")) + QSKIP("Need a window system with proper DnD support via injected mouse events"); + + // on an internal move, the item was deleted which should not happen + // see QTBUG-67440 + class QListViewWithPublicStartDrag : public QListView + { + public: + using QListView::startDrag; + }; + + QStandardItemModel data(0, 1); + QPixmap pixmap(32, 32); + for (int i = 0; i < 10; ++i) { + pixmap.fill(Qt::GlobalColor(i + 1)); + data.appendRow(new QStandardItem(QIcon(pixmap), QString::number(i))); + } + QItemSelectionModel selections(&data); + QListViewWithPublicStartDrag list; + list.setWindowTitle(QTest::currentTestFunction()); + list.setViewMode(QListView::IconMode); + list.setDefaultDropAction(Qt::MoveAction); + list.setModel(&data); + list.setSelectionModel(&selections); + list.resize(300, 300); + list.show(); + selections.select(data.index(1, 0), QItemSelectionModel::Select); + QVERIFY(QTest::qWaitForWindowExposed(&list)); + + // execute as soon as the eventloop is running again + // which is the case inside list.startDrag() + QTimer::singleShot(0, [&list]() + { + const QPoint pos = list.rect().center(); + QMouseEvent mouseMove(QEvent::MouseMove, pos, list.mapToGlobal(pos), Qt::NoButton, 0, 0); + QApplication::sendEvent(&list, &mouseMove); + QMouseEvent mouseRelease(QEvent::MouseButtonRelease, pos, list.mapToGlobal(pos), Qt::LeftButton, 0, 0); + QApplication::sendEvent(&list, &mouseRelease); + }); + const int expectedCount = data.rowCount(); + list.startDrag(Qt::MoveAction|Qt::CopyAction); + QCOMPARE(expectedCount, data.rowCount()); +} + + QTEST_MAIN(tst_QListView) #include "tst_qlistview.moc" diff --git a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp index 8427b04be7..e1ec38b4e7 100644 --- a/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp +++ b/tests/auto/widgets/itemviews/qtableview/tst_qtableview.cpp @@ -2329,6 +2329,14 @@ void tst_QTableView::rowViewportPosition() view.setVerticalScrollMode((QAbstractItemView::ScrollMode)verticalScrollMode); view.verticalScrollBar()->setValue(verticalScrollValue); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("row 1, scroll per item, 1", "Fails on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("row 5, scroll per item, 5", "Fails on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("row 9, scroll per item, 5", "Fails on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("row 1, scroll per pixel, 1", "Fails on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("row 5, scroll per pixel, 5", "Fails on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("row 9, scroll per pixel, 5", "Fails on WinRT - QTBUG-68297", Abort); +#endif QCOMPARE(view.rowViewportPosition(row), rowViewportPosition); } @@ -2492,6 +2500,13 @@ void tst_QTableView::columnViewportPosition() view.setHorizontalScrollMode((QAbstractItemView::ScrollMode)horizontalScrollMode); view.horizontalScrollBar()->setValue(horizontalScrollValue); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("column 5, scroll per item, 5", "Fails on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("column 9, scroll per item, 5", "Fails on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("column 1, scroll per pixel 1", "Fails on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("column 5, scroll per pixel 5", "Fails on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("column 9, scroll per pixel 5", "Fails on WinRT - QTBUG-68297", Abort); +#endif QCOMPARE(view.columnViewportPosition(column), columnViewportPosition); } diff --git a/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp b/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp index 4d4a95b3f5..208ce27c8f 100644 --- a/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp +++ b/tests/auto/widgets/itemviews/qtablewidget/tst_qtablewidget.cpp @@ -32,6 +32,7 @@ #include <qlist.h> #include <qpair.h> #include <qheaderview.h> +#include <qlineedit.h> #include <qtablewidget.h> @@ -81,6 +82,7 @@ private slots: void itemData(); void setItemData(); void cellWidget(); + void cellWidgetGeometry(); void task231094(); void task219380_removeLastRow(); void task262056_sortDuplicate(); @@ -1343,27 +1345,45 @@ void tst_QTableWidget::setItemWithSorting() } } +class QTableWidgetDataChanged : public QTableWidget +{ + Q_OBJECT +public: + using QTableWidget::QTableWidget; + + void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles) override + { + QTableWidget::dataChanged(topLeft, bottomRight, roles); + currentRoles = roles; + } + QVector<int> currentRoles; +}; + void tst_QTableWidget::itemData() { - QTableWidget widget(2, 2); + QTableWidgetDataChanged widget(2, 2); widget.setItem(0, 0, new QTableWidgetItem()); QTableWidgetItem *item = widget.item(0, 0); QVERIFY(item); item->setFlags(item->flags() | Qt::ItemIsEditable); item->setData(Qt::DisplayRole, QString("0")); + QCOMPARE(widget.currentRoles, QVector<int>({Qt::DisplayRole, Qt::EditRole})); item->setData(Qt::CheckStateRole, Qt::PartiallyChecked); - item->setData(Qt::UserRole + 0, QString("1")); - item->setData(Qt::UserRole + 1, QString("2")); - item->setData(Qt::UserRole + 2, QString("3")); - item->setData(Qt::UserRole + 3, QString("4")); + QCOMPARE(widget.currentRoles, {Qt::CheckStateRole}); + for (int i = 0; i < 4; ++i) + { + item->setData(Qt::UserRole + i, QString::number(i + 1)); + QCOMPARE(widget.currentRoles, {Qt::UserRole + i}); + } QMap<int, QVariant> flags = widget.model()->itemData(widget.model()->index(0, 0)); QCOMPARE(flags.count(), 6); - QCOMPARE(flags[(Qt::UserRole + 0)].toString(), QString("1")); + for (int i = 0; i < 4; ++i) + QCOMPARE(flags[Qt::UserRole + i].toString(), QString::number(i + 1)); } void tst_QTableWidget::setItemData() { - QTableWidget table(10, 10); + QTableWidgetDataChanged table(10, 10); table.setSortingEnabled(false); QSignalSpy dataChangedSpy(table.model(), SIGNAL(dataChanged(QModelIndex,QModelIndex))); @@ -1376,6 +1396,7 @@ void tst_QTableWidget::setItemData() data.insert(Qt::DisplayRole, QLatin1String("Display")); data.insert(Qt::ToolTipRole, QLatin1String("ToolTip")); table.model()->setItemData(idx, data); + QCOMPARE(table.currentRoles, QVector<int>({Qt::DisplayRole, Qt::EditRole, Qt::ToolTipRole})); QCOMPARE(table.model()->data(idx, Qt::DisplayRole).toString(), QLatin1String("Display")); QCOMPARE(table.model()->data(idx, Qt::ToolTipRole).toString(), QLatin1String("ToolTip")); @@ -1404,6 +1425,28 @@ void tst_QTableWidget::cellWidget() QCOMPARE(table.cellWidget(5, 5), static_cast<QWidget*>(0)); } +void tst_QTableWidget::cellWidgetGeometry() +{ + QTableWidget tw(3,2); + tw.show(); + // make sure the next row added is not completely visibile + tw.resize(300, tw.rowHeight(0) * 3 + tw.rowHeight(0) / 2); + QVERIFY(QTest::qWaitForWindowExposed(&tw)); + + tw.scrollToBottom(); + tw.setRowCount(tw.rowCount() + 1); + auto item = new QTableWidgetItem("Hello"); + tw.setItem(0,0,item); + auto le = new QLineEdit("world"); + tw.setCellWidget(0,1,le); + // process delayedPendingLayout triggered by setting the row count + tw.doItemsLayout(); + // so y pos is 0 for the first row + tw.scrollToTop(); + // check if updateEditorGeometries has set the correct y pos for the editors + QCOMPARE(tw.visualItemRect(item).top(), le->geometry().top()); +} + void tst_QTableWidget::task231094() { QTableWidget tw(5, 3); diff --git a/tests/auto/widgets/itemviews/qtreeview/BLACKLIST b/tests/auto/widgets/itemviews/qtreeview/BLACKLIST deleted file mode 100644 index 5eb80007c4..0000000000 --- a/tests/auto/widgets/itemviews/qtreeview/BLACKLIST +++ /dev/null @@ -1,2 +0,0 @@ -[setSortingEnabledChild] -windows diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp index 1ea1843abe..a79341b66f 100644 --- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp @@ -839,6 +839,9 @@ void tst_QTreeView::horizontalScrollMode() QCOMPARE(view.horizontalScrollMode(), QAbstractItemView::ScrollPerPixel); QCOMPARE(view.horizontalScrollBar()->minimum(), 0); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("", "setFixedSize does not work on WinRT - QTBUG-68297", Abort); +#endif QVERIFY(view.horizontalScrollBar()->maximum() > 2); view.setHorizontalScrollMode(QAbstractItemView::ScrollPerItem); @@ -1975,6 +1978,10 @@ void tst_QTreeView::setSelection() QVERIFY(selectionModel); QModelIndexList selectedIndexes = selectionModel->selectedIndexes(); +#ifdef Q_OS_WINRT + QEXPECT_FAIL("(0,-20,20,50),rows", "Fails on WinRT - QTBUG-68297", Abort); + QEXPECT_FAIL("(0,-50,20,90),rows", "Fails on WinRT - QTBUG-68297", Abort); +#endif QCOMPARE(selectedIndexes.count(), expectedItems.count()); for (int i = 0; i < selectedIndexes.count(); ++i) { QModelIndex idx = selectedIndexes.at(i); @@ -2600,8 +2607,10 @@ void tst_QTreeView::setSortingEnabledChild() { QMainWindow win; QTreeView view; - QStandardItemModel model(1,1); + // two columns to not get in trouble with stretchLastSection + QStandardItemModel model(1,2); view.setModel(&model); + view.header()->setDefaultSectionSize(92); win.setCentralWidget(&view); const int size = view.header()->sectionSize(0); view.setSortingEnabled(true); diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp index 321e4bcd0e..8c93df9073 100644 --- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp +++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp @@ -160,6 +160,7 @@ private slots: void task20345_sortChildren(); void getMimeDataWithInvalidItem(); void testVisualItemRect(); + void reparentHiddenItem(); public slots: void itemSelectionChanged(); @@ -1938,23 +1939,38 @@ void tst_QTreeWidget::setData() } } +class QTreeWidgetDataChanged : public QTreeWidget +{ + Q_OBJECT +public: + using QTreeWidget::QTreeWidget; + + void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles) override + { + QTreeWidget::dataChanged(topLeft, bottomRight, roles); + currentRoles = roles; + } + QVector<int> currentRoles; +}; + void tst_QTreeWidget::itemData() { - QTreeWidget widget; + QTreeWidgetDataChanged widget; QTreeWidgetItem item(&widget); widget.setColumnCount(2); item.setFlags(item.flags() | Qt::ItemIsEditable); item.setData(0, Qt::DisplayRole, QString("0")); + QCOMPARE(widget.currentRoles, QVector<int>({Qt::DisplayRole, Qt::EditRole})); item.setData(0, Qt::CheckStateRole, Qt::PartiallyChecked); - item.setData(0, Qt::UserRole + 0, QString("1")); - item.setData(0, Qt::UserRole + 1, QString("2")); - item.setData(0, Qt::UserRole + 2, QString("3")); - item.setData(0, Qt::UserRole + 3, QString("4")); - + QCOMPARE(widget.currentRoles, {Qt::CheckStateRole}); + for (int i = 0; i < 4; ++i) { + item.setData(0, Qt::UserRole + i, QString::number(i + 1)); + QCOMPARE(widget.currentRoles, {Qt::UserRole + i}); + } QMap<int, QVariant> flags = widget.model()->itemData(widget.model()->index(0, 0)); QCOMPARE(flags.count(), 6); - QCOMPARE(flags[Qt::UserRole + 0].toString(), QString("1")); - + for (int i = 0; i < 4; ++i) + QCOMPARE(flags[Qt::UserRole + i].toString(), QString::number(i + 1)); flags = widget.model()->itemData(widget.model()->index(0, 1)); QCOMPARE(flags.count(), 0); } @@ -3412,8 +3428,9 @@ void tst_QTreeWidget::taskQTBUG_34717_collapseAtBottom() void tst_QTreeWidget::task20345_sortChildren() { - if (!QGuiApplication::platformName().compare(QLatin1String("wayland"), Qt::CaseInsensitive)) - QSKIP("Wayland: This causes a crash triggered by setVisible(false)"); + if (!QGuiApplication::platformName().compare(QLatin1String("wayland"), Qt::CaseInsensitive) + || !QGuiApplication::platformName().compare(QLatin1String("winrt"), Qt::CaseInsensitive)) + QSKIP("Wayland/WinRT: This causes a crash triggered by setVisible(false)"); // This test case is considered successful if it is executed (no crash in sorting) QTreeWidget tw; @@ -3483,5 +3500,34 @@ void tst_QTreeWidget::testVisualItemRect() QCOMPARE(r.width(), sectionSize); } +void tst_QTreeWidget::reparentHiddenItem() +{ + QTreeWidgetItem *parent = new QTreeWidgetItem(testWidget); + parent->setText(0, "parent"); + QTreeWidgetItem *otherParent = new QTreeWidgetItem(testWidget); + otherParent->setText(0, "other parent"); + QTreeWidgetItem *child = new QTreeWidgetItem(parent); + child->setText(0, "child"); + QTreeWidgetItem *grandChild = new QTreeWidgetItem(child); + grandChild->setText(0, "grandchild"); + QVERIFY(child->parent()); + QVERIFY(grandChild->parent()); + + testWidget->expandItem(parent); + testWidget->expandItem(otherParent); + testWidget->expandItem(child); + + QVERIFY(!parent->isHidden()); + QVERIFY(!child->isHidden()); + QVERIFY(!grandChild->isHidden()); + + grandChild->setHidden(true); + + QVERIFY(grandChild->isHidden()); + parent->removeChild(child); + otherParent->addChild(child); + QVERIFY(grandChild->isHidden()); +} + QTEST_MAIN(tst_QTreeWidget) #include "tst_qtreewidget.moc" |