diff options
author | Leander Beernaert <leander.beernaert@qt.io> | 2020-01-22 13:47:08 +0100 |
---|---|---|
committer | Leander Beernaert <leander.beernaert@qt.io> | 2020-01-24 13:17:33 +0100 |
commit | 502d3d6744913899da87acfda5ebdab42c40329e (patch) | |
tree | 16658a328503bfd5a62b4fd5d69ffb66e9854b18 /tests/auto/widgets/widgets | |
parent | d1be8b9ceb2c7b20bbe53a07154c79699540ea3d (diff) | |
parent | 06bb315beb6c2c398223cfe52cbc7f66e14a8557 (diff) |
Merge remote-tracking branch 'origin/dev' into merge-dev
Change-Id: I31b761cfd5ea01373c60d02a5da8c33398d34739
Diffstat (limited to 'tests/auto/widgets/widgets')
22 files changed, 348 insertions, 138 deletions
diff --git a/tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.cpp b/tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.cpp index f77efe036a..c54a6bb73e 100644 --- a/tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.cpp +++ b/tests/auto/widgets/widgets/qabstractslider/tst_qabstractslider.cpp @@ -1836,9 +1836,10 @@ void tst_QAbstractSlider::sliderPressedReleased() if (qApp->style()->styleHint(QStyle::SH_ScrollBar_LeftClickAbsolutePosition)) QSKIP("The result depends on system setting on mac"); - QTest::mousePress(slider, Qt::LeftButton, 0, QPoint(rect.center().x() + 2, rect.center().y() + 2)); + QTest::mousePress(slider, Qt::LeftButton, {}, + QPoint(rect.center().x() + 2, rect.center().y() + 2)); QCOMPARE(spy1.count(), expectedCount); - QTest::mouseRelease(slider, Qt::LeftButton, 0, rect.center()); + QTest::mouseRelease(slider, Qt::LeftButton, {}, rect.center()); QCOMPARE(spy2.count(), expectedCount); delete slider; diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp index eed4fe3539..ea1b330152 100644 --- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp +++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp @@ -397,6 +397,31 @@ void tst_QComboBox::getSetCheck() QCOMPARE(4, obj1.currentIndex()); // Valid obj1.setCurrentIndex(INT_MAX); QCOMPARE(-1, obj1.currentIndex()); // Invalid => -1 + + obj1.setIconSize(QSize(64, 32)); + QCOMPARE(obj1.iconSize(), QSize(64, 32)); + obj1.setIconSize(QSize()); + const int iconWidth = obj1.style()->pixelMetric(QStyle::PM_SmallIconSize, nullptr, &obj1); + QCOMPARE(obj1.iconSize(), QSize(iconWidth, iconWidth)); + + const QString placeholderText("Please select"); + obj1.setCurrentIndex(1); + obj1.setPlaceholderText(placeholderText); + QCOMPARE(obj1.placeholderText(), placeholderText); + QCOMPARE(obj1.currentText(), "2"); + QCOMPARE(obj1.currentIndex(), 1); + obj1.setPlaceholderText(QString()); // should not change anything + QCOMPARE(obj1.placeholderText(), QString()); + QCOMPARE(obj1.currentText(), "2"); + + obj1.clear(); + obj1.setPlaceholderText(placeholderText); + obj1.addItems({"1", "2", "3", "4", "5"}); + QCOMPARE(obj1.currentText(), placeholderText); + QCOMPARE(obj1.currentIndex(), -1); + obj1.setPlaceholderText(QString()); // should not change anything + QCOMPARE(obj1.currentText(), "1"); + QCOMPARE(obj1.currentIndex(), 0); } typedef QList<QVariant> VariantList; @@ -812,16 +837,16 @@ void tst_QComboBox::virtualAutocompletion() // well, and send a keypress & keyrelease right after each other. // This provokes the actual error, as there's no events in between to do // the text completion. - QKeyEvent kp1(QEvent::KeyPress, Qt::Key_B, 0, "b"); - QKeyEvent kr1(QEvent::KeyRelease, Qt::Key_B, 0, "b"); + QKeyEvent kp1(QEvent::KeyPress, Qt::Key_B, {}, "b"); + QKeyEvent kr1(QEvent::KeyRelease, Qt::Key_B, {}, "b"); QApplication::sendEvent(testWidget, &kp1); QApplication::sendEvent(testWidget, &kr1); qApp->processEvents(); // Process events to trigger autocompletion QTRY_COMPARE(testWidget->currentIndex(), 1); - QKeyEvent kp2(QEvent::KeyPress, Qt::Key_O, 0, "o"); - QKeyEvent kr2(QEvent::KeyRelease, Qt::Key_O, 0, "o"); + QKeyEvent kp2(QEvent::KeyPress, Qt::Key_O, {}, "o"); + QKeyEvent kr2(QEvent::KeyRelease, Qt::Key_O, {}, "o"); QApplication::sendEvent(testWidget, &kp2); QApplication::sendEvent(testWidget, &kr2); @@ -1697,7 +1722,7 @@ void tst_QComboBox::setCustomModelAndView() // why this happens. QTest::qWait(QApplication::doubleClickInterval()); - QTest::mouseClick(window->windowHandle(), Qt::LeftButton, 0, view->mapTo(window, subItemRect.center())); + QTest::mouseClick(window->windowHandle(), Qt::LeftButton, {}, view->mapTo(window, subItemRect.center())); #ifdef Q_OS_WINRT QEXPECT_FAIL("", "Fails on WinRT - QTBUG-68297", Abort); #endif diff --git a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp index aba4651379..9eae1f10ea 100644 --- a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp +++ b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp @@ -262,6 +262,8 @@ private slots: void timeSpec(); void timeSpecBug(); void timeSpecInit(); + void setDateTime_data(); + void setDateTime(); void monthEdgeCase(); void setLocale(); @@ -2303,7 +2305,7 @@ void tst_QDateTimeEdit::mousePress() QRect rectUp = testWidget->style()->subControlRect(QStyle::CC_SpinBox, &so, QStyle::SC_SpinBoxUp, testWidget); // Send mouseClick to center of SC_SpinBoxUp - QTest::mouseClick(testWidget, Qt::LeftButton, 0, rectUp.center()); + QTest::mouseClick(testWidget, Qt::LeftButton, {}, rectUp.center()); QCOMPARE(testWidget->date().year(), 2005); } @@ -2916,7 +2918,8 @@ void tst_QDateTimeEdit::calendarPopup() opt.editable = true; opt.subControls = QStyle::SC_ComboBoxArrow; QRect rect = style->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxArrow, testWidget); - QTest::mouseClick(testWidget, Qt::LeftButton, 0, QPoint(rect.left()+rect.width()/2, rect.top()+rect.height()/2)); + QTest::mouseClick(testWidget, Qt::LeftButton, {}, + QPoint(rect.left() + rect.width() / 2, rect.top() + rect.height() / 2)); QWidget *wid = testWidget->findChild<QWidget *>("qt_datetimedit_calendar"); QVERIFY(wid != 0); testWidget->hide(); @@ -2928,7 +2931,8 @@ void tst_QDateTimeEdit::calendarPopup() opt.initFrom(&timeEdit); opt.subControls = QStyle::SC_ComboBoxArrow; rect = style->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxArrow, &timeEdit); - QTest::mouseClick(&timeEdit, Qt::LeftButton, 0, QPoint(rect.left()+rect.width()/2, rect.top()+rect.height()/2)); + QTest::mouseClick(&timeEdit, Qt::LeftButton, {}, + QPoint(rect.left() + rect.width() / 2, rect.top() + rect.height() / 2)); QWidget *wid2 = timeEdit.findChild<QWidget *>("qt_datetimedit_calendar"); QVERIFY(!wid2); timeEdit.hide(); @@ -2942,7 +2946,8 @@ void tst_QDateTimeEdit::calendarPopup() opt.initFrom(&dateEdit); opt.subControls = QStyle::SC_ComboBoxArrow; rect = style->subControlRect(QStyle::CC_ComboBox, &opt, QStyle::SC_ComboBoxArrow, &dateEdit); - QTest::mouseClick(&dateEdit, Qt::LeftButton, 0, QPoint(rect.left()+rect.width()/2, rect.top()+rect.height()/2)); + QTest::mouseClick(&dateEdit, Qt::LeftButton, {}, + QPoint(rect.left() + rect.width() / 2, rect.top() + rect.height() / 2)); QWidget *wid3 = dateEdit.findChild<QWidget *>("qt_datetimedit_calendar"); QVERIFY(!wid3); dateEdit.hide(); @@ -3473,6 +3478,54 @@ void tst_QDateTimeEdit::timeSpecInit() QCOMPARE(widget.dateTime(), utc); } +void tst_QDateTimeEdit::setDateTime_data() +{ + QTest::addColumn<Qt::TimeSpec>("spec"); + QDateTime localNoon(QDate(2019, 12, 24), QTime(12, 0), Qt::LocalTime); +#if 0 // Not yet supported + QTest::addColumn<int>("offset"); + QTest::addColumn<QByteArray>("zoneName"); + + QTest::newRow("OffsetFromUTC/LocalTime") + << Qt::OffsetFromUTC << 7200 << "" + << localNoon << localNoon.toOffsetFromUtc(7200); +#if QT_CONFIG(timezone) + QTest::newRow("TimeZone/LocalTime") + << Qt::TimeZone << 0 << "Europe/Berlin" + << localNoon << localNoon.toTimeZone(QTimeZone("Europe/Berlin")); +#endif +#endif // unsupported + QTest::addColumn<QDateTime>("store"); + QTest::addColumn<QDateTime>("expect"); + QTest::newRow("LocalTime/LocalTime") + << Qt::LocalTime // << 0 << "" + << localNoon << localNoon; + QTest::newRow("LocalTime/UTC") + << Qt::LocalTime // << 0 << "" + << localNoon.toUTC() << localNoon; + QTest::newRow("UTC/LocalTime") + << Qt::UTC // << 0 << "" + << localNoon << localNoon.toUTC(); + QTest::newRow("UTC/UTC") + << Qt::UTC // << 0 << "" + << localNoon.toUTC() << localNoon.toUTC(); +} + +void tst_QDateTimeEdit::setDateTime() +{ + QFETCH(const Qt::TimeSpec, spec); +#if 0 // Not yet supported + QFETCH(const int, offset); + QFETCH(const QByteArray, zoneName); +#endif // configuring the spec, when OffsetFromUTC or TimeZone + QFETCH(const QDateTime, store); + QFETCH(const QDateTime, expect); + QDateTimeEdit editor; + editor.setTimeSpec(spec); + editor.setDateTime(store); + QCOMPARE(editor.dateTime(), expect); +} + void tst_QDateTimeEdit::cachedDayTest() { testWidget->setDisplayFormat("MM/dd"); diff --git a/tests/auto/widgets/widgets/qdial/tst_qdial.cpp b/tests/auto/widgets/widgets/qdial/tst_qdial.cpp index 7db3b44dc8..356f773ae9 100644 --- a/tests/auto/widgets/widgets/qdial/tst_qdial.cpp +++ b/tests/auto/widgets/widgets/qdial/tst_qdial.cpp @@ -98,7 +98,7 @@ void tst_QDial::sliderMoved() QPoint init(dial.width()/4, dial.height()/2); QMouseEvent pressevent(QEvent::MouseButtonPress, init, - Qt::LeftButton, Qt::LeftButton, 0); + Qt::LeftButton, Qt::LeftButton, {}); qApp->sendEvent(&dial, &pressevent); QSignalSpy sliderspy(&dial, SIGNAL(sliderMoved(int))); @@ -108,7 +108,7 @@ void tst_QDial::sliderMoved() { //move on top of the slider init = QPoint(dial.width()/2, dial.height()/4); QMouseEvent moveevent(QEvent::MouseMove, init, - Qt::LeftButton, Qt::LeftButton, 0); + Qt::LeftButton, Qt::LeftButton, {}); qApp->sendEvent(&dial, &moveevent); QCOMPARE( sliderspy.count(), 1); QCOMPARE( valuespy.count(), 0); @@ -118,14 +118,14 @@ void tst_QDial::sliderMoved() { //move on the right of the slider init = QPoint(dial.width()*3/4, dial.height()/2); QMouseEvent moveevent(QEvent::MouseMove, init, - Qt::LeftButton, Qt::LeftButton, 0); + Qt::LeftButton, Qt::LeftButton, {}); qApp->sendEvent(&dial, &moveevent); QCOMPARE( sliderspy.count(), 2); QCOMPARE( valuespy.count(), 0); } QMouseEvent releaseevent(QEvent::MouseButtonRelease, init, - Qt::LeftButton, Qt::LeftButton, 0); + Qt::LeftButton, Qt::LeftButton, {}); qApp->sendEvent(&dial, &releaseevent); QCOMPARE( valuespy.count(), 1); // valuechanged signal should be called at this point diff --git a/tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp b/tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp index 7e0cb99ea8..6a2c8893d2 100644 --- a/tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp +++ b/tests/auto/widgets/widgets/qdialogbuttonbox/tst_qdialogbuttonbox.cpp @@ -163,7 +163,7 @@ void tst_QDialogButtonBox::testConstructor3_data() QTest::addColumn<QDialogButtonBox::StandardButtons>("buttons"); QTest::addColumn<int>("buttonCount"); - QTest::newRow("nothing") << int(Qt::Horizontal) << (QDialogButtonBox::StandardButtons)0 << 0; + QTest::newRow("nothing") << int(Qt::Horizontal) << QDialogButtonBox::StandardButtons{} << 0; QTest::newRow("only 1") << int(Qt::Horizontal) << QDialogButtonBox::StandardButtons(QDialogButtonBox::Ok) << 1; QTest::newRow("only 1.. twice") << int(Qt::Horizontal) << (QDialogButtonBox::Ok | QDialogButtonBox::Ok) @@ -199,7 +199,7 @@ void tst_QDialogButtonBox::testConstructor4_data() QTest::addColumn<QDialogButtonBox::StandardButtons>("buttons"); QTest::addColumn<int>("buttonCount"); - QTest::newRow("nothing") << (QDialogButtonBox::StandardButtons)0 << 0; + QTest::newRow("nothing") << QDialogButtonBox::StandardButtons{} << 0; QTest::newRow("only 1") << QDialogButtonBox::StandardButtons(QDialogButtonBox::Ok) << 1; QTest::newRow("only 1.. twice") << (QDialogButtonBox::Ok | QDialogButtonBox::Ok) diff --git a/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp b/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp index bf14020b24..4fb5d262ca 100644 --- a/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp +++ b/tests/auto/widgets/widgets/qgroupbox/tst_qgroupbox.cpp @@ -387,7 +387,7 @@ void tst_QGroupBox::clicked() QStyle::SubControl(areaToHit), &testWidget); if (rect.isValid()) - QTest::mouseClick(&testWidget, Qt::LeftButton, 0, rect.center()); + QTest::mouseClick(&testWidget, Qt::LeftButton, {}, rect.center()); else QTest::mouseClick(&testWidget, Qt::LeftButton); @@ -420,7 +420,7 @@ void tst_QGroupBox::toggledVsClicked() QRect rect = groupBox.style()->subControlRect(QStyle::CC_GroupBox, &option, QStyle::SC_GroupBoxCheckBox, &groupBox); - QTest::mouseClick(&groupBox, Qt::LeftButton, 0, rect.center()); + QTest::mouseClick(&groupBox, Qt::LeftButton, {}, rect.center()); QCOMPARE(clickSpy.count(), 1); QCOMPARE(toggleSpy.count(), 2); QVERIFY(toggleTimeStamp < clickTimeStamp); @@ -500,11 +500,11 @@ void tst_QGroupBox::task_QTBUG_19170_ignoreMouseReleaseEvent() QRect rect = box.style()->subControlRect(QStyle::CC_GroupBox, &option, QStyle::SC_GroupBoxCheckBox, &box); - QTest::mouseClick(&box, Qt::LeftButton, 0, rect.center()); + QTest::mouseClick(&box, Qt::LeftButton, {}, rect.center()); QCOMPARE(box.isChecked(), true); box.setChecked(false); - QTest::mouseRelease(&box, Qt::LeftButton, 0, rect.center()); + QTest::mouseRelease(&box, Qt::LeftButton, {}, rect.center()); QCOMPARE(box.isChecked(), false); } @@ -558,19 +558,19 @@ void tst_QGroupBox::task_QTBUG_15519_propagateMouseEvents() // Without a checkbox, all mouse events should propagate parent.reset(); - QTest::mousePress(&box, Qt::LeftButton, 0, checkBoxRect.center()); + QTest::mousePress(&box, Qt::LeftButton, {}, checkBoxRect.center()); QCOMPARE(parent.mousePressed, true); parent.reset(); - QTest::mousePress(&box, Qt::LeftButton, 0, box.rect().center()); + QTest::mousePress(&box, Qt::LeftButton, {}, box.rect().center()); QCOMPARE(parent.mousePressed, true); parent.reset(); - QTest::mouseRelease(&box, Qt::LeftButton, 0, checkBoxRect.center()); + QTest::mouseRelease(&box, Qt::LeftButton, {}, checkBoxRect.center()); QCOMPARE(parent.mouseReleased, true); parent.reset(); - QTest::mouseRelease(&box, Qt::LeftButton, 0, box.rect().center()); + QTest::mouseRelease(&box, Qt::LeftButton, {}, box.rect().center()); QCOMPARE(parent.mouseReleased, true); parent.reset(); @@ -586,19 +586,19 @@ void tst_QGroupBox::task_QTBUG_15519_propagateMouseEvents() box.setCheckable(true); parent.reset(); - QTest::mousePress(&box, Qt::LeftButton, 0, checkBoxRect.center()); + QTest::mousePress(&box, Qt::LeftButton, {}, checkBoxRect.center()); QCOMPARE(parent.mousePressed, false); parent.reset(); - QTest::mousePress(&box, Qt::LeftButton, 0, box.rect().center()); + QTest::mousePress(&box, Qt::LeftButton, {}, box.rect().center()); QCOMPARE(parent.mousePressed, true); parent.reset(); - QTest::mouseRelease(&box, Qt::LeftButton, 0, checkBoxRect.center()); + QTest::mouseRelease(&box, Qt::LeftButton, {}, checkBoxRect.center()); QCOMPARE(parent.mouseReleased, false); parent.reset(); - QTest::mouseRelease(&box, Qt::LeftButton, 0, box.rect().center()); + QTest::mouseRelease(&box, Qt::LeftButton, {}, box.rect().center()); QCOMPARE(parent.mouseReleased, true); parent.reset(); diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index a8b68c18ca..bf31f12958 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -79,24 +79,22 @@ using namespace QTestPrivate; class StyleOptionTestStyle : public QCommonStyle { -private: - bool readOnly; - public: - inline StyleOptionTestStyle() : QCommonStyle(), readOnly(false) - { - } + bool readOnly = false; + mutable bool wasDrawn = false; - inline void setReadOnly(bool readOnly) + using QCommonStyle::QCommonStyle; + void setReadOnly(bool readOnly) { this->readOnly = readOnly; } - inline void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *, - const QWidget *) const + void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *, + const QWidget *) const override { switch (pe) { case PE_PanelLineEdit: + wasDrawn = true; if (readOnly) QVERIFY(opt->state & QStyle::State_ReadOnly); else @@ -322,8 +320,8 @@ protected slots: private: // keyClicks(..) is moved to QtTestCase - void psKeyClick(QWidget *target, Qt::Key key, Qt::KeyboardModifiers pressState = 0); - void psKeyClick(QTestEventList &keys, Qt::Key key, Qt::KeyboardModifiers pressState = 0); + void psKeyClick(QWidget *target, Qt::Key key, Qt::KeyboardModifiers pressState = {}); + void psKeyClick(QTestEventList &keys, Qt::Key key, Qt::KeyboardModifiers pressState = {}); bool unselectingWithLeftOrRightChangesCursorPosition(); #if QT_CONFIG(shortcut) void addKeySequenceStandardKey(QTestEventList &keys, QKeySequence::StandardKey); @@ -772,6 +770,14 @@ void tst_QLineEdit::keypress_inputMask_data() } { QTestEventList keys; + // inserting at end + addKeySequenceStandardKey(keys, QKeySequence::MoveToEndOfLine); + keys.addKeyClick(Qt::Key_Left); + keys.addKeyClick(Qt::Key_0); + QTest::newRow("insert at end") << QString("9-9-9") << keys << QString("--0") << QString(" - -0"); + } + { + QTestEventList keys; // inserting '12.12' then two backspaces addKeySequenceStandardKey(keys, QKeySequence::MoveToStartOfLine); keys.addKeyClick(Qt::Key_1); @@ -879,9 +885,6 @@ void tst_QLineEdit::hasAcceptableInputMask() qApp->sendEvent(testWidget, &lostFocus); QVERIFY(validInput); - // at the moment we don't strip the blank character if it is valid input, this makes the test between x vs X useless - QEXPECT_FAIL( "Any optional and required", "To eat blanks or not? Known issue. Task 43172", Abort); - // test requiredMask testWidget->setInputMask(requiredMask); validInput = true; @@ -2288,7 +2291,7 @@ void tst_QLineEdit::deleteSelectedText() edit.selectAll(); - QTest::keyClick(&edit, Qt::Key_Delete, 0); + QTest::keyClick(&edit, Qt::Key_Delete, {}); QVERIFY(edit.text().isEmpty()); edit.setText(text); @@ -3279,19 +3282,22 @@ void tst_QLineEdit::readOnlyStyleOption() QLineEdit *testWidget = ensureTestWidget(); bool wasReadOnly = testWidget->isReadOnly(); QStyle *oldStyle = testWidget->style(); + testWidget->show(); + QTRY_VERIFY(QTest::qWaitForWindowExposed(testWidget)); StyleOptionTestStyle myStyle; testWidget->setStyle(&myStyle); myStyle.setReadOnly(true); testWidget->setReadOnly(true); - testWidget->repaint(); - qApp->processEvents(); + testWidget->update(); + QTRY_VERIFY(myStyle.wasDrawn); + myStyle.wasDrawn = false; testWidget->setReadOnly(false); myStyle.setReadOnly(false); - testWidget->repaint(); - qApp->processEvents(); + testWidget->update(); + QTRY_VERIFY(myStyle.wasDrawn); testWidget->setReadOnly(wasReadOnly); testWidget->setStyle(oldStyle); @@ -3588,7 +3594,7 @@ void tst_QLineEdit::textMargin() QCOMPARE(bottom, b); #endif - QTest::mouseClick(&testWidget, Qt::LeftButton, 0, mousePressPos); + QTest::mouseClick(&testWidget, Qt::LeftButton, {}, mousePressPos); QTRY_COMPARE(testWidget.cursorPosition(), cursorPosition); } @@ -4502,7 +4508,7 @@ void tst_QLineEdit::clearButton() QTRY_COMPARE(filterModel->rowCount(), 1); // matches 'ab' QSignalSpy spyEdited(filterLineEdit, &QLineEdit::textEdited); const QPoint clearButtonCenterPos = QRect(QPoint(0, 0), clearButton->size()).center(); - QTest::mouseClick(clearButton, Qt::LeftButton, 0, clearButtonCenterPos); + QTest::mouseClick(clearButton, Qt::LeftButton, {}, clearButtonCenterPos); QCOMPARE(spyEdited.count(), 1); QTRY_COMPARE(clearButton->cursor().shape(), filterLineEdit->cursor().shape()); QTRY_COMPARE(filterModel->rowCount(), 3); @@ -4547,7 +4553,7 @@ void tst_QLineEdit::clearButtonVisibleAfterSettingText_QTBUG_45518() QTRY_VERIFY(clearButton->opacity() > 0); QTRY_COMPARE(clearButton->cursor().shape(), Qt::ArrowCursor); - QTest::mouseClick(clearButton, Qt::LeftButton, nullptr, clearButton->rect().center()); + QTest::mouseClick(clearButton, Qt::LeftButton, {}, clearButton->rect().center()); QTRY_COMPARE(edit.text(), QString()); QTRY_COMPARE(clearButton->opacity(), qreal(0)); diff --git a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp index 17eb281408..01d625d091 100644 --- a/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp +++ b/tests/auto/widgets/widgets/qmainwindow/tst_qmainwindow.cpp @@ -67,13 +67,13 @@ public: } void timerEvent(QTimerEvent*) { - qApp->postEvent(m_tb, new QMouseEvent(QEvent::MouseButtonPress, QPoint(6, 7), Qt::LeftButton, 0, 0)); - qApp->postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(7, 8), Qt::LeftButton, Qt::LeftButton, 0)); - qApp->postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(27, 23), Qt::LeftButton, Qt::LeftButton, 0)); - qApp->postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(30, 27), Qt::LeftButton, Qt::LeftButton, 0)); - qApp->postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(162, 109), Qt::LeftButton, Qt::LeftButton, 0)); - qApp->postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(10, 4), Qt::LeftButton, Qt::LeftButton, 0)); - qApp->postEvent(m_tb, new QMouseEvent(QEvent::MouseButtonRelease, QPoint(9, 4), Qt::LeftButton, 0, 0)); + QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseButtonPress, QPoint(6, 7), Qt::LeftButton, {}, {})); + QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(7, 8), Qt::LeftButton, Qt::LeftButton, {})); + QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(27, 23), Qt::LeftButton, Qt::LeftButton, {})); + QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(30, 27), Qt::LeftButton, Qt::LeftButton, {})); + QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(162, 109), Qt::LeftButton, Qt::LeftButton, {})); + QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseMove, QPoint(10, 4), Qt::LeftButton, Qt::LeftButton, {})); + QCoreApplication::postEvent(m_tb, new QMouseEvent(QEvent::MouseButtonRelease, QPoint(9, 4), Qt::LeftButton, {}, {})); } }; @@ -91,8 +91,8 @@ public: void timerEvent(QTimerEvent*) { - qApp->postEvent(m_w, new QMouseEvent(QEvent::MouseButtonPress, QPoint(230, 370), Qt::LeftButton, 0, 0)); - qApp->postEvent(m_w, new QMouseEvent(QEvent::MouseButtonRelease, QPoint(230, 370), Qt::LeftButton, 0, 0)); + QCoreApplication::postEvent(m_w, new QMouseEvent(QEvent::MouseButtonPress, QPoint(230, 370), Qt::LeftButton, {}, {})); + QCoreApplication::postEvent(m_w, new QMouseEvent(QEvent::MouseButtonRelease, QPoint(230, 370), Qt::LeftButton, {}, {})); } }; diff --git a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp index 9fe8cd8109..352a6314f3 100644 --- a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp +++ b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp @@ -331,7 +331,7 @@ void tst_QMdiArea::subWindowActivated() int i; for ( i = 0; i < count; ++i ) { - QWidget *widget = new QWidget(workspace, 0); + QWidget *widget = new QWidget(workspace, {}); widget->setAttribute(Qt::WA_DeleteOnClose); widget->setFocus(); workspace->addSubWindow(widget)->show(); @@ -2694,30 +2694,6 @@ void tst_QMdiArea::nativeSubWindows() foreach (QMdiSubWindow *subWindow, mdiArea.subWindowList()) QVERIFY(subWindow->internalWinId()); } - -#ifndef QT_NO_OPENGL - { - if (!QGLFormat::hasOpenGL()) - QSKIP("QGL not supported on this platform"); - - QMdiArea mdiArea; - QGLWidget *glViewport = new QGLWidget; - mdiArea.setViewport(glViewport); - mdiArea.addSubWindow(new QWidget); - mdiArea.addSubWindow(new QWidget); - mdiArea.show(); - QVERIFY(QTest::qWaitForWindowExposed(&mdiArea)); - - const QGLContext *context = glViewport->context(); - if (!context || !context->isValid()) - QSKIP("QGL is broken, cannot continue test"); - - // The viewport and all the sub-windows must be native. - QVERIFY(mdiArea.viewport()->internalWinId()); - foreach (QMdiSubWindow *subWindow, mdiArea.subWindowList()) - QVERIFY(subWindow->internalWinId()); - } -#endif } void tst_QMdiArea::task_209615() diff --git a/tests/auto/widgets/widgets/qmenu/BLACKLIST b/tests/auto/widgets/widgets/qmenu/BLACKLIST index ad6d2f340c..ba9c184a67 100644 --- a/tests/auto/widgets/widgets/qmenu/BLACKLIST +++ b/tests/auto/widgets/widgets/qmenu/BLACKLIST @@ -11,3 +11,5 @@ osx-10.13 osx-10.14 [activeSubMenuPosition] winrt +[submenuTearOffDontClose] +macos # Can't move cursor (QTBUG-76312) diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp index 823084ee43..207327f073 100644 --- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp +++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp @@ -319,12 +319,12 @@ void tst_QMenu::mouseActivation() menu.addAction("Menu Action"); menu.move(topLevel.geometry().topRight() + QPoint(50, 0)); menu.show(); - QTest::mouseClick(&menu, Qt::LeftButton, 0, menu.rect().center(), 300); + QTest::mouseClick(&menu, Qt::LeftButton, {}, menu.rect().center(), 300); QVERIFY(!menu.isVisible()); //context menus can always be accessed with right click except on windows menu.show(); - QTest::mouseClick(&menu, Qt::RightButton, 0, menu.rect().center(), 300); + QTest::mouseClick(&menu, Qt::RightButton, {}, menu.rect().center(), 300); QVERIFY(!menu.isVisible()); #ifdef Q_OS_WIN @@ -643,7 +643,7 @@ void tst_QMenu::tearOff() MenuMetrics mm(menu.data()); const int tearOffOffset = mm.fw + mm.vmargin + mm.tearOffHeight / 2; - QTest::mouseClick(menu.data(), Qt::LeftButton, 0, QPoint(10, tearOffOffset), 10); + QTest::mouseClick(menu.data(), Qt::LeftButton, {}, QPoint(10, tearOffOffset), 10); QTRY_VERIFY(menu->isTearOffMenuVisible()); QPointer<QMenu> torn = getTornOffMenu(); QVERIFY(torn); @@ -723,7 +723,7 @@ void tst_QMenu::submenuTearOffDontClose() const QPoint submenuPos(submenuRect.topLeft() + QPoint(3, 3)); // Move then click to avoid the submenu moves from causing it to close QTest::mouseMove(menu, submenuPos, 100); - QTest::mouseClick(menu, Qt::LeftButton, 0, submenuPos, 100); + QTest::mouseClick(menu, Qt::LeftButton, {}, submenuPos, 100); QVERIFY(QTest::qWaitFor([&]() { return submenu->window()->windowHandle(); })); QVERIFY(QTest::qWaitForWindowActive(submenu)); // Make sure we enter the submenu frame directly on the tear-off area @@ -888,7 +888,7 @@ void tst_QMenu::task176201_clear() QAction *action = menu.addAction("test"); menu.connect(action, SIGNAL(triggered()), SLOT(clear())); menu.popup(QPoint()); - QTest::mouseClick(&menu, Qt::LeftButton, 0, menu.rect().center()); + QTest::mouseClick(&menu, Qt::LeftButton, {}, menu.rect().center()); } void tst_QMenu::task250673_activeMultiColumnSubMenuPosition() @@ -1066,6 +1066,10 @@ static inline QByteArray msgGeometryIntersects(const QRect &r1, const QRect &r2) void tst_QMenu::pushButtonPopulateOnAboutToShow() { +#ifdef Q_OS_MACOS + QSKIP("Popup menus may partially overlap the button on macOS, and that's okey"); +#endif + QPushButton b("Test PushButton"); b.setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint); @@ -1212,13 +1216,13 @@ void tst_QMenu::click_while_dismissing_submenu() QVERIFY(sub.isVisible()); QVERIFY(QTest::qWaitForWindowExposed(&sub)); //press over the submenu entry - QTest::mousePress(menuWindow, Qt::LeftButton, 0, menu.rect().center() + QPoint(0,2), 300); + QTest::mousePress(menuWindow, Qt::LeftButton, {}, menu.rect().center() + QPoint(0, 2), 300); //move over the main action QTest::mouseMove(menuWindow, menu.rect().center() - QPoint(0,2)); QVERIFY(menuHiddenSpy.wait()); //the submenu must have been hidden for the bug to be triggered QVERIFY(!sub.isVisible()); - QTest::mouseRelease(menuWindow, Qt::LeftButton, 0, menu.rect().center() - QPoint(0,2), 300); + QTest::mouseRelease(menuWindow, Qt::LeftButton, {}, menu.rect().center() - QPoint(0, 2), 300); QCOMPARE(spy.count(), 1); } #endif @@ -1476,7 +1480,7 @@ void tst_QMenu::QTBUG_56917_wideSubmenuScreenNumber() menu.popup(screen->geometry().center()); QVERIFY(QTest::qWaitForWindowExposed(&menu)); QVERIFY(menu.isVisible()); - QTest::mouseClick(&menu, Qt::LeftButton, 0, menu.actionGeometry(action).center()); + QTest::mouseClick(&menu, Qt::LeftButton, {}, menu.actionGeometry(action).center()); QTest::qWait(100); QVERIFY(QTest::qWaitForWindowExposed(&submenu)); QVERIFY(submenu.isVisible()); @@ -1688,7 +1692,7 @@ void tst_QMenu::tearOffMenuNotDisplayed() MenuMetrics mm(menu.data()); const int tearOffOffset = mm.fw + mm.vmargin + mm.tearOffHeight / 2; - QTest::mouseClick(menu.data(), Qt::LeftButton, 0, QPoint(10, tearOffOffset), 10); + QTest::mouseClick(menu.data(), Qt::LeftButton, {}, QPoint(10, tearOffOffset), 10); QTRY_VERIFY(menu->isTearOffMenuVisible()); QPointer<QMenu> torn = getTornOffMenu(); QVERIFY(torn); diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp index 8b372a78cf..8cbe821a68 100644 --- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp +++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp @@ -1267,7 +1267,7 @@ void tst_QMenuBar::check_menuPosition() const QPoint bottomRight = mb->actionGeometry(menu.menuAction()).bottomRight() - QPoint(1, 1); const QPoint localPos = widgetToWindowPos(mb, bottomRight); const QPoint globalPos = w.mapToGlobal(localPos); - QTest::mouseClick(w.windowHandle(), Qt::LeftButton, 0, localPos); + QTest::mouseClick(w.windowHandle(), Qt::LeftButton, {}, localPos); QTRY_VERIFY(menu.isActiveWindow()); QCOMPARE(menu.geometry().right() - 1, globalPos.x()); menu.close(); @@ -1332,9 +1332,9 @@ void tst_QMenuBar::task256322_highlight() const QPoint filePos = menuBarActionWindowPos(win.menuBar(), file); QWindow *window = win.windowHandle(); - QTest::mousePress(window, Qt::LeftButton, 0, filePos); + QTest::mousePress(window, Qt::LeftButton, {}, filePos); QTest::mouseMove(window, filePos); - QTest::mouseRelease(window, Qt::LeftButton, 0, filePos); + QTest::mouseRelease(window, Qt::LeftButton, {}, filePos); QTRY_VERIFY(menu.isVisible()); QVERIFY(!menu2.isVisible()); QCOMPARE(win.menuBar()->activeAction(), file); @@ -1507,11 +1507,11 @@ void tst_QMenuBar::closeOnSecondClickAndOpenOnThirdClick() // QTBUG-32807, menu QWindow *window = mainWindow.windowHandle(); QTest::mouseMove(window, center); - QTest::mouseClick(window, Qt::LeftButton, 0, center); + QTest::mouseClick(window, Qt::LeftButton, {}, center); QTRY_VERIFY(fileMenu->isVisible()); - QTest::mouseClick(window, Qt::LeftButton, 0, fileMenu->mapFromGlobal(globalPos)); + QTest::mouseClick(window, Qt::LeftButton, {}, fileMenu->mapFromGlobal(globalPos)); QTRY_VERIFY(!fileMenu->isVisible()); - QTest::mouseClick(window, Qt::LeftButton, 0, center); + QTest::mouseClick(window, Qt::LeftButton, {}, center); QTRY_VERIFY(fileMenu->isVisible()); } @@ -1600,12 +1600,12 @@ void tst_QMenuBar::taskQTBUG53205_crashReparentNested() QApplication::setActiveWindow(&mainWindow); // they can't be windows - QWidget hiddenParent(&mainWindow, 0); + QWidget hiddenParent(&mainWindow, {}); //this one is going to be moved around - QWidget movingParent(&hiddenParent, 0); + QWidget movingParent(&hiddenParent, {}); //set up the container widget - QWidget containerWidget(&movingParent,0); + QWidget containerWidget(&movingParent, {}); //set the new parent, a window QScopedPointer<QWidget> windowedParent; @@ -1616,7 +1616,7 @@ void tst_QMenuBar::taskQTBUG53205_crashReparentNested() QVERIFY(QTest::qWaitForWindowExposed(windowedParent.data())); //set the "container", can't be a window - QWidget containedWidget(&containerWidget, 0); + QWidget containedWidget(&containerWidget, {}); taskQTBUG53205MenuBar = new QMenuBar(&containedWidget); @@ -1624,13 +1624,13 @@ void tst_QMenuBar::taskQTBUG53205_crashReparentNested() //now, move things around //from : QMainWindow<-hiddenParent<-movingParent<-containerWidget<-containedWidget<-menuBar //to windowedParent<-movingParent<-containerWidget<-containedWidget<-menuBar - movingParent.setParent(windowedParent.data(),0); + movingParent.setParent(windowedParent.data(), {}); // this resets the parenting and the menu bar's window taskQTBUG53205MenuBar->setParent(nullptr); taskQTBUG53205MenuBar->setParent(&containedWidget); //from windowedParent<-movingParent<-containerWidget<-containedWidget<-menuBar //to : QMainWindow<-hiddenParent<-movingParent<-containerWidget<-containedWidget<-menuBar - movingParent.setParent(&hiddenParent,0); + movingParent.setParent(&hiddenParent, {}); windowedParent.reset(); //make the old window invalid // trigger the aciton, reset the menu bar's window, this used to crash here. testMenus.actions[0]->trigger(); diff --git a/tests/auto/widgets/widgets/qopenglwidget/qopenglwidget.pro b/tests/auto/widgets/widgets/qopenglwidget/qopenglwidget.pro index 2d4cff9e10..039f5a71b8 100644 --- a/tests/auto/widgets/widgets/qopenglwidget/qopenglwidget.pro +++ b/tests/auto/widgets/widgets/qopenglwidget/qopenglwidget.pro @@ -1,5 +1,5 @@ CONFIG += testcase TARGET = tst_qopenglwidget -QT += gui-private core-private testlib widgets +QT += opengl gui-private core-private testlib widgets SOURCES += tst_qopenglwidget.cpp diff --git a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp index 17a5fe2cd9..e96e292525 100644 --- a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp +++ b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp @@ -26,7 +26,7 @@ ** ****************************************************************************/ -#include <QtWidgets/QOpenGLWidget> +#include <QtOpenGL/QOpenGLWidget> #include <QtGui/QOpenGLFunctions> #include <QtGui/QPainter> #include <QtGui/QScreen> diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp index 336b6ebfd5..a86784f2ec 100644 --- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp +++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp @@ -155,6 +155,7 @@ private slots: #if QT_CONFIG(scrollbar) void updateAfterChangeCenterOnScroll(); #endif + void updateCursorPositionAfterEdit(); private: void createSelection(); @@ -1802,5 +1803,50 @@ void tst_QPlainTextEdit::updateAfterChangeCenterOnScroll() #endif +void tst_QPlainTextEdit::updateCursorPositionAfterEdit() +{ + QPlainTextEdit plaintextEdit; + plaintextEdit.setPlainText("some text some text\nsome text some text"); + + const auto initialPosition = 1; + + // select some text + auto cursor = plaintextEdit.textCursor(); + cursor.setPosition(initialPosition, QTextCursor::MoveAnchor); + cursor.setPosition(initialPosition + 3, QTextCursor::KeepAnchor); + plaintextEdit.setTextCursor(cursor); + QVERIFY(plaintextEdit.textCursor().hasSelection()); + + QTest::keyClick(&plaintextEdit, Qt::Key_Delete); + QTest::keyClick(&plaintextEdit, Qt::Key_Down); + QTest::keyClick(&plaintextEdit, Qt::Key_Up); + + // Moving the cursor down and up should bring it to the initial position + QCOMPARE(plaintextEdit.textCursor().position(), initialPosition); + + // Test the same with backspace + cursor = plaintextEdit.textCursor(); + cursor.setPosition(initialPosition + 3, QTextCursor::KeepAnchor); + plaintextEdit.setTextCursor(cursor); + QVERIFY(plaintextEdit.textCursor().hasSelection()); + + QTest::keyClick(&plaintextEdit, Qt::Key_Backspace); + QTest::keyClick(&plaintextEdit, Qt::Key_Down); + QTest::keyClick(&plaintextEdit, Qt::Key_Up); + + // Moving the cursor down and up should bring it to the initial position + QCOMPARE(plaintextEdit.textCursor().position(), initialPosition); + + // Test insertion + const QString txt("txt"); + QApplication::clipboard()->setText(txt); + plaintextEdit.paste(); + QTest::keyClick(&plaintextEdit, Qt::Key_Down); + QTest::keyClick(&plaintextEdit, Qt::Key_Up); + + // The curser should move back to the end of the copied text + QCOMPARE(plaintextEdit.textCursor().position(), initialPosition + txt.length()); +} + QTEST_MAIN(tst_QPlainTextEdit) #include "tst_qplaintextedit.moc" diff --git a/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp b/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp index 339ff293f4..2452bc34c5 100644 --- a/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp +++ b/tests/auto/widgets/widgets/qscrollbar/tst_qscrollbar.cpp @@ -120,11 +120,11 @@ void tst_QScrollBar::task_209492() const QPoint pressPoint(verticalScrollBar->width() / 2, verticalScrollBar->height() - 10); const QPoint globalPressPoint = verticalScrollBar->mapToGlobal(globalPressPoint); QMouseEvent mousePressEvent(QEvent::MouseButtonPress, pressPoint, globalPressPoint, - Qt::LeftButton, Qt::LeftButton, 0); + Qt::LeftButton, Qt::LeftButton, {}); QApplication::sendEvent(verticalScrollBar, &mousePressEvent); QTest::qWait(1); QMouseEvent mouseReleaseEvent(QEvent::MouseButtonRelease, pressPoint, globalPressPoint, - Qt::LeftButton, Qt::LeftButton, 0); + Qt::LeftButton, Qt::LeftButton, {}); QApplication::sendEvent(verticalScrollBar, &mouseReleaseEvent); // Check that the action was triggered once. @@ -189,11 +189,11 @@ void tst_QScrollBar::QTBUG_42871() const QPoint pressPoint(scrollBarWidget.width() / 2, scrollBarWidget.height() - 10); const QPoint globalPressPoint = scrollBarWidget.mapToGlobal(pressPoint); QMouseEvent mousePressEvent(QEvent::MouseButtonPress, pressPoint, globalPressPoint, - Qt::LeftButton, Qt::LeftButton, 0); + Qt::LeftButton, Qt::LeftButton, {}); QApplication::sendEvent(&scrollBarWidget, &mousePressEvent); QTest::qWait(1); QMouseEvent mouseReleaseEvent(QEvent::MouseButtonRelease, pressPoint, globalPressPoint, - Qt::LeftButton, Qt::LeftButton, 0); + Qt::LeftButton, Qt::LeftButton, {}); QApplication::sendEvent(&scrollBarWidget, &mouseReleaseEvent); // Check that the action was triggered once. QCOMPARE(myHandler.updatesCount, 1); diff --git a/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp b/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp index b5d2e68118..5b49e3484c 100644 --- a/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp +++ b/tests/auto/widgets/widgets/qspinbox/tst_qspinbox.cpp @@ -505,26 +505,27 @@ void tst_QSpinBox::valueChangedHelper(int value) actualValues << value; } -class MySpinBox: public QSpinBox +class ReadOnlyChangeTracker: public QSpinBox { public: - MySpinBox(QWidget *parent = 0) : QSpinBox(parent) {} + ReadOnlyChangeTracker(QWidget *parent = 0) : QSpinBox(parent) {} void changeEvent(QEvent *ev) { - eventsReceived.append(ev->type()); + if (ev->type() == QEvent::ReadOnlyChange) + ++readOnlyChangeEventCount; } - QList<QEvent::Type> eventsReceived; + int readOnlyChangeEventCount = 0; }; void tst_QSpinBox::setReadOnly() { - MySpinBox spin(0); + ReadOnlyChangeTracker spin(0); spin.show(); QTest::keyClick(&spin, Qt::Key_Up); QCOMPARE(spin.value(), 1); spin.setReadOnly(true); #ifndef Q_OS_WINRT // QTBUG-68297 - QCOMPARE(spin.eventsReceived, QList<QEvent::Type>() << QEvent::ReadOnlyChange); + QCOMPARE(spin.readOnlyChangeEventCount, 1); #endif QTest::keyClick(&spin, Qt::Key_Up); QCOMPARE(spin.value(), 1); @@ -532,7 +533,7 @@ void tst_QSpinBox::setReadOnly() QCOMPARE(spin.value(), 2); spin.setReadOnly(false); #ifndef Q_OS_WINRT // QTBUG-68297 - QCOMPARE(spin.eventsReceived, QList<QEvent::Type>() << QEvent::ReadOnlyChange << QEvent::ReadOnlyChange); + QCOMPARE(spin.readOnlyChangeEventCount, 2); #endif QTest::keyClick(&spin, Qt::Key_Up); QCOMPARE(spin.value(), 3); diff --git a/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp b/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp index 550cca8145..bc1496d0f6 100644 --- a/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp +++ b/tests/auto/widgets/widgets/qtabbar/tst_qtabbar.cpp @@ -60,6 +60,10 @@ private slots: void removeTab_data(); void removeTab(); + void hideTab_data(); + void hideTab(); + void hideAllTabs(); + void setElideMode_data(); void setElideMode(); void sizeHints(); @@ -244,6 +248,73 @@ void tst_QTabBar::removeTab() QTEST(tabbar.currentIndex(), "finalIndex"); } +void tst_QTabBar::hideTab_data() +{ + QTest::addColumn<int>("currentIndex"); + QTest::addColumn<int>("hideIndex"); + QTest::addColumn<int>("spyCount"); + QTest::addColumn<int>("finalIndex"); + + QTest::newRow("hideEnd") << 0 << 2 << 0 << 0; + QTest::newRow("hideEndWithIndexOnEnd") << 2 << 2 << 1 << 1; + QTest::newRow("hideMiddle") << 2 << 1 << 0 << 2; + QTest::newRow("hideMiddleOnMiddle") << 1 << 1 << 1 << 2; + QTest::newRow("hideFirst") << 2 << 0 << 0 << 2; + QTest::newRow("hideFirstOnFirst") << 0 << 0 << 1 << 1; +} + +void tst_QTabBar::hideTab() +{ + QTabBar tabbar; + + QFETCH(int, currentIndex); + QFETCH(int, hideIndex); + tabbar.addTab("foo"); + tabbar.addTab("bar"); + tabbar.addTab("baz"); + tabbar.setCurrentIndex(currentIndex); + QSignalSpy spy(&tabbar, &QTabBar::currentChanged); + tabbar.setTabVisible(hideIndex, false); + QTEST(spy.count(), "spyCount"); + QTEST(tabbar.currentIndex(), "finalIndex"); +} + +void tst_QTabBar::hideAllTabs() +{ + QTabBar tabbar; + + tabbar.addTab("foo"); + tabbar.addTab("bar"); + tabbar.addTab("baz"); + tabbar.setCurrentIndex(0); + + // Check we don't crash trying to hide an unexistant tab + QSize prevSizeHint = tabbar.sizeHint(); + tabbar.setTabVisible(3, false); + QCOMPARE(tabbar.currentIndex(), 0); + QSize sizeHint = tabbar.sizeHint(); + QVERIFY(sizeHint.width() == prevSizeHint.width()); + prevSizeHint = sizeHint; + + tabbar.setTabVisible(1, false); + QCOMPARE(tabbar.currentIndex(), 0); + sizeHint = tabbar.sizeHint(); + QVERIFY(sizeHint.width() < prevSizeHint.width()); + prevSizeHint = sizeHint; + + tabbar.setTabVisible(2, false); + QCOMPARE(tabbar.currentIndex(), 0); + sizeHint = tabbar.sizeHint(); + QVERIFY(sizeHint.width() < prevSizeHint.width()); + prevSizeHint = sizeHint; + + tabbar.setTabVisible(0, false); + // We cannot set currentIndex < 0 + QCOMPARE(tabbar.currentIndex(), 0); + sizeHint = tabbar.sizeHint(); + QVERIFY(sizeHint.width() < prevSizeHint.width()); +} + void tst_QTabBar::setElideMode_data() { QTest::addColumn<int>("tabElideMode"); @@ -605,7 +676,7 @@ void tst_QTabBar::changeTitleWhileDoubleClickingTab() QPoint tabPos = bar.tabRect(0).center(); for(int i=0; i < 10; i++) - QTest::mouseDClick(&bar, Qt::LeftButton, 0, tabPos); + QTest::mouseDClick(&bar, Qt::LeftButton, {}, tabPos); } class Widget10052 : public QWidget @@ -655,12 +726,12 @@ void tst_QTabBar::tabBarClicked() while (button <= Qt::MaxMouseButton) { const QPoint tabPos = tabBar.tabRect(0).center(); - QTest::mouseClick(&tabBar, button, 0, tabPos); + QTest::mouseClick(&tabBar, button, {}, tabPos); QCOMPARE(clickSpy.count(), 1); QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), 0); QCOMPARE(doubleClickSpy.count(), 0); - QTest::mouseDClick(&tabBar, button, 0, tabPos); + QTest::mouseDClick(&tabBar, button, {}, tabPos); QCOMPARE(clickSpy.count(), 1); QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), 0); QCOMPARE(doubleClickSpy.count(), 1); @@ -668,12 +739,12 @@ void tst_QTabBar::tabBarClicked() const QPoint barPos(tabBar.tabRect(0).right() + 5, tabBar.tabRect(0).center().y()); - QTest::mouseClick(&tabBar, button, 0, barPos); + QTest::mouseClick(&tabBar, button, {}, barPos); QCOMPARE(clickSpy.count(), 1); QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), -1); QCOMPARE(doubleClickSpy.count(), 0); - QTest::mouseDClick(&tabBar, button, 0, barPos); + QTest::mouseDClick(&tabBar, button, {}, barPos); QCOMPARE(clickSpy.count(), 1); QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), -1); QCOMPARE(doubleClickSpy.count(), 1); diff --git a/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp b/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp index a37042aeca..28b8bfc6b3 100644 --- a/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp +++ b/tests/auto/widgets/widgets/qtabwidget/tst_qtabwidget.cpp @@ -81,6 +81,7 @@ private slots: void addRemoveTab(); void tabPosition(); void tabEnabled(); + void tabHidden(); void tabText(); void tabShape(); void tabTooltip(); @@ -246,6 +247,30 @@ void tst_QTabWidget::tabEnabled() removePage(index); } +void tst_QTabWidget::tabHidden() +{ + // Test bad arguments + QVERIFY(!tw->isTabVisible(-1)); + tw->setTabVisible(-1, false); + QVERIFY(!tw->isTabVisible(tw->count())); + tw->setTabVisible(tw->count(), false); + + const int index = addPage(); + + tw->setTabVisible(index, true); + QVERIFY(tw->isTabVisible(index)); + tw->setTabVisible(index, false); + QVERIFY(!tw->isTabVisible(index)); + tw->setTabVisible(index, true); + QVERIFY(tw->isTabVisible(index)); + + removePage(index); + + for (int i = 0; i < tw->count(); ++i) { + QVERIFY(tw->isTabVisible(i)); + } +} + void tst_QTabWidget::tabText() { // Test bad arguments @@ -668,12 +693,12 @@ void tst_QTabWidget::tabBarClicked() while (button <= Qt::MaxMouseButton) { const QPoint tabPos = tabBar.tabRect(0).center(); - QTest::mouseClick(&tabBar, button, 0, tabPos); + QTest::mouseClick(&tabBar, button, {}, tabPos); QCOMPARE(clickSpy.count(), 1); QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), 0); QCOMPARE(doubleClickSpy.count(), 0); - QTest::mouseDClick(&tabBar, button, 0, tabPos); + QTest::mouseDClick(&tabBar, button, {}, tabPos); QCOMPARE(clickSpy.count(), 1); QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), 0); QCOMPARE(doubleClickSpy.count(), 1); @@ -681,12 +706,12 @@ void tst_QTabWidget::tabBarClicked() const QPoint barPos(tabBar.tabRect(0).right() + 5, tabBar.tabRect(0).center().y()); - QTest::mouseClick(&tabBar, button, 0, barPos); + QTest::mouseClick(&tabBar, button, {}, barPos); QCOMPARE(clickSpy.count(), 1); QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), -1); QCOMPARE(doubleClickSpy.count(), 0); - QTest::mouseDClick(&tabBar, button, 0, barPos); + QTest::mouseDClick(&tabBar, button, {}, barPos); QCOMPARE(clickSpy.count(), 1); QCOMPARE(clickSpy.takeFirst().takeFirst().toInt(), -1); QCOMPARE(doubleClickSpy.count(), 1); diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp index cfd8132d46..485a0b0f93 100644 --- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp @@ -760,7 +760,7 @@ void tst_QTextEdit::cursorPositionChanged() ed->setTextCursor(cursor); spy.clear(); QVERIFY(!ed->textCursor().hasSelection()); - QTest::mouseDClick(ed->viewport(), Qt::LeftButton, 0, ed->cursorRect().center()); + QTest::mouseDClick(ed->viewport(), Qt::LeftButton, {}, ed->cursorRect().center()); QVERIFY(ed->textCursor().hasSelection()); QCOMPARE(spy.count(), 1); diff --git a/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp b/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp index 1e71f92361..1d5ac7c819 100644 --- a/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp +++ b/tests/auto/widgets/widgets/qtoolbar/tst_qtoolbar.cpp @@ -553,7 +553,7 @@ void tst_QToolBar::actionGeometry() QToolBarExtension *extension = extensions.at(0); if (extension->isVisible()) { QRect rect0 = extension->geometry(); - QTest::mouseClick( extension, Qt::LeftButton, 0, rect0.center(), -1 ); + QTest::mouseClick( extension, Qt::LeftButton, {}, rect0.center(), -1 ); QApplication::processEvents(); popupMenu = qobject_cast<QMenu *>(extension->menu()); rect01 = popupMenu->actionGeometry(&action1); @@ -875,7 +875,7 @@ void tst_QToolBar::actionTriggered() QToolBarExtension *extension = extensions.at(0); if (extension->isVisible()) { QRect rect0 = extension->geometry(); - QTest::mouseClick( extension, Qt::LeftButton, 0, rect0.center(), -1 ); + QTest::mouseClick( extension, Qt::LeftButton, {}, rect0.center(), -1 ); QApplication::processEvents(); popupMenu = qobject_cast<QMenu *>(extension->menu()); rect01 = popupMenu->actionGeometry(&action1); @@ -916,28 +916,28 @@ void tst_QToolBar::actionTriggered() if (!rect01.isValid()) QTest::mouseClick(button1, Qt::LeftButton); else - QTest::mouseClick(popupMenu, Qt::LeftButton, 0, rect01.center(), -1 ); + QTest::mouseClick(popupMenu, Qt::LeftButton, {}, rect01.center(), -1 ); QCOMPARE(::triggered, &action1); ::triggered = 0; if (!rect02.isValid()) QTest::mouseClick(button2, Qt::LeftButton); else - QTest::mouseClick(popupMenu, Qt::LeftButton, 0, rect02.center(), -1 ); + QTest::mouseClick(popupMenu, Qt::LeftButton, {}, rect02.center(), -1 ); QCOMPARE(::triggered, &action2); ::triggered = 0; if (!rect03.isValid()) QTest::mouseClick(button3, Qt::LeftButton); else - QTest::mouseClick(popupMenu, Qt::LeftButton, 0, rect03.center(), -1 ); + QTest::mouseClick(popupMenu, Qt::LeftButton, {}, rect03.center(), -1 ); QCOMPARE(::triggered, &action3); ::triggered = 0; if (!rect04.isValid()) QTest::mouseClick(button4, Qt::LeftButton); else - QTest::mouseClick(popupMenu, Qt::LeftButton, 0, rect04.center(), -1 ); + QTest::mouseClick(popupMenu, Qt::LeftButton, {}, rect04.center(), -1 ); QCOMPARE(::triggered, &action4); } diff --git a/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp b/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp index 32a86993df..ed4df2fc23 100644 --- a/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp +++ b/tests/auto/widgets/widgets/qtoolbutton/tst_qtoolbutton.cpp @@ -215,14 +215,14 @@ void tst_QToolButton::task176137_autoRepeatOfAction() QSignalSpy spy(&action,SIGNAL(triggered())); QTest::mousePress (toolButton, Qt::LeftButton); - QTest::mouseRelease (toolButton, Qt::LeftButton, 0, QPoint (), 2000); + QTest::mouseRelease (toolButton, Qt::LeftButton, {}, QPoint (), 2000); QCOMPARE(spy.count(),1); // try again with auto repeat toolButton->setAutoRepeat (true); QSignalSpy repeatSpy(&action,SIGNAL(triggered())); // new spy QTest::mousePress (toolButton, Qt::LeftButton); - QTest::mouseRelease (toolButton, Qt::LeftButton, 0, QPoint (), 3000); + QTest::mouseRelease (toolButton, Qt::LeftButton, {}, QPoint (), 3000); const qreal expected = (3000 - toolButton->autoRepeatDelay()) / toolButton->autoRepeatInterval() + 1; //we check that the difference is small (on some systems timers are not super accurate) qreal diff = (expected - repeatSpy.count()) / expected; @@ -242,7 +242,7 @@ void tst_QToolButton::sendMouseClick() } if (!m_menu->isVisible()) return; - QTest::mouseClick(m_menu.data(), Qt::LeftButton, 0, QPoint(7, 7)); + QTest::mouseClick(m_menu.data(), Qt::LeftButton, {}, QPoint(7, 7)); if (QTimer *timer = qobject_cast<QTimer *>(sender())) { timer->stop(); timer->deleteLater(); |