diff options
Diffstat (limited to 'tests/auto/widgets')
13 files changed, 390 insertions, 113 deletions
diff --git a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp index 05410f4a0f..e26da6b93e 100644 --- a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp +++ b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp @@ -933,7 +933,6 @@ void tst_QFiledialog::selectFiles() QSignalSpy spyDirectoryEntered(&fd, SIGNAL(directoryEntered(QString))); QSignalSpy spyFilesSelected(&fd, SIGNAL(filesSelected(QStringList))); QSignalSpy spyFilterSelected(&fd, SIGNAL(filterSelected(QString))); - fd.show(); fd.setFileMode(QFileDialog::ExistingFiles); QString filesPath = fd.directory().absolutePath(); @@ -1521,7 +1520,8 @@ public: const QWindow *window = QGuiApplication::topLevelWindows().constFirst(); const QFileDialog *fileDialog = qobject_cast<QFileDialog*>(QApplication::activeModalWidget()); - QVERIFY(fileDialog); + if (!fileDialog) + return; // The problem in QTBUG-57193 was from a platform input context plugin that was // connected to QWindow::focusObjectChanged(), and consequently accessed the focus diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp index 4f4a11a79c..92225f60a2 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp @@ -986,6 +986,7 @@ void tst_QGraphicsItem::inputMethodHints() QGraphicsView view(&scene); QApplication::setActiveWindow(&view); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); item->setFocus(); QTRY_VERIFY(item->hasFocus()); @@ -1036,6 +1037,7 @@ void tst_QGraphicsItem::toolTip() view.setFixedSize(200, 200); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); { QHelpEvent helpEvent(QEvent::ToolTip, view.viewport()->rect().topLeft(), @@ -3251,6 +3253,7 @@ void tst_QGraphicsItem::hoverEventsGenerateRepaints() QGraphicsScene scene; QGraphicsView view(&scene); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); EventTester *tester = new EventTester; @@ -4975,6 +4978,7 @@ void tst_QGraphicsItem::sceneEventFilter() QGraphicsView view(&scene); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QGraphicsTextItem *text1 = scene.addText(QLatin1String("Text1")); @@ -6850,6 +6854,7 @@ void tst_QGraphicsItem::opacity2() MyGraphicsView view(&scene); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(view.repaints >= 1); @@ -6927,6 +6932,7 @@ void tst_QGraphicsItem::opacityZeroUpdates() MyGraphicsView view(&scene); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(view.repaints > 0); @@ -7322,6 +7328,7 @@ void tst_QGraphicsItem::cacheMode() view.resize(150, 150); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); // Increase the probability of window activation @@ -7516,6 +7523,7 @@ void tst_QGraphicsItem::cacheMode2() view.resize(150, 150); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); // Increase the probability of window activation @@ -8180,6 +8188,7 @@ void tst_QGraphicsItem::moveLineItem() MyGraphicsView view(&scene); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); view.reset(); @@ -8250,6 +8259,7 @@ void tst_QGraphicsItem::sorting() view.setFrameStyle(0); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTest::qWait(100); @@ -8286,6 +8296,7 @@ void tst_QGraphicsItem::itemHasNoContents() QGraphicsView view(&scene); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(!_paintedItems.isEmpty()); @@ -9294,6 +9305,7 @@ void tst_QGraphicsItem::ensureDirtySceneTransform() QGraphicsView view(&scene); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -9680,6 +9692,7 @@ void tst_QGraphicsItem::QTBUG_4233_updateCachedWithSceneRect() QGraphicsView view(&scene); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), (QWidget *)&view); @@ -10810,6 +10823,7 @@ void tst_QGraphicsItem::scroll() MyGraphicsView view(&scene); view.setFrameStyle(0); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(view.repaints > 0); @@ -11332,6 +11346,7 @@ void tst_QGraphicsItem::QTBUG_6738_missingUpdateWithSetParent() MyGraphicsView view(&scene); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(view.repaints > 0); @@ -11380,6 +11395,7 @@ void tst_QGraphicsItem::QT_2653_fullUpdateDiscardingOpacityUpdate() parentGreen->setFlag(QGraphicsItem::ItemIgnoresTransformations); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); view.reset(); @@ -11426,6 +11442,7 @@ void tst_QGraphicsItem::QTBUG_7714_fullUpdateDiscardingOpacityUpdate2() view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); view.reset(); origView.reset(); @@ -11565,6 +11582,7 @@ void tst_QGraphicsItem::doNotMarkFullUpdateIfNotInScene() item2->setParentItem(item); scene.addItem(item); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(view.windowHandle())); QVERIFY(QTest::qWaitForWindowActive(view.windowHandle())); view.activateWindow(); QTRY_VERIFY(view.isActiveWindow()); @@ -11596,6 +11614,7 @@ void tst_QGraphicsItem::itemDiesDuringDraggingOperation() scene.addItem(item); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), (QWidget *)&view); QGraphicsSceneDragDropEvent dragEnter(QEvent::GraphicsSceneDragEnter); @@ -11623,6 +11642,7 @@ void tst_QGraphicsItem::QTBUG_12112_focusItem() view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), (QWidget *)&view); diff --git a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp index 10129eb10c..582c0e36a0 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsview/tst_qgraphicsview.cpp @@ -431,6 +431,7 @@ void tst_QGraphicsView::interactive() QCOMPARE(item->events.size(), 0); view.show(); view.activateWindow(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_COMPARE(item->events.size(), 1); // activate @@ -1655,6 +1656,7 @@ void tst_QGraphicsView::itemsInRect_cosmeticAdjust() view.setFrameStyle(0); view.resize(300, 300); view.showNormal(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(rect->numPaints > 0); @@ -2149,6 +2151,7 @@ void tst_QGraphicsView::sendEvent() QGraphicsView view(&scene); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -2216,6 +2219,7 @@ void tst_QGraphicsView::wheelEvent() QGraphicsView view(&scene); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -2452,6 +2456,7 @@ void tst_QGraphicsView::viewportUpdateMode() // Show the view, and initialize our test. view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(!view.lastUpdateRegions.isEmpty()); view.lastUpdateRegions.clear(); @@ -2536,6 +2541,7 @@ void tst_QGraphicsView::viewportUpdateMode2() view.resize(200 + left + right, 200 + top + bottom); toplevel.show(); qApp->setActiveWindow(&toplevel); + QVERIFY(QTest::qWaitForWindowExposed(&toplevel)); QVERIFY(QTest::qWaitForWindowActive(&toplevel)); QTRY_VERIFY(view.painted); const QRect viewportRect = view.viewport()->rect(); @@ -3182,6 +3188,7 @@ void tst_QGraphicsView::task172231_untransformableItems() view.scale(2, 1); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -3984,6 +3991,7 @@ void tst_QGraphicsView::exposeRegion() view.setScene(&scene); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(item->paints > 0); @@ -4138,6 +4146,7 @@ void tst_QGraphicsView::update2() view.resize(200, 200); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(rect->numPaints > 0); @@ -4207,6 +4216,7 @@ void tst_QGraphicsView::update_ancestorClipsChildrenToShape() CustomView view(&scene); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(view.painted); @@ -4260,6 +4270,7 @@ void tst_QGraphicsView::update_ancestorClipsChildrenToShape2() CustomView view(&scene); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QTRY_VERIFY(view.painted); @@ -4322,6 +4333,7 @@ void tst_QGraphicsView::inputMethodSensitivity() QGraphicsView view(&scene); view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -4416,6 +4428,7 @@ void tst_QGraphicsView::inputContextReset() view.show(); QApplication::setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&view)); @@ -4563,6 +4576,7 @@ void tst_QGraphicsView::task255529_transformationAnchorMouseAndViewportMargins() view.setWindowFlags(Qt::X11BypassWindowManagerHint); view.show(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); // This is highly unstable (observed to pass on Windows and some Linux configurations). #ifndef Q_OS_MAC @@ -4690,6 +4704,7 @@ void tst_QGraphicsView::QTBUG_4151_clipAndIgnore() view.resize(75, 75); view.show(); view.activateWindow(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); QCOMPARE(QApplication::activeWindow(), (QWidget *)&view); @@ -4727,6 +4742,7 @@ void tst_QGraphicsView::QTBUG_5859_exposedRect() view.scale(4.15, 4.15); view.showNormal(); qApp->setActiveWindow(&view); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); view.viewport()->repaint(10,10,20,20); @@ -4851,6 +4867,7 @@ void tst_QGraphicsView::QTBUG_16063_microFocusRect() view.setFixedSize(40, 40); view.show(); + QVERIFY(QTest::qWaitForWindowExposed(&view)); QVERIFY(QTest::qWaitForWindowActive(&view)); scene.setFocusItem(item); 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 347d2a81e6..37402d8a58 100644 --- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp @@ -2600,8 +2600,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 d0e6407283..6ac0e5e18e 100644 --- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp +++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp @@ -1938,23 +1938,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); } diff --git a/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp b/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp index 2f1a305710..3dfb9c35b3 100644 --- a/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp +++ b/tests/auto/widgets/kernel/qboxlayout/tst_qboxlayout.cpp @@ -56,6 +56,7 @@ private slots: void taskQTBUG_40609_addingWidgetToItsOwnLayout(); void taskQTBUG_40609_addingLayoutToItself(); void replaceWidget(); + void indexOf(); }; class CustomLayoutStyle : public QProxyStyle @@ -514,5 +515,24 @@ void tst_QBoxLayout::replaceWidget() QCOMPARE(boxLayout->indexOf(replaceTo), 1); } +void tst_QBoxLayout::indexOf() +{ + QWidget w; + auto outer = new QVBoxLayout(&w); + auto inner = new QHBoxLayout(); + outer->addLayout(inner); + auto widget1 = new QWidget(); + QWidget widget2; + inner->addWidget(widget1); + + QCOMPARE(inner->indexOf(widget1), 0); + QCOMPARE(inner->indexOf(&widget2), -1); + QCOMPARE(outer->indexOf(widget1), -1); + QCOMPARE(outer->indexOf(&widget2), -1); + QCOMPARE(outer->indexOf(outer), -1); + QCOMPARE(outer->indexOf(inner), 0); + QCOMPARE(inner->indexOf(inner->itemAt(0)), 0); +} + QTEST_MAIN(tst_QBoxLayout) #include "tst_qboxlayout.moc" diff --git a/tests/auto/widgets/kernel/qwidget/BLACKLIST b/tests/auto/widgets/kernel/qwidget/BLACKLIST index 02cdd1a895..dc9adb74f7 100644 --- a/tests/auto/widgets/kernel/qwidget/BLACKLIST +++ b/tests/auto/widgets/kernel/qwidget/BLACKLIST @@ -15,20 +15,12 @@ rhel-7.4 osx [focusProxyAndInputMethods] linux -[showMaximized] -osx -[setGeometry] -osx -[raise] -osx -[resizeEvent] -osx [setWindowGeometry] osx [windowMoveResize] osx [childEvents] -osx +osx ci [renderInvisible] osx [optimizedResizeMove] @@ -40,27 +32,8 @@ osx [showMinimizedKeepsFocus] osx-10.11 ci osx-10.12 ci -[moveWindowInShowEvent:1] -osx -[moveWindowInShowEvent:2] -osx -[taskQTBUG_4055_sendSyntheticEnterLeave] -osx -[syntheticEnterLeave] -osx [maskedUpdate] -osx opensuse-42.3 -[hideOpaqueChildWhileHidden] -osx -[resizeStaticContentsChildWidget_QTBUG35282] -osx -[lower] -osx -[setClearAndResizeMask] -osx -[setToolTip] -osx [moveInResizeEvent] ubuntu-16.04 [moveChild:right] diff --git a/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp b/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp index 59ddd54194..5382d5c6db 100644 --- a/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp +++ b/tests/auto/widgets/widgets/qdoublespinbox/tst_qdoublespinbox.cpp @@ -31,6 +31,7 @@ #include <qapplication.h> #include <limits.h> +#include <cmath> #include <float.h> #include <qspinbox.h> @@ -135,6 +136,8 @@ private slots: void setGroupSeparatorShown_data(); void setGroupSeparatorShown(); + void adaptiveDecimalStep(); + public slots: void valueChangedHelper(const QString &); void valueChangedHelper(double); @@ -1139,5 +1142,133 @@ void tst_QDoubleSpinBox::setGroupSeparatorShown() QCOMPARE(spinBox.value()+1000, 33000.44); } +void tst_QDoubleSpinBox::adaptiveDecimalStep() +{ + DoubleSpinBox spinBox; + spinBox.setRange(-100000, 100000); + spinBox.setDecimals(4); + spinBox.setStepType(DoubleSpinBox::StepType::AdaptiveDecimalStepType); + + // Positive values + + spinBox.setValue(0); + + // Go from 0 to 0.01 + for (double i = 0; i < 0.00999; i += 0.0001) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(1); + } + + // Go from 0.01 to 0.1 + for (double i = 0.01; i < 0.0999; i += 0.001) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(1); + } + + // Go from 0.1 to 1 + for (double i = 0.1; i < 0.999; i += 0.01) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(1); + } + + // Go from 1 to 10 + for (double i = 1; i < 9.99; i += 0.1) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(1); + } + + // Go from 10 to 100 + for (int i = 10; i < 100; i++) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(1); + } + + // Go from 100 to 1000 + for (int i = 100; i < 1000; i += 10) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(1); + } + + // Go from 1000 to 10000 + for (int i = 1000; i < 10000; i += 100) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(1); + } + + // Test decreasing the values now + + // Go from 10000 down to 1000 + for (int i = 10000; i > 1000; i -= 100) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(-1); + } + + // Go from 1000 down to 100 + for (int i = 1000; i > 100; i -= 10) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(-1); + } + + // Negative values + + spinBox.setValue(0); + + // Go from 0 to -0.01 + for (double i = 0; i > -0.00999; i -= 0.0001) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(-1); + } + + // Go from -0.01 to -0.1 + for (double i = -0.01; i > -0.0999; i -= 0.001) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(-1); + } + + // Go from -0.1 to -1 + for (double i = -0.1; i > -0.999; i -= 0.01) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(-1); + } + + // Go from -1 to -10 + for (double i = -1; i > -9.99; i -= 0.1) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(-1); + } + + // Go from -10 to -100 + for (int i = -10; i > -100; i--) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(-1); + } + + // Go from -100 to -1000 + for (int i = -100; i > -1000; i -= 10) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(-1); + } + + // Go from 1000 to 10000 + for (int i = -1000; i > -10000; i -= 100) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(-1); + } + + // Test increasing the values now + + // Go from -10000 up to -1000 + for (int i = -10000; i < -1000; i += 100) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(1); + } + + // Go from -1000 up to -100 + for (int i = -1000; i < -100; i += 10) { + QVERIFY(qFuzzyCompare(spinBox.value(), i)); + spinBox.stepBy(1); + } +} + QTEST_MAIN(tst_QDoubleSpinBox) #include "tst_qdoublespinbox.moc" diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index 0be8d319c2..9015c03f3f 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -2269,6 +2269,16 @@ void tst_QLineEdit::deleteSelectedText() } +class ToUpperValidator : public QValidator +{ +public: + ToUpperValidator() {} + State validate(QString &input, int &) const override + { + input = input.toUpper(); + return QValidator::Acceptable; + } +}; void tst_QLineEdit::textChangedAndTextEdited() { @@ -2310,6 +2320,23 @@ void tst_QLineEdit::textChangedAndTextEdited() QCOMPARE(edited_count, 0); QVERIFY(changed_string.isEmpty()); QVERIFY(!changed_string.isNull()); + + changed_count = 0; + edited_count = 0; + changed_string.clear(); + + QScopedPointer<ToUpperValidator> validator(new ToUpperValidator()); + testWidget->setValidator(validator.data()); + testWidget->setText("foo"); + QCOMPARE(changed_count, 1); + QCOMPARE(edited_count, 0); + QCOMPARE(changed_string, QLatin1String("FOO")); + testWidget->setCursorPosition(sizeof("foo")); + QTest::keyClick(testWidget, 'b'); + QCOMPARE(changed_count, 2); + QCOMPARE(edited_count, 1); + QCOMPARE(changed_string, QLatin1String("FOOB")); + testWidget->setValidator(nullptr); } void tst_QLineEdit::onTextChanged(const QString &text) diff --git a/tests/auto/widgets/widgets/qmenu/qmenu.pro b/tests/auto/widgets/widgets/qmenu/qmenu.pro index 84b6530184..4a492ee941 100644 --- a/tests/auto/widgets/widgets/qmenu/qmenu.pro +++ b/tests/auto/widgets/widgets/qmenu/qmenu.pro @@ -5,4 +5,6 @@ SOURCES += tst_qmenu.cpp macx:{ OBJECTIVE_SOURCES += tst_qmenu_mac.mm LIBS += -lobjc +} else { + DEFINES += QTEST_QPA_MOUSE_HANDLING } diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp index 28e8ba81d6..9e0db6fb3f 100644 --- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp +++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp @@ -986,9 +986,6 @@ void tst_QMenu::task258920_mouseBorder() QAction *action = menu.addAction("test"); const QPoint center = QApplication::desktop()->availableGeometry().center(); -#ifndef QT_NO_CURSOR - QCursor::setPos(center - QPoint(100, 100)); // Mac: Ensure cursor is outside -#endif menu.popup(center); QVERIFY(QTest::qWaitForWindowExposed(&menu)); QTest::qWait(100); @@ -1234,96 +1231,90 @@ public: void tst_QMenu::QTBUG47515_widgetActionEnterLeave() { -#if !QT_CONFIG(cursor) - QSKIP("This test requires QCursor API"); -#else if (QGuiApplication::platformName() == QLatin1String("cocoa")) QSKIP("See QTBUG-63031"); - QPoint screenCenter = QGuiApplication::primaryScreen()->availableGeometry().center(); - QPoint pointOutsideMenu = screenCenter - QPoint(100, 100); + const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry(); + QRect geometry(QPoint(), availableGeometry.size() / 3); + geometry.moveCenter(availableGeometry.center()); + QPoint pointOutsideMenu = geometry.bottomRight() - QPoint(5, 5); - QMenu menu("Menu1"); - QMenu submenu("Menu2"); + QMainWindow topLevel; + topLevel.setGeometry(geometry); - QWidgetAction menuAction(&menu); - MyWidget w1(&menu); - menuAction.setDefaultWidget(&w1); + QMenuBar *menuBar = topLevel.menuBar(); + menuBar->setNativeMenuBar(false); + QMenu *menu = menuBar->addMenu("Menu1"); + QMenu *submenu = menu->addMenu("Menu2"); - QWidgetAction submenuAction(&submenu); - MyWidget w2(&submenu); - submenuAction.setDefaultWidget(&w2); + QWidgetAction *menuAction = new QWidgetAction(menu); + MyWidget *w1 = new MyWidget(menu); + menuAction->setDefaultWidget(w1); - QAction *nextMenuAct = menu.addMenu(&submenu); + QWidgetAction *submenuAction = new QWidgetAction(submenu); + MyWidget *w2 = new MyWidget(submenu); + submenuAction->setDefaultWidget(w2); - menu.addAction(&menuAction); - submenu.addAction(&submenuAction); + QAction *nextMenuAct = menu->addMenu(submenu); - // Root menu - { - QCursor::setPos(pointOutsideMenu); - QTRY_COMPARE(QCursor::pos(), pointOutsideMenu); - menu.popup(screenCenter); - QVERIFY(QTest::qWaitForWindowExposed(&menu)); + menu->addAction(menuAction); + submenu->addAction(submenuAction); - w1.enter = 0; - w1.leave = 0; - QPoint w1Center = w1.rect().center(); - const QPoint w1CenterGlobal = w1.mapToGlobal(w1Center); - QCursor::setPos(w1CenterGlobal); - QTRY_COMPARE(QCursor::pos(), w1CenterGlobal); - QVERIFY(w1.isVisible()); - QTRY_COMPARE(w1.leave, 0); - QTRY_COMPARE(w1.enter, 1); + topLevel.show(); + topLevel.setWindowTitle(QTest::currentTestFunction()); + QVERIFY(QTest::qWaitForWindowActive(&topLevel)); + QWindow *topLevelWindow = topLevel.windowHandle(); + QVERIFY(topLevelWindow); + + // Root menu: Click on menu bar to open menu1 + { + const QPoint menuActionPos = menuBar->mapTo(&topLevel, menuBar->actionGeometry(menu->menuAction()).center()); + QTest::mouseClick(topLevelWindow, Qt::LeftButton, Qt::KeyboardModifiers(), menuActionPos); + QVERIFY(QTest::qWaitForWindowExposed(menu)); + + w1->enter = 0; + w1->leave = 0; + QPoint w1Center = topLevel.mapFromGlobal(w1->mapToGlobal(w1->rect().center())); + QTest::mouseMove(topLevelWindow, w1Center); + QVERIFY(w1->isVisible()); + QTRY_COMPARE(w1->leave, 0); + QTRY_COMPARE(w1->enter, 1); // Check whether leave event is not delivered on mouse move - w1.move = 0; - QWidget *nativeParent = w1.nativeParentWidget(); - QVERIFY(nativeParent); - QWindow *window = nativeParent->windowHandle(); - QVERIFY(window); - QTest::mouseMove(window, w1.mapTo(nativeParent, w1Center + QPoint(1, 1))); - QTRY_COMPARE(w1.move, 1); - QTRY_COMPARE(w1.leave, 0); - QTRY_COMPARE(w1.enter, 1); - - QCursor::setPos(pointOutsideMenu); - QTRY_COMPARE(QCursor::pos(), pointOutsideMenu); - QTRY_COMPARE(w1.leave, 1); - QTRY_COMPARE(w1.enter, 1); + w1->move = 0; + QTest::mouseMove(topLevelWindow, w1Center + QPoint(1, 1)); + QTRY_COMPARE(w1->move, 1); + QTRY_COMPARE(w1->leave, 0); + QTRY_COMPARE(w1->enter, 1); + + QTest::mouseMove(topLevelWindow, topLevel.mapFromGlobal(pointOutsideMenu)); + QTRY_COMPARE(w1->leave, 1); + QTRY_COMPARE(w1->enter, 1); } // Submenu { - menu.setActiveAction(nextMenuAct); - QVERIFY(QTest::qWaitForWindowExposed(&submenu)); + menu->setActiveAction(nextMenuAct); + QVERIFY(QTest::qWaitForWindowExposed(submenu)); - QPoint w2Center = w2.rect().center(); - const QPoint w2CenterGlobal = w2.mapToGlobal(w2Center); - QCursor::setPos(w2CenterGlobal); - QTRY_COMPARE(QCursor::pos(), w2CenterGlobal); + QPoint w2Center = topLevel.mapFromGlobal(w2->mapToGlobal(w2->rect().center())); + QTest::mouseMove(topLevelWindow, w2Center); - QVERIFY(w2.isVisible()); - QTRY_COMPARE(w2.leave, 0); - QTRY_COMPARE(w2.enter, 1); + QVERIFY(w2->isVisible()); + QTRY_COMPARE(w2->leave, 0); + QTRY_COMPARE(w2->enter, 1); // Check whether leave event is not delivered on mouse move - w2.move = 0; - QWidget *nativeParent = w2.nativeParentWidget(); - QVERIFY(nativeParent); - QWindow *window = nativeParent->windowHandle(); - QVERIFY(window); - QTest::mouseMove(window, w2.mapTo(nativeParent, w2Center + QPoint(1, 1))); - QTRY_COMPARE(w2.move, 1); - QTRY_COMPARE(w2.leave, 0); - QTRY_COMPARE(w2.enter, 1); - - QCursor::setPos(pointOutsideMenu); - QTRY_COMPARE(QCursor::pos(), pointOutsideMenu); - QTRY_COMPARE(w2.leave, 1); - QTRY_COMPARE(w2.enter, 1); + w2->move = 0; + QTest::mouseMove(topLevelWindow, w2Center + QPoint(1, 1)); + QTRY_COMPARE(w2->move, 1); + QTRY_COMPARE(w2->leave, 0); + QTRY_COMPARE(w2->enter, 1); + + QTest::mouseMove(topLevelWindow, topLevel.mapFromGlobal(pointOutsideMenu)); + QTRY_COMPARE(w2->leave, 1); + QTRY_COMPARE(w2->enter, 1); } -#endif // QT_NO_CURSOR } class MyMenu : public QMenu diff --git a/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp b/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp index 07a2fd859d..5ee9160916 100644 --- a/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp +++ b/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp @@ -145,6 +145,8 @@ private slots: void wheelEvents(); + void adaptiveDecimalStep(); + public slots: void valueChangedHelper(const QString &); void valueChangedHelper(int); @@ -1240,5 +1242,84 @@ void tst_QSpinBox::wheelEvents() #endif } +void tst_QSpinBox::adaptiveDecimalStep() +{ + SpinBox spinBox; + spinBox.setRange(-100000, 100000); + spinBox.setStepType(SpinBox::StepType::AdaptiveDecimalStepType); + + // Positive values + + spinBox.setValue(0); + + // Go from 0 to 100 + for (int i = 0; i < 100; i++) { + QCOMPARE(spinBox.value(), i); + spinBox.stepBy(1); + } + + // Go from 100 to 1000 + for (int i = 100; i < 1000; i += 10) { + QCOMPARE(spinBox.value(), i); + spinBox.stepBy(1); + } + + // Go from 1000 to 10000 + for (int i = 1000; i < 10000; i += 100) { + QCOMPARE(spinBox.value(), i); + spinBox.stepBy(1); + } + + // Test decreasing the values now + + // Go from 10000 down to 1000 + for (int i = 10000; i > 1000; i -= 100) { + QCOMPARE(spinBox.value(), i); + spinBox.stepBy(-1); + } + + // Go from 1000 down to 100 + for (int i = 1000; i > 100; i -= 10) { + QCOMPARE(spinBox.value(), i); + spinBox.stepBy(-1); + } + + // Negative values + + spinBox.setValue(0); + + // Go from 0 to -100 + for (int i = 0; i > -100; i--) { + QCOMPARE(spinBox.value(), i); + spinBox.stepBy(-1); + } + + // Go from -100 to -1000 + for (int i = -100; i > -1000; i -= 10) { + QCOMPARE(spinBox.value(), i); + spinBox.stepBy(-1); + } + + // Go from 1000 to 10000 + for (int i = -1000; i > -10000; i -= 100) { + QCOMPARE(spinBox.value(), i); + spinBox.stepBy(-1); + } + + // Test increasing the values now + + // Go from -10000 up to -1000 + for (int i = -10000; i < -1000; i += 100) { + QCOMPARE(spinBox.value(), i); + spinBox.stepBy(1); + } + + // Go from -1000 up to -100 + for (int i = -1000; i < -100; i += 10) { + QCOMPARE(spinBox.value(), i); + spinBox.stepBy(1); + } +} + QTEST_MAIN(tst_QSpinBox) #include "tst_qspinbox.moc" |