summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets')
-rw-r--r--tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp2
-rw-r--r--tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp16
-rw-r--r--tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp58
-rw-r--r--tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp10
-rw-r--r--tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp157
-rw-r--r--tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp78
-rw-r--r--tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp2
-rw-r--r--tests/auto/widgets/util/qscroller/tst_qscroller.cpp157
-rw-r--r--tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp68
-rw-r--r--tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp15
-rw-r--r--tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp116
-rw-r--r--tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp2
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp2
-rw-r--r--tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp2
14 files changed, 479 insertions, 206 deletions
diff --git a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
index 1af3bade0e..10a3746e36 100644
--- a/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
+++ b/tests/auto/widgets/dialogs/qdialog/tst_qdialog.cpp
@@ -607,7 +607,7 @@ void tst_QDialog::snapToDefaultButton()
+ QPoint(100, 100), QSize(200, 200));
const QPoint startingPos = dialogGeometry.bottomRight() + QPoint(100, 100);
QCursor::setPos(startingPos);
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
// On OS X we use CGEventPost to move the cursor, it needs at least
// some time before the event handled and the position really set.
QTest::qWait(100);
diff --git a/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp b/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp
index 76314564f1..543128915e 100644
--- a/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp
+++ b/tests/auto/widgets/dialogs/qmessagebox/tst_qmessagebox.cpp
@@ -51,7 +51,7 @@ private slots:
void about();
void detailsText();
void detailsButtonText();
- void expandDetails_QTBUG_32473();
+ void expandDetailsWithoutMoving();
#ifndef Q_OS_MAC
void shortcut();
@@ -499,7 +499,7 @@ void tst_QMessageBox::detailsButtonText()
}
}
-void tst_QMessageBox::expandDetails_QTBUG_32473()
+void tst_QMessageBox::expandDetailsWithoutMoving() // QTBUG-32473
{
tst_ResizingMessageBox box;
box.setDetailedText("bla");
@@ -516,18 +516,14 @@ void tst_QMessageBox::expandDetails_QTBUG_32473()
auto moreButton = *it;
QVERIFY(QTest::qWaitForWindowExposed(&box));
+ QTRY_VERIFY2(!box.geometry().topLeft().isNull(), "window manager is expected to decorate and position the dialog");
QRect geom = box.geometry();
box.resized = false;
+ // now click the "more" button, and verify that the dialog resizes but does not move
moreButton->click();
QTRY_VERIFY(box.resized);
- // After we receive the expose event for a second widget, it's likely
- // that the window manager is also done manipulating the first QMessageBox.
- QWidget fleece;
- fleece.show();
- QVERIFY(QTest::qWaitForWindowExposed(&fleece));
- if (geom.topLeft() == box.geometry().topLeft())
- QTest::qWait(500);
- QCOMPARE(geom.topLeft(), box.geometry().topLeft());
+ QVERIFY(box.geometry().height() > geom.height());
+ QCOMPARE(box.geometry().topLeft(), geom.topLeft());
}
void tst_QMessageBox::incorrectDefaultButton()
diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
index 44b728a042..ba4c1473e8 100644
--- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
+++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp
@@ -153,6 +153,7 @@ private slots:
void currentFollowsIndexWidget();
void checkFocusAfterActivationChanges_data();
void checkFocusAfterActivationChanges();
+ void dragSelectAfterNewPress();
private:
static QAbstractItemView *viewFromString(const QByteArray &viewType, QWidget *parent = nullptr)
{
@@ -2553,5 +2554,62 @@ void tst_QAbstractItemView::checkFocusAfterActivationChanges()
QVERIFY(view->hasFocus());
}
+void tst_QAbstractItemView::dragSelectAfterNewPress()
+{
+ QStandardItemModel model;
+ for (int i = 0; i < 10; ++i) {
+ QStandardItem *item = new QStandardItem(QString::number(i));
+ model.setItem(i, 0, item);
+ }
+
+ QListView view;
+ view.setFixedSize(160, 650); // Minimum width for windows with frame on Windows 8
+ view.setSelectionMode(QListView::ExtendedSelection);
+ view.setModel(&model);
+ centerOnScreen(&view);
+ moveCursorAway(&view);
+ view.show();
+ QVERIFY(QTest::qWaitForWindowExposed(&view));
+
+ QModelIndex index0 = model.index(0, 0);
+ QModelIndex index2 = model.index(2, 0);
+
+ view.setCurrentIndex(index0);
+ QCOMPARE(view.currentIndex(), index0);
+
+ // Select item 0 using a single click
+ QTest::mouseClick(view.viewport(), Qt::LeftButton, Qt::NoModifier,
+ view.visualRect(index0).center());
+ QCOMPARE(view.currentIndex(), index0);
+
+ // Press to select item 2
+ QTest::mousePress(view.viewport(), Qt::LeftButton, Qt::ShiftModifier,
+ view.visualRect(index2).center());
+ QCOMPARE(view.currentIndex(), index2);
+
+ // Verify that the selection worked OK
+ QModelIndexList selected = view.selectionModel()->selectedIndexes();
+ QCOMPARE(selected.count(), 3);
+ for (int i = 0; i < 2; ++i)
+ QVERIFY(selected.contains(model.index(i, 0)));
+
+ QModelIndex index5 = model.index(5, 0);
+ const QPoint releasePos = view.visualRect(index5).center();
+ // The mouse move event has to be created manually because the QTest framework does not
+ // contain a function for mouse moves with buttons pressed
+ QMouseEvent moveEvent2(QEvent::MouseMove, releasePos, Qt::NoButton, Qt::LeftButton,
+ Qt::ShiftModifier);
+ const bool moveEventReceived = qApp->notify(view.viewport(), &moveEvent2);
+ QVERIFY(moveEventReceived);
+ QTest::mouseRelease(view.viewport(), Qt::LeftButton, Qt::ShiftModifier, releasePos);
+ QCOMPARE(view.currentIndex(), index5);
+
+ // Verify that the selection worked OK
+ selected = view.selectionModel()->selectedIndexes();
+ QCOMPARE(selected.count(), 6);
+ for (int i = 0; i < 5; ++i)
+ QVERIFY(selected.contains(model.index(i, 0)));
+}
+
QTEST_MAIN(tst_QAbstractItemView)
#include "tst_qabstractitemview.moc"
diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
index 95501136cc..760dcac608 100644
--- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
+++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp
@@ -303,6 +303,12 @@ public:
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override
{
+ if (onlyValidCalls) {
+ Q_ASSERT(row >= 0);
+ Q_ASSERT(column >= 0);
+ Q_ASSERT(row < rows);
+ Q_ASSERT(column < cols);
+ }
if (row < 0 || column < 0 || (level(parent) > levels) || column >= cols || row >= rows) {
return QModelIndex();
}
@@ -411,6 +417,7 @@ public:
mutable bool fetched = false;
bool decorationsEnabled = false;
bool statusTipsEnabled = false;
+ bool onlyValidCalls = false;
};
// Testing get/set functions
@@ -2459,6 +2466,7 @@ void tst_QTreeView::hiddenItems()
void tst_QTreeView::spanningItems()
{
QtTestModel model(10, 10);
+ model.onlyValidCalls = true;
QTreeView view;
view.setModel(&model);
view.show();
@@ -2498,6 +2506,8 @@ void tst_QTreeView::spanningItems()
}
}
QCOMPARE(view.sizeHintForColumn(0), w);
+
+ view.repaint(); // to check that this doesn't hit any assert
}
void tst_QTreeView::selectionOrderTest()
diff --git a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
index 8a5eff3fac..9ab7e4e315 100644
--- a/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
+++ b/tests/auto/widgets/kernel/qapplication/tst_qapplication.cpp
@@ -93,7 +93,11 @@ private slots:
void quitOnLastWindowClosed();
void closeAllWindows();
void testDeleteLater();
- void testDeleteLaterProcessEvents();
+ void testDeleteLaterProcessEvents1();
+ void testDeleteLaterProcessEvents2();
+ void testDeleteLaterProcessEvents3();
+ void testDeleteLaterProcessEvents4();
+ void testDeleteLaterProcessEvents5();
#if QT_CONFIG(library)
void libraryPaths();
@@ -1225,6 +1229,11 @@ void DeleteLaterWidget::runTest()
QCoreApplication::processEvents();
+ // At this point, the event queue is empty. As we want a deferred
+ // deletion to occur before the timer event, we should provoke the
+ // event dispatcher for the next spin.
+ QCoreApplication::eventDispatcher()->interrupt();
+
QVERIFY(!stillAlive); // verify at the end to make test terminate
}
@@ -1254,8 +1263,10 @@ void tst_QApplication::testDeleteLater()
QObject *stillAlive = wgt->findChild<QObject*>("deleteLater");
QVERIFY(stillAlive);
+ wgt->show();
QCoreApplication::exec();
+ QVERIFY(wgt->isHidden());
delete wgt;
}
@@ -1333,10 +1344,8 @@ public slots:
}
};
-void tst_QApplication::testDeleteLaterProcessEvents()
+void tst_QApplication::testDeleteLaterProcessEvents1()
{
- int argc = 0;
-
// Calling processEvents() with no event dispatcher does nothing.
QObject *object = new QObject;
QPointer<QObject> p(object);
@@ -1344,75 +1353,85 @@ void tst_QApplication::testDeleteLaterProcessEvents()
QApplication::processEvents();
QVERIFY(p);
delete object;
+}
- {
- QApplication app(argc, nullptr);
- // If you call processEvents() with an event dispatcher present, but
- // outside any event loops, deferred deletes are not processed unless
- // sendPostedEvents(0, DeferredDelete) is called.
- object = new QObject;
- p = object;
- object->deleteLater();
- QCoreApplication::processEvents();
- QVERIFY(p);
- QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
- QVERIFY(!p);
-
- // If you call deleteLater() on an object when there is no parent
- // event loop, and then enter an event loop, the object will get
- // deleted.
- object = new QObject;
- p = object;
- object->deleteLater();
- QEventLoop loop;
- QTimer::singleShot(1000, &loop, &QEventLoop::quit);
- loop.exec();
- QVERIFY(!p);
- }
- {
- // When an object is in an event loop, then calls deleteLater() and enters
- // an event loop recursively, it should not die until the parent event
- // loop continues.
- QApplication app(argc, nullptr);
- QEventLoop loop;
- EventLoopNester *nester = new EventLoopNester;
- p = nester;
- QTimer::singleShot(3000, &loop, &QEventLoop::quit);
- QTimer::singleShot(0, nester, &EventLoopNester::deleteLaterAndEnterLoop);
-
- loop.exec();
- QVERIFY(!p);
- }
-
- {
- // When the event loop that calls deleteLater() is exited
- // immediately, the object should die when returning to the
- // parent event loop
- QApplication app(argc, nullptr);
- QEventLoop loop;
- EventLoopNester *nester = new EventLoopNester;
- p = nester;
- QTimer::singleShot(3000, &loop, &QEventLoop::quit);
- QTimer::singleShot(0, nester, &EventLoopNester::deleteLaterAndExitLoop);
+void tst_QApplication::testDeleteLaterProcessEvents2()
+{
+ int argc = 0;
+ QApplication app(argc, nullptr);
+ // If you call processEvents() with an event dispatcher present, but
+ // outside any event loops, deferred deletes are not processed unless
+ // sendPostedEvents(0, DeferredDelete) is called.
+ auto object = new QObject;
+ QPointer<QObject> p(object);
+ object->deleteLater();
+ QCoreApplication::processEvents();
+ QVERIFY(p);
+ QCoreApplication::sendPostedEvents(nullptr, QEvent::DeferredDelete);
+ QVERIFY(!p);
+
+ // If you call deleteLater() on an object when there is no parent
+ // event loop, and then enter an event loop, the object will get
+ // deleted.
+ QEventLoop loop;
+ object = new QObject;
+ connect(object, &QObject::destroyed, &loop, &QEventLoop::quit);
+ p = object;
+ object->deleteLater();
+ QTimer::singleShot(1000, &loop, &QEventLoop::quit);
+ loop.exec();
+ QVERIFY(!p);
+}
- loop.exec();
- QVERIFY(!p);
- }
+void tst_QApplication::testDeleteLaterProcessEvents3()
+{
+ int argc = 0;
+ // When an object is in an event loop, then calls deleteLater() and enters
+ // an event loop recursively, it should not die until the parent event
+ // loop continues.
+ QApplication app(argc, nullptr);
+ QEventLoop loop;
+ EventLoopNester *nester = new EventLoopNester;
+ QPointer<QObject> p(nester);
+ QTimer::singleShot(3000, &loop, &QEventLoop::quit);
+ QTimer::singleShot(0, nester, &EventLoopNester::deleteLaterAndEnterLoop);
+
+ loop.exec();
+ QVERIFY(!p);
+}
- {
- // when the event loop that calls deleteLater() also calls
- // processEvents() immediately afterwards, the object should
- // not die until the parent loop continues
- QApplication app(argc, nullptr);
- QEventLoop loop;
- EventLoopNester *nester = new EventLoopNester();
- p = nester;
- QTimer::singleShot(3000, &loop, &QEventLoop::quit);
- QTimer::singleShot(0, nester, &EventLoopNester::deleteLaterAndProcessEvents);
+void tst_QApplication::testDeleteLaterProcessEvents4()
+{
+ int argc = 0;
+ // When the event loop that calls deleteLater() is exited
+ // immediately, the object should die when returning to the
+ // parent event loop
+ QApplication app(argc, nullptr);
+ QEventLoop loop;
+ EventLoopNester *nester = new EventLoopNester;
+ QPointer<QObject> p(nester);
+ QTimer::singleShot(3000, &loop, &QEventLoop::quit);
+ QTimer::singleShot(0, nester, &EventLoopNester::deleteLaterAndExitLoop);
+
+ loop.exec();
+ QVERIFY(!p);
+}
- loop.exec();
- QVERIFY(!p);
- }
+void tst_QApplication::testDeleteLaterProcessEvents5()
+{
+ // when the event loop that calls deleteLater() also calls
+ // processEvents() immediately afterwards, the object should
+ // not die until the parent loop continues
+ int argc = 0;
+ QApplication app(argc, nullptr);
+ QEventLoop loop;
+ EventLoopNester *nester = new EventLoopNester();
+ QPointer<QObject> p(nester);
+ QTimer::singleShot(3000, &loop, &QEventLoop::quit);
+ QTimer::singleShot(0, nester, &EventLoopNester::deleteLaterAndProcessEvents);
+
+ loop.exec();
+ QVERIFY(!p);
}
/*
diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
index 2483d7b5bb..5ffbbdd400 100644
--- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
+++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp
@@ -75,7 +75,7 @@
#include <qtimer.h>
#include <QtWidgets/QDoubleSpinBox>
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
#include "tst_qwidget_mac_helpers.h" // Abstract the ObjC stuff out so not everyone must run an ObjC++ compile.
#endif
@@ -110,7 +110,7 @@ static HWND winHandleOf(const QWidget *w)
# define Q_CHECK_PAINTEVENTS
#endif
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
#include <Security/AuthSession.h>
bool macHasAccessToWindowsServer()
{
@@ -216,7 +216,7 @@ private slots:
void restoreVersion1Geometry();
void widgetAt();
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
void setMask();
#endif
void optimizedResizeMove();
@@ -250,7 +250,7 @@ private slots:
void update();
void isOpaque();
-#ifndef Q_OS_OSX
+#ifndef Q_OS_MACOS
void scroll();
void scrollNativeChildren();
#endif
@@ -381,7 +381,7 @@ private slots:
void taskQTBUG_7532_tabOrderWithFocusProxy();
void movedAndResizedAttributes();
void childAt();
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
void taskQTBUG_11373();
#endif
void taskQTBUG_17333_ResizeInfiniteRecursion();
@@ -2301,7 +2301,7 @@ void tst_QWidget::activation()
void tst_QWidget::windowState()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("QTBUG-52974");
#endif
@@ -2514,7 +2514,7 @@ void tst_QWidget::showMaximized()
void tst_QWidget::showFullScreen()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("QTBUG-52974");
#endif
@@ -2834,14 +2834,14 @@ void tst_QWidget::showMinimizedKeepsFocus()
window.showNormal();
QApplication::setActiveWindow(&window);
QVERIFY(QTest::qWaitForWindowActive(&window));
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
if (!macHasAccessToWindowsServer())
QEXPECT_FAIL("", "When not having WindowServer access, we lose focus.", Continue);
#elif defined(Q_OS_WINRT)
QEXPECT_FAIL("", "Winrt fails here - QTBUG-68297", Continue);
#endif
QTRY_COMPARE(window.focusWidget(), firstchild);
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
if (!macHasAccessToWindowsServer())
QEXPECT_FAIL("", "When not having WindowServer access, we lose focus.", Continue);
#elif defined(Q_OS_WINRT)
@@ -2904,7 +2904,7 @@ void tst_QWidget::reparent()
// Qt/Embedded does it differently.
void tst_QWidget::icon()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("QTBUG-52974");
#endif
@@ -2970,7 +2970,7 @@ void tst_QWidget::hideWhenFocusWidgetIsChild()
void tst_QWidget::normalGeometry()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("QTBUG-52974");
#endif
@@ -3230,7 +3230,7 @@ public:
void tst_QWidget::lostUpdatesOnHide()
{
-#ifndef Q_OS_OSX
+#ifndef Q_OS_MACOS
UpdateWidget widget;
widget.setAttribute(Qt::WA_DontShowOnScreen);
widget.setWindowTitle(QLatin1String(QTest::currentTestFunction()));
@@ -3271,7 +3271,7 @@ void tst_QWidget::raise()
parentPtr->show();
QVERIFY(QTest::qWaitForWindowExposed(parentPtr.data()));
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
if (child1->internalWinId()) {
QSKIP("Cocoa has no Z-Order for views, we hack it, but it results in paint events.");
}
@@ -3412,7 +3412,7 @@ void tst_QWidget::lower()
void tst_QWidget::stackUnder()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("QTBUG-52974: Cocoa has no Z-Order for views, we hack it, but it results in paint events.");
#endif
@@ -3445,7 +3445,7 @@ void tst_QWidget::stackUnder()
for (UpdateWidget *child : qAsConst(allChildren)) {
int expectedPaintEvents = child == child4 ? 1 : 0;
-#if defined(Q_OS_WIN) || defined(Q_OS_OSX)
+#if defined(Q_OS_WIN) || defined(Q_OS_MACOS)
if (expectedPaintEvents == 1 && child->numPaintEvents == 2)
QEXPECT_FAIL(0, "Mac and Windows issues double repaints for Z-Order change", Continue);
#endif
@@ -3479,7 +3479,7 @@ void tst_QWidget::stackUnder()
for (UpdateWidget *child : qAsConst(allChildren)) {
int expectedZOrderChangeEvents = child == child1 ? 1 : 0;
if (child == child3) {
-#ifndef Q_OS_OSX
+#ifndef Q_OS_MACOS
QEXPECT_FAIL(0, "See QTBUG-493", Continue);
#endif
QCOMPARE(child->numPaintEvents, 0);
@@ -3579,7 +3579,7 @@ void tst_QWidget::testContentsPropagation()
void tst_QWidget::saveRestoreGeometry()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("QTBUG-52974");
#endif
@@ -3817,7 +3817,7 @@ void tst_QWidget::restoreVersion1Geometry()
void tst_QWidget::widgetAt()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("QTBUG-52974");
#endif
@@ -4020,7 +4020,7 @@ void tst_QWidget::testDeletionInEventHandlers()
delete w;
}
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
class MaskedPainter : public QWidget
{
public:
@@ -4887,7 +4887,7 @@ void tst_QWidget::update()
QCOMPARE(sibling.numPaintEvents, 1);
QCOMPARE(sibling.paintedRegion, sibling.visibleRegion());
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
if (child.internalWinId()) // child is native
QEXPECT_FAIL(0, "Cocoa compositor paints child and sibling", Continue);
#endif
@@ -4904,7 +4904,7 @@ void tst_QWidget::update()
}
}
-#ifndef Q_OS_OSX
+#ifndef Q_OS_MACOS
static inline bool isOpaque(QWidget *widget)
{
if (!widget)
@@ -4915,7 +4915,7 @@ static inline bool isOpaque(QWidget *widget)
void tst_QWidget::isOpaque()
{
-#ifndef Q_OS_OSX
+#ifndef Q_OS_MACOS
QWidget w;
QVERIFY(::isOpaque(&w));
@@ -4987,7 +4987,7 @@ void tst_QWidget::isOpaque()
#endif
}
-#ifndef Q_OS_OSX
+#ifndef Q_OS_MACOS
/*
Test that scrolling of a widget invalidates the correct regions
*/
@@ -5431,7 +5431,7 @@ void tst_QWidget::windowMoveResize()
widget.move(r.topLeft());
widget.resize(r.size());
QApplication::processEvents();
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
if (r.width() == 0 && r.height() > 0) {
widget.move(r.topLeft());
widget.resize(r.size());
@@ -5502,7 +5502,7 @@ void tst_QWidget::windowMoveResize()
widget.move(r.topLeft());
widget.resize(r.size());
QApplication::processEvents();
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
if (r.width() == 0 && r.height() > 0) {
widget.move(r.topLeft());
widget.resize(r.size());
@@ -5689,7 +5689,7 @@ void tst_QWidget::moveChild()
QTRY_COMPARE(pos, child.pos());
QTRY_COMPARE(parent.r, QRegion(oldGeometry) - child.geometry());
-#if !defined(Q_OS_OSX)
+#if !defined(Q_OS_MACOS)
// should be scrolled in backingstore
QCOMPARE(child.r, QRegion());
#endif
@@ -5739,7 +5739,7 @@ void tst_QWidget::showAndMoveChild()
void tst_QWidget::subtractOpaqueSiblings()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("QTBUG-52974: Cocoa only has rect granularity.");
#endif
@@ -5816,7 +5816,7 @@ public slots:
void tst_QWidget::multipleToplevelFocusCheck()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("QTBUG-52974");
#endif
@@ -7584,7 +7584,7 @@ void tst_QWidget::render_systemClip()
// rrrrrrrrrr
// ...
-#ifndef Q_OS_OSX
+#ifndef Q_OS_MACOS
for (int i = 0; i < image.height(); ++i) {
for (int j = 0; j < image.width(); ++j) {
if (i < 50 && j < i)
@@ -8618,11 +8618,11 @@ void tst_QWidget::sendUpdateRequestImmediately()
void tst_QWidget::doubleRepaint()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("QTBUG-52974");
#endif
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
if (!macHasAccessToWindowsServer())
QSKIP("Not having window server access causes the wrong number of repaints to be issues");
#endif
@@ -9330,7 +9330,7 @@ void tst_QWidget::setClearAndResizeMask()
child.setMask(childMask);
QTRY_COMPARE(child.mask(), childMask);
// and ensure that the child widget doesn't get any update.
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
// Mac always issues a full update when calling setMask, and we cannot force it to not do so.
if (child.internalWinId())
QCOMPARE(child.numPaintEvents, 1);
@@ -9352,7 +9352,7 @@ void tst_QWidget::setClearAndResizeMask()
// and ensure that that the child widget gets an update for the area outside the old mask.
QTRY_COMPARE(child.numPaintEvents, 1);
outsideOldMask = child.rect();
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
// Mac always issues a full update when calling setMask, and we cannot force it to not do so.
if (!child.internalWinId())
#endif
@@ -9366,7 +9366,7 @@ void tst_QWidget::setClearAndResizeMask()
// Mask child widget with a mask that is bigger than the rect
child.setMask(QRegion(0, 0, 1000, 1000));
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
// Mac always issues a full update when calling setMask, and we cannot force it to not do so.
if (child.internalWinId())
QTRY_COMPARE(child.numPaintEvents, 1);
@@ -9379,7 +9379,7 @@ void tst_QWidget::setClearAndResizeMask()
// ...and the same applies when clearing the mask.
child.clearMask();
QTest::qWait(100);
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
// Mac always issues a full update when calling setMask, and we cannot force it to not do so.
if (child.internalWinId())
QTRY_VERIFY(child.numPaintEvents > 0);
@@ -9409,7 +9409,7 @@ void tst_QWidget::setClearAndResizeMask()
QTimer::singleShot(100, &resizeChild, SLOT(shrinkMask()));
QTest::qWait(200);
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
// Mac always issues a full update when calling setMask, and we cannot force it to not do so.
if (child.internalWinId())
QTRY_COMPARE(resizeChild.paintedRegion, resizeChild.mask());
@@ -9421,7 +9421,7 @@ void tst_QWidget::setClearAndResizeMask()
const QRegion oldMask = resizeChild.mask();
QTimer::singleShot(0, &resizeChild, SLOT(enlargeMask()));
QTest::qWait(100);
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
// Mac always issues a full update when calling setMask, and we cannot force it to not do so.
if (child.internalWinId())
QTRY_COMPARE(resizeChild.paintedRegion, resizeChild.mask());
@@ -10265,7 +10265,7 @@ void tst_QWidget::childAt()
QCOMPARE(parent.childAt(120, 120), grandChild);
}
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
void tst_QWidget::taskQTBUG_11373()
{
@@ -11121,7 +11121,7 @@ public:
// when mousing over it.
void tst_QWidget::taskQTBUG_27643_enterEvents()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("QTBUG-52974: this test can crash!");
#endif
// Move the mouse cursor to a safe location so it won't interfere
diff --git a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp
index 0ae2e6626f..82527849b0 100644
--- a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp
+++ b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp
@@ -995,7 +995,7 @@ void tst_QStyleSheetStyle::focusColors()
#ifndef QT_NO_CURSOR
void tst_QStyleSheetStyle::hoverColors()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("This test is fragile on Mac, most likely due to QTBUG-33959.");
#endif
if (QGuiApplication::platformName().startsWith(QLatin1String("wayland"), Qt::CaseInsensitive))
diff --git a/tests/auto/widgets/util/qscroller/tst_qscroller.cpp b/tests/auto/widgets/util/qscroller/tst_qscroller.cpp
index 8bdd4b4783..5e71c1888d 100644
--- a/tests/auto/widgets/util/qscroller/tst_qscroller.cpp
+++ b/tests/auto/widgets/util/qscroller/tst_qscroller.cpp
@@ -82,8 +82,8 @@ public:
currentPos = se->contentPos();
overshoot = se->overshootDistance();
- if (!qFuzzyCompare( overshoot.x() + 1.0, 1.0 ) ||
- !qFuzzyCompare( overshoot.y() + 1.0, 1.0 ))
+ if (!qFuzzyCompare(overshoot.x() + 1.0, 1.0) ||
+ !qFuzzyCompare(overshoot.y() + 1.0, 1.0))
receivedOvershoot = true;
return true;
}
@@ -116,8 +116,8 @@ public:
~tst_QScroller() { }
private:
- void kineticScroll( tst_QScrollerWidget *sw, QPointF from, QPoint touchStart, QPoint touchUpdate, QPoint touchEnd);
- void kineticScrollNoTest( tst_QScrollerWidget *sw, QPointF from, QPoint touchStart, QPoint touchUpdate, QPoint touchEnd);
+ void kineticScroll(tst_QScrollerWidget *sw, QPointF from, QPoint touchStart, QPoint touchUpdate, QPoint touchEnd);
+ void kineticScrollNoTest(tst_QScrollerWidget *sw, QPointF from, QPoint touchStart, QPoint touchUpdate, QPoint touchEnd);
private slots:
void staticScrollers();
@@ -135,13 +135,13 @@ private:
Generates touchBegin, touchUpdate and touchEnd events to trigger scrolling.
Tests some in between states but does not wait until scrolling is finished.
*/
-void tst_QScroller::kineticScroll( tst_QScrollerWidget *sw, QPointF from, QPoint touchStart, QPoint touchUpdate, QPoint touchEnd)
+void tst_QScroller::kineticScroll(tst_QScrollerWidget *sw, QPointF from, QPoint touchStart, QPoint touchUpdate, QPoint touchEnd)
{
sw->scrollPosition = from;
sw->currentPos= from;
QScroller *s1 = QScroller::scroller(sw);
- QCOMPARE( s1->state(), QScroller::Inactive );
+ QCOMPARE(s1->state(), QScroller::Inactive);
QScrollerProperties sp1 = QScroller::scroller(sw)->scrollerProperties();
@@ -161,7 +161,7 @@ void tst_QScroller::kineticScroll( tst_QScrollerWidget *sw, QPointF from, QPoint
(QList<QTouchEvent::TouchPoint>() << touchPoint));
QApplication::sendEvent(sw, &touchEvent1);
- QCOMPARE( s1->state(), QScroller::Pressed );
+ QCOMPARE(s1->state(), QScroller::Pressed);
// send the touch update far enough to trigger a scroll
QTest::qWait(200); // we need to wait a little or else the speed would be infinite. now we have around 500 pixel per second.
@@ -175,13 +175,13 @@ void tst_QScroller::kineticScroll( tst_QScrollerWidget *sw, QPointF from, QPoint
(QList<QTouchEvent::TouchPoint>() << touchPoint));
QApplication::sendEvent(sw, &touchEvent2);
- QCOMPARE( s1->state(), QScroller::Dragging );
- QCOMPARE( sw->receivedPrepare, true );
+ QCOMPARE(s1->state(), QScroller::Dragging);
+ QCOMPARE(sw->receivedPrepare, true);
- QTRY_COMPARE( sw->receivedFirst, true );
- QCOMPARE( sw->receivedScroll, true );
- QCOMPARE( sw->receivedOvershoot, false );
+ QTRY_COMPARE(sw->receivedFirst, true);
+ QCOMPARE(sw->receivedScroll, true);
+ QCOMPARE(sw->receivedOvershoot, false);
// note that the scrolling goes in a different direction than the mouse move
QPoint calculatedPos = from.toPoint() - touchUpdate - touchStart;
@@ -204,13 +204,13 @@ void tst_QScroller::kineticScroll( tst_QScrollerWidget *sw, QPointF from, QPoint
Generates touchBegin, touchUpdate and touchEnd events to trigger scrolling.
This function does not have any in between tests, it does not expect the scroller to actually scroll.
*/
-void tst_QScroller::kineticScrollNoTest( tst_QScrollerWidget *sw, QPointF from, QPoint touchStart, QPoint touchUpdate, QPoint touchEnd)
+void tst_QScroller::kineticScrollNoTest(tst_QScrollerWidget *sw, QPointF from, QPoint touchStart, QPoint touchUpdate, QPoint touchEnd)
{
sw->scrollPosition = from;
sw->currentPos = from;
QScroller *s1 = QScroller::scroller(sw);
- QCOMPARE( s1->state(), QScroller::Inactive );
+ QCOMPARE(s1->state(), QScroller::Inactive);
QScrollerProperties sp1 = s1->scrollerProperties();
int fps = 60;
@@ -348,52 +348,57 @@ void tst_QScroller::scrollerProperties()
void tst_QScroller::scrollTo()
{
- {
- tst_QScrollerWidget *sw = new tst_QScrollerWidget();
- sw->scrollArea = QRectF( 0, 0, 1000, 1000 );
- sw->scrollPosition = QPointF( 500, 500 );
-
- QScroller *s1 = QScroller::scroller(sw);
- QCOMPARE( s1->state(), QScroller::Inactive );
-
- // a normal scroll
- s1->scrollTo(QPointF(100,100), 100);
- QTest::qWait(200);
-
- QCOMPARE( sw->receivedPrepare, true );
- QCOMPARE( sw->receivedScroll, true );
- QCOMPARE( sw->receivedFirst, true );
- QCOMPARE( sw->receivedLast, true );
- QCOMPARE( sw->receivedOvershoot, false );
- QVERIFY(qFuzzyCompare( sw->currentPos.x(), 100 ));
- QVERIFY(qFuzzyCompare( sw->currentPos.y(), 100 ));
-
- delete sw;
- }
+ QScopedPointer<tst_QScrollerWidget> sw(new tst_QScrollerWidget);
+ sw->show();
+ QApplication::setActiveWindow(sw.data());
+ if (!QTest::qWaitForWindowExposed(sw.data()) || !QTest::qWaitForWindowActive(sw.data()))
+ QSKIP("Failed to show and activate window");
+
+ sw->scrollArea = QRectF(0, 0, 1000, 1000);
+ sw->scrollPosition = QPointF(500, 500);
+
+ QScroller *s1 = QScroller::scroller(sw.data());
+ QCOMPARE(s1->state(), QScroller::Inactive);
+
+ // a normal scroll
+ s1->scrollTo(QPointF(100,100), 100);
+ QTest::qWait(200);
+
+ QTRY_COMPARE(sw->receivedPrepare, true);
+ QCOMPARE(sw->receivedScroll, true);
+ QCOMPARE(sw->receivedFirst, true);
+ QCOMPARE(sw->receivedLast, true);
+ QCOMPARE(sw->receivedOvershoot, false);
+ QTRY_VERIFY(qFuzzyCompare(sw->currentPos.x(), 100));
+ QVERIFY(qFuzzyCompare(sw->currentPos.y(), 100));
}
void tst_QScroller::scroll()
{
#if QT_CONFIG(gestures) && QT_CONFIG(scroller)
// -- good case. normal scroll
- tst_QScrollerWidget *sw = new tst_QScrollerWidget();
+ QScopedPointer<tst_QScrollerWidget> sw(new tst_QScrollerWidget());
sw->scrollArea = QRectF(0, 0, 1000, 1000);
- QScroller::grabGesture(sw, QScroller::TouchGesture);
+ QScroller::grabGesture(sw.data(), QScroller::TouchGesture);
sw->setGeometry(100, 100, 400, 300);
+ sw->show();
+ QApplication::setActiveWindow(sw.data());
+ if (!QTest::qWaitForWindowExposed(sw.data()) || !QTest::qWaitForWindowActive(sw.data()))
+ QSKIP("Failed to show and activate window");
- QScroller *s1 = QScroller::scroller(sw);
- kineticScroll(sw, QPointF(500, 500), QPoint(0, 0), QPoint(100, 100), QPoint(200, 200));
+ QScroller *s1 = QScroller::scroller(sw.data());
+ kineticScroll(sw.data(), QPointF(500, 500), QPoint(0, 0), QPoint(100, 100), QPoint(200, 200));
// now we should be scrolling
- QTRY_COMPARE( s1->state(), QScroller::Scrolling );
+ QTRY_COMPARE(s1->state(), QScroller::Scrolling);
// wait until finished, check that no further first scroll is sent
sw->receivedFirst = false;
sw->receivedScroll = false;
QTRY_VERIFY(s1->state() != QScroller::Scrolling);
- QCOMPARE( sw->receivedFirst, false );
- QCOMPARE( sw->receivedScroll, true );
- QCOMPARE( sw->receivedLast, true );
+ QCOMPARE(sw->receivedFirst, false);
+ QCOMPARE(sw->receivedScroll, true);
+ QCOMPARE(sw->receivedLast, true);
QVERIFY(sw->currentPos.x() < 400);
QVERIFY(sw->currentPos.y() < 400);
@@ -401,26 +406,28 @@ void tst_QScroller::scroll()
sw->reset();
sw->scrollArea = QRectF(0, 0, 0, 1000);
- kineticScrollNoTest(sw, QPointF(0, 500), QPoint(0, 0), QPoint(100, 0), QPoint(200, 0));
+ kineticScrollNoTest(sw.data(), QPointF(0, 500), QPoint(0, 0), QPoint(100, 0), QPoint(200, 0));
QTRY_COMPARE(s1->state(), QScroller::Inactive);
QCOMPARE(sw->currentPos.x(), 0.0);
QCOMPARE(sw->currentPos.y(), 500.0);
-
- delete sw;
#endif
}
void tst_QScroller::overshoot()
{
#if QT_CONFIG(gestures) && QT_CONFIG(scroller)
- tst_QScrollerWidget *sw = new tst_QScrollerWidget();
+ QScopedPointer<tst_QScrollerWidget> sw(new tst_QScrollerWidget);
sw->scrollArea = QRectF(0, 0, 1000, 1000);
- QScroller::grabGesture(sw, QScroller::TouchGesture);
+ QScroller::grabGesture(sw.data(), QScroller::TouchGesture);
sw->setGeometry(100, 100, 400, 300);
+ sw->show();
+ QApplication::setActiveWindow(sw.data());
+ if (!QTest::qWaitForWindowExposed(sw.data()) || !QTest::qWaitForWindowActive(sw.data()))
+ QSKIP("Failed to show and activate window");
- QScroller *s1 = QScroller::scroller(sw);
+ QScroller *s1 = QScroller::scroller(sw.data());
QScrollerProperties sp1 = s1->scrollerProperties();
sp1.setScrollMetric(QScrollerProperties::OvershootDragResistanceFactor, 0.5);
@@ -431,14 +438,14 @@ void tst_QScroller::overshoot()
sp1.setScrollMetric(QScrollerProperties::HorizontalOvershootPolicy, QVariant::fromValue(QScrollerProperties::OvershootWhenScrollable));
s1->setScrollerProperties(sp1);
- kineticScrollNoTest(sw, QPointF(500, 500), QPoint(0, 0), QPoint(400, 0), QPoint(490, 0));
+ kineticScrollNoTest(sw.data(), QPointF(500, 500), QPoint(0, 0), QPoint(400, 0), QPoint(490, 0));
QTRY_COMPARE(s1->state(), QScroller::Inactive);
//qDebug() << "Overshoot fuzzy: "<<sw->currentPos;
- QVERIFY(qFuzzyCompare( sw->currentPos.x(), 0 ));
- QVERIFY(qFuzzyCompare( sw->currentPos.y(), 500 ));
- QCOMPARE( sw->receivedOvershoot, true );
+ QVERIFY(qFuzzyCompare(sw->currentPos.x(), 0));
+ QVERIFY(qFuzzyCompare(sw->currentPos.y(), 500));
+ QCOMPARE(sw->receivedOvershoot, true);
// -- try to scroll with overshoot (when scrollable bad case)
sw->reset();
@@ -446,14 +453,14 @@ void tst_QScroller::overshoot()
sp1.setScrollMetric(QScrollerProperties::HorizontalOvershootPolicy, QVariant::fromValue(QScrollerProperties::OvershootWhenScrollable));
s1->setScrollerProperties(sp1);
- kineticScrollNoTest(sw, QPointF(0, 500), QPoint(0, 0), QPoint(400, 0), QPoint(490, 0));
+ kineticScrollNoTest(sw.data(), QPointF(0, 500), QPoint(0, 0), QPoint(400, 0), QPoint(490, 0));
QTRY_COMPARE(s1->state(), QScroller::Inactive);
//qDebug() << "Overshoot fuzzy: "<<sw->currentPos;
- QVERIFY(qFuzzyCompare( sw->currentPos.x(), 0 ));
- QVERIFY(qFuzzyCompare( sw->currentPos.y(), 500 ));
- QCOMPARE( sw->receivedOvershoot, false );
+ QVERIFY(qFuzzyCompare(sw->currentPos.x(), 0));
+ QVERIFY(qFuzzyCompare(sw->currentPos.y(), 500));
+ QCOMPARE(sw->receivedOvershoot, false);
// -- try to scroll with overshoot (always on)
sw->reset();
@@ -461,15 +468,15 @@ void tst_QScroller::overshoot()
sp1.setScrollMetric(QScrollerProperties::HorizontalOvershootPolicy, QVariant::fromValue(QScrollerProperties::OvershootAlwaysOn));
s1->setScrollerProperties(sp1);
- kineticScrollNoTest(sw, QPointF(0, 500), QPoint(0, 0), QPoint(400, 0), QPoint(490, 0));
+ kineticScrollNoTest(sw.data(), QPointF(0, 500), QPoint(0, 0), QPoint(400, 0), QPoint(490, 0));
QTRY_COMPARE(s1->state(), QScroller::Inactive);
//qDebug() << "Overshoot fuzzy: "<<sw->currentPos;
- QVERIFY(qFuzzyCompare( sw->currentPos.x(), 0 ));
- QVERIFY(qFuzzyCompare( sw->currentPos.y(), 500 ));
- QCOMPARE( sw->receivedOvershoot, true );
+ QVERIFY(qFuzzyCompare(sw->currentPos.x(), 0));
+ QVERIFY(qFuzzyCompare(sw->currentPos.y(), 500));
+ QCOMPARE(sw->receivedOvershoot, true);
// -- try to scroll with overshoot (always off)
sw->reset();
@@ -477,13 +484,13 @@ void tst_QScroller::overshoot()
sp1.setScrollMetric(QScrollerProperties::HorizontalOvershootPolicy, QVariant::fromValue(QScrollerProperties::OvershootAlwaysOff));
s1->setScrollerProperties(sp1);
- kineticScrollNoTest(sw, QPointF(500, 500), QPoint(0, 0), QPoint(400, 0), QPoint(490, 0));
+ kineticScrollNoTest(sw.data(), QPointF(500, 500), QPoint(0, 0), QPoint(400, 0), QPoint(490, 0));
QTRY_COMPARE(s1->state(), QScroller::Inactive);
- QVERIFY(qFuzzyCompare( sw->currentPos.x(), 0 ));
- QVERIFY(qFuzzyCompare( sw->currentPos.y(), 500 ));
- QCOMPARE( sw->receivedOvershoot, false );
+ QVERIFY(qFuzzyCompare(sw->currentPos.x(), 0));
+ QVERIFY(qFuzzyCompare(sw->currentPos.y(), 500));
+ QCOMPARE(sw->receivedOvershoot, false);
// -- try to scroll with overshoot (always on but max overshoot = 0)
sp1.setScrollMetric(QScrollerProperties::OvershootDragDistanceFactor, 0.0);
@@ -493,39 +500,39 @@ void tst_QScroller::overshoot()
sp1.setScrollMetric(QScrollerProperties::HorizontalOvershootPolicy, QVariant::fromValue(QScrollerProperties::OvershootAlwaysOn));
s1->setScrollerProperties(sp1);
- kineticScrollNoTest(sw, QPointF(500, 500), QPoint(0, 0), QPoint(400, 0), QPoint(490, 0));
+ kineticScrollNoTest(sw.data(), QPointF(500, 500), QPoint(0, 0), QPoint(400, 0), QPoint(490, 0));
QTRY_COMPARE(s1->state(), QScroller::Inactive);
- QVERIFY(qFuzzyCompare( sw->currentPos.x(), 0 ));
- QVERIFY(qFuzzyCompare( sw->currentPos.y(), 500 ));
- QCOMPARE( sw->receivedOvershoot, false );
-
- delete sw;
+ QVERIFY(qFuzzyCompare(sw->currentPos.x(), 0));
+ QVERIFY(qFuzzyCompare(sw->currentPos.y(), 500));
+ QCOMPARE(sw->receivedOvershoot, false);
#endif
}
void tst_QScroller::multipleWindows()
{
#if QT_CONFIG(gestures) && QT_CONFIG(scroller)
- QScopedPointer<tst_QScrollerWidget> sw1(new tst_QScrollerWidget());
+ QScopedPointer<tst_QScrollerWidget> sw1(new tst_QScrollerWidget);
sw1->scrollArea = QRectF(0, 0, 1000, 1000);
QScroller::grabGesture(sw1.data(), QScroller::TouchGesture);
sw1->setGeometry(100, 100, 400, 300);
+
QScroller *s1 = QScroller::scroller(sw1.data());
kineticScroll(sw1.data(), QPointF(500, 500), QPoint(0, 0), QPoint(100, 100), QPoint(200, 200));
// now we should be scrolling
- QTRY_COMPARE( s1->state(), QScroller::Scrolling );
+ QTRY_COMPARE(s1->state(), QScroller::Scrolling);
// That was fun! Do it again!
QScopedPointer<tst_QScrollerWidget> sw2(new tst_QScrollerWidget());
sw2->scrollArea = QRectF(0, 0, 1000, 1000);
QScroller::grabGesture(sw2.data(), QScroller::TouchGesture);
sw2->setGeometry(100, 100, 400, 300);
+
QScroller *s2 = QScroller::scroller(sw2.data());
kineticScroll(sw2.data(), QPointF(500, 500), QPoint(0, 0), QPoint(100, 100), QPoint(200, 200));
// now we should be scrolling
- QTRY_COMPARE( s2->state(), QScroller::Scrolling );
+ QTRY_COMPARE(s2->state(), QScroller::Scrolling);
// wait for both to stop
QTRY_VERIFY(s1->state() != QScroller::Scrolling);
diff --git a/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp b/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp
index 999cf4a941..e4f927750e 100644
--- a/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp
+++ b/tests/auto/widgets/widgets/qbuttongroup/tst_qbuttongroup.cpp
@@ -83,6 +83,7 @@ Q_OBJECT
private slots:
void arrowKeyNavigation();
+ void keyNavigationPushButtons();
void exclusive();
void exclusiveWithActions();
void testSignals();
@@ -185,6 +186,73 @@ void tst_QButtonGroup::arrowKeyNavigation()
QVERIFY(bt3.hasFocus());
}
+/*
+ Test that tab and arrow key navigation through buttons
+ in an invisible button group works as expected. Tabbing
+ into the group should give focus to the checked button,
+ and arrow navigation should change the checked button and
+ move focus.
+*/
+void tst_QButtonGroup::keyNavigationPushButtons()
+{
+ if (!qt_tab_all_widgets())
+ QSKIP("This test requires full keyboard control to be enabled.");
+
+ QDialog dlg(nullptr);
+ QLineEdit *le1 = new QLineEdit;
+ le1->setObjectName("le1");
+ QPushButton *pb1 = new QPushButton("Exclusive 1");
+ pb1->setObjectName("pb1");
+ pb1->setCheckable(true);
+ pb1->setChecked(true);
+ QPushButton *pb2 = new QPushButton("Exclusive 2");
+ pb2->setObjectName("pb2");
+ pb2->setCheckable(true);
+ QPushButton *pb3 = new QPushButton("Exclusive 3");
+ pb3->setObjectName("pb3");
+ pb3->setCheckable(true);
+ QLineEdit *le2 = new QLineEdit;
+ le2->setObjectName("le2");
+
+ QVBoxLayout* layout = new QVBoxLayout(&dlg);
+ layout->addWidget(le1);
+ layout->addWidget(pb1);
+ layout->addWidget(pb2);
+ layout->addWidget(pb3);
+ layout->addWidget(le2);
+
+ QButtonGroup *buttonGroup = new QButtonGroup;
+ buttonGroup->addButton(pb1);
+ buttonGroup->addButton(pb2);
+ buttonGroup->addButton(pb3);
+
+ dlg.show();
+ qApp->setActiveWindow(&dlg);
+ if (!QTest::qWaitForWindowActive(&dlg))
+ QSKIP("Window activation failed, skipping test");
+
+ QVERIFY2(le1->hasFocus(), qPrintable(qApp->focusWidget()->objectName()));
+ QTest::keyClick(qApp->focusWidget(), Qt::Key_Tab);
+ QVERIFY2(pb1->hasFocus(), qPrintable(qApp->focusWidget()->objectName()));
+ QVERIFY2(pb1->isChecked(), qPrintable(buttonGroup->checkedButton()->objectName()));
+ QTest::keyClick(qApp->focusWidget(), Qt::Key_Down);
+ QVERIFY2(pb2->hasFocus(), qPrintable(qApp->focusWidget()->objectName()));
+ QVERIFY2(pb2->isChecked(), qPrintable(buttonGroup->checkedButton()->objectName()));
+ QTest::keyClick(qApp->focusWidget(), Qt::Key_Down);
+ QVERIFY2(pb3->hasFocus(), qPrintable(qApp->focusWidget()->objectName()));
+ QVERIFY2(pb3->isChecked(), qPrintable(buttonGroup->checkedButton()->objectName()));
+ QTest::keyClick(qApp->focusWidget(), Qt::Key_Up);
+ QVERIFY2(pb2->hasFocus(), qPrintable(qApp->focusWidget()->objectName()));
+ QVERIFY2(pb2->isChecked(), qPrintable(buttonGroup->checkedButton()->objectName()));
+ QTest::keyClick(qApp->focusWidget(), Qt::Key_Tab);
+ QVERIFY2(le2->hasFocus(), qPrintable(qApp->focusWidget()->objectName()));
+ QTest::keyClick(qApp->focusWidget(), Qt::Key_Backtab);
+ QVERIFY2(pb2->hasFocus(), qPrintable(qApp->focusWidget()->objectName()));
+ QVERIFY2(pb2->isChecked(), qPrintable(buttonGroup->checkedButton()->objectName()));
+ QTest::keyClick(qApp->focusWidget(), Qt::Key_Backtab);
+ QVERIFY2(le1->hasFocus(), qPrintable(qApp->focusWidget()->objectName()));
+}
+
void tst_QButtonGroup::exclusiveWithActions()
{
QDialog dlg(0);
diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
index bd3c6d1f03..10430e1796 100644
--- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
+++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2016 The Qt Company Ltd.
+** Copyright (C) 2020 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the test suite of the Qt Toolkit.
@@ -1208,7 +1208,7 @@ void tst_QComboBox::currentIndex()
QVERIFY(testWidget->currentText().isEmpty());
// spy on currentIndexChanged
- QSignalSpy indexChangedSpy(testWidget, SIGNAL(currentIndexChanged(int, QString)));
+ QSignalSpy indexChangedInt(testWidget, SIGNAL(currentIndexChanged(int)));
// stuff items into it
foreach(QString text, initialItems) {
@@ -1232,12 +1232,12 @@ void tst_QComboBox::currentIndex()
QCOMPARE(testWidget->currentText(), expectedCurrentText);
// check that signal count is correct
- QCOMPARE(indexChangedSpy.count(), expectedSignalCount);
+ QCOMPARE(indexChangedInt.count(), expectedSignalCount);
// compare with last sent signal values
- if (indexChangedSpy.count())
- QCOMPARE(indexChangedSpy.at(indexChangedSpy.count() - 1).at(0).toInt(),
- testWidget->currentIndex());
+ if (indexChangedInt.count())
+ QCOMPARE(indexChangedInt.at(indexChangedInt.count() - 1).at(0).toInt(),
+ testWidget->currentIndex());
if (edit) {
testWidget->setCurrentIndex(-1);
@@ -2336,8 +2336,7 @@ public:
{
QStringList list;
list << "one" << "two";
- connect(this, SIGNAL(currentIndexChanged(int, QString)),
- this, SLOT(onCurrentIndexChanged(int)));
+ connect(this, SIGNAL(currentIndexChanged(int)), this, SLOT(onCurrentIndexChanged(int)));
addItems(list);
}
public slots:
diff --git a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp
index 9659d89833..08c80c96ab 100644
--- a/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp
+++ b/tests/auto/widgets/widgets/qdatetimeedit/tst_qdatetimeedit.cpp
@@ -195,6 +195,8 @@ private slots:
void specialValueText();
void setRange_data();
void setRange();
+ void editingRanged_data();
+ void editingRanged();
void selectAndScrollWithKeys();
void backspaceKey();
@@ -1312,6 +1314,120 @@ void tst_QDateTimeEdit::setRange()
}
}
+/*
+ Test that a user can input a date into a ranged QDateTimeEdit or QDateEdit
+ where a part of date is larger than the respective part of the maximum, or
+ smaller than the respective part of the minimum of the range.
+
+ This test is expected to fail unless keyboard tracking of the edit is set
+ to off. Otherwise the changed-signal would be emitted with values outside
+ of the allowed range as the user types.
+*/
+void tst_QDateTimeEdit::editingRanged_data()
+{
+ QTest::addColumn<QDate>("minDate");
+ QTest::addColumn<QTime>("minTime");
+ QTest::addColumn<QDate>("maxDate");
+ QTest::addColumn<QTime>("maxTime");
+ QTest::addColumn<QString>("userInput");
+ QTest::addColumn<QDateTime>("expected");
+
+ QTest::addRow("trivial")
+ << QDate(2010, 1, 1) << QTime(9, 0)
+ << QDate(2011, 12, 31) << QTime(16, 0)
+ << QString::fromLatin1("311220101600")
+ << QDateTime(QDate(2010, 12, 31), QTime(16, 0));
+
+ QTest::addRow("data0")
+ << QDate(2010, 12, 30) << QTime(16, 0)
+ << QDate(2011, 1, 2) << QTime(9, 0)
+ << QString::fromLatin1("311220102359")
+ << QDateTime(QDate(2010, 12, 31), QTime(23, 59));
+
+ QTest::addRow("data1")
+ << QDate(2010, 12, 30) << QTime(16, 0)
+ << QDate(2011, 1, 2) << QTime(9, 0)
+ << QString::fromLatin1("010120111823")
+ << QDateTime(QDate(2011, 1, 1), QTime(18, 23));
+
+ QTest::addRow("Out of range")
+ << QDate(2010, 12, 30) << QTime(16, 0)
+ << QDate(2011, 1, 2) << QTime(9, 0)
+ << QString::fromLatin1("090920111823")
+ << QDateTime(QDate(2011, 1, 2), QTime(9, 0));
+
+ QTest::addRow("only date")
+ << QDate(2010, 12, 30) << QTime()
+ << QDate(2011, 1, 2) << QTime()
+ << QString::fromLatin1("01012011")
+ << QDateTime(QDate(2011, 1, 1), QTime());
+}
+
+void tst_QDateTimeEdit::editingRanged()
+{
+ QFETCH(QDate, minDate);
+ QFETCH(QTime, minTime);
+ QFETCH(QDate, maxDate);
+ QFETCH(QTime, maxTime);
+ QFETCH(QString, userInput);
+ QFETCH(QDateTime, expected);
+
+ QDateTimeEdit *edit;
+ if (minTime.isValid()) {
+ edit = new QDateTimeEdit;
+ edit->setDisplayFormat("dd.MM.yyyy hh:mm");
+ edit->setDateTimeRange(QDateTime(minDate, minTime), QDateTime(maxDate, maxTime));
+ } else {
+ edit = new QDateEdit;
+ edit->setDisplayFormat("dd.MM.yyyy");
+ edit->setDateRange(minDate, maxDate);
+ }
+
+ int callCount = 0;
+ connect(edit, &QDateTimeEdit::dateTimeChanged, [&](const QDateTime &dateTime) {
+ ++callCount;
+ if (minTime.isValid()) {
+ QVERIFY(dateTime >= QDateTime(minDate, minTime));
+ QVERIFY(dateTime <= QDateTime(maxDate, maxTime));
+ } else {
+ QVERIFY(dateTime.date() >= minDate);
+ QVERIFY(dateTime.date() <= maxDate);
+ }
+ });
+
+ edit->show();
+ QApplication::setActiveWindow(edit);
+ if (!QTest::qWaitForWindowActive(edit))
+ QSKIP("Failed to make window active, aborting");
+ edit->setFocus();
+
+ // with keyboard tracking, never get a signal with an out-of-range value
+ edit->setKeyboardTracking(true);
+ QTest::keyClicks(edit, userInput);
+ QTest::keyClick(edit, Qt::Key_Return);
+ QVERIFY(callCount > 0);
+
+ // QDateTimeEdit blocks these dates from being entered - see QTBUG-65
+ QEXPECT_FAIL("data0", "Can't enter this date", Continue);
+ QEXPECT_FAIL("data1", "Can't enter this date", Continue);
+ QEXPECT_FAIL("Out of range", "Can't enter this date", Continue);
+ QEXPECT_FAIL("only date", "Can't enter this date", Continue);
+ QCOMPARE(edit->dateTime(), expected);
+
+ // reset
+ edit->clearFocus();
+ edit->setFocus();
+ callCount = 0;
+
+ edit->setKeyboardTracking(false);
+ QTest::keyClicks(edit, userInput);
+ QTest::keyClick(edit, Qt::Key_Return);
+ QCOMPARE(edit->dateTime(), expected);
+ QCOMPARE(callCount, 1);
+
+ delete edit;
+}
+
void tst_QDateTimeEdit::wrappingTime_data()
{
QTest::addColumn<bool>("startWithMin");
diff --git a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
index a89b3231ad..c07961f867 100644
--- a/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
+++ b/tests/auto/widgets/widgets/qmenu/tst_qmenu.cpp
@@ -1267,7 +1267,7 @@ void tst_QMenu::QTBUG47515_widgetActionEnterLeave()
if (!QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::WindowActivation))
QSKIP("Window activation is not supported");
if (QGuiApplication::platformName() == QLatin1String("cocoa"))
- QSKIP("See QTBUG-63031");
+ QSKIP("This test is meaningless on macOS, for additional info see QTBUG-63031");
const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry();
QRect geometry(QPoint(), availableGeometry.size() / 3);
diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
index 8cbe821a68..90e89ff1d5 100644
--- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
+++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
@@ -1537,7 +1537,7 @@ void tst_QMenuBar::cornerWidgets()
QFETCH(Qt::Corner, corner);
-#if defined(Q_OS_OSX)
+#if defined(Q_OS_MACOS)
QSKIP("Test interferes with native menu bars on this platform");
#endif
diff --git a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
index 73423d958b..cb4fc201f6 100644
--- a/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
+++ b/tests/auto/widgets/widgets/qopenglwidget/tst_qopenglwidget.cpp
@@ -579,7 +579,7 @@ bool verifyColor(const QWidget *widget, const QRect &clipArea, const QColor &col
void tst_QOpenGLWidget::stackWidgetOpaqueChildIsVisible()
{
-#ifdef Q_OS_OSX
+#ifdef Q_OS_MACOS
QSKIP("QScreen::grabWindow() doesn't work properly on OSX HighDPI screen: QTBUG-46803");
return;
#endif