diff options
Diffstat (limited to 'tests/auto/widgets')
10 files changed, 160 insertions, 41 deletions
diff --git a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp index 8ce0742854..952f5eaeea 100644 --- a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp +++ b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp @@ -166,7 +166,7 @@ tst_QFiledialog::~tst_QFiledialog() void tst_QFiledialog::init() { // Save the developers settings so they don't get mad when their sidebar folders are gone. - QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); settings.beginGroup(QLatin1String("Qt")); userSettings = settings.value(QLatin1String("filedialog")).toByteArray(); settings.remove(QLatin1String("filedialog")); @@ -180,7 +180,7 @@ void tst_QFiledialog::init() void tst_QFiledialog::cleanup() { - QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); settings.beginGroup(QLatin1String("Qt")); settings.setValue(QLatin1String("filedialog"), userSettings); } diff --git a/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp b/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp index 6b0888f68a..b0c48a6558 100644 --- a/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp +++ b/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp @@ -165,7 +165,7 @@ void tst_QFileDialog2::init() QVERIFY(tempDir.isValid()); // Save the developers settings so they don't get mad when their sidebar folders are gone. - QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); settings.beginGroup(QLatin1String("Qt")); userSettings = settings.value(QLatin1String("filedialog")).toByteArray(); settings.remove(QLatin1String("filedialog")); @@ -179,7 +179,7 @@ void tst_QFileDialog2::init() void tst_QFileDialog2::cleanup() { - QSettings settings(QSettings::UserScope, QLatin1String("Trolltech")); + QSettings settings(QSettings::UserScope, QLatin1String("QtProject")); settings.beginGroup(QLatin1String("Qt")); settings.setValue(QLatin1String("filedialog"), userSettings); } diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp index cd246ac25d..a0bd7f72a4 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp @@ -8486,7 +8486,9 @@ void tst_QGraphicsItem::focusProxyDeletion() rect2 = new QGraphicsRectItem; rect->setFocusProxy(rect2); + QGraphicsItem **danglingFocusProxyRef = &rect->d_ptr->focusProxy; delete rect; // don't crash + QVERIFY(!rect2->d_ptr->focusProxyRefs.contains(danglingFocusProxyRef)); rect = new QGraphicsRectItem; rect->setFocusProxy(rect2); @@ -9263,6 +9265,45 @@ void tst_QGraphicsItem::focusScope() scope3->setFocus(); QVERIFY(scope3->hasFocus()); + // clearFocus() on a focus scope will remove focus from its children. + scope1->clearFocus(); + QVERIFY(!scope1->hasFocus()); + QVERIFY(!scope2->hasFocus()); + QVERIFY(!scope3->hasFocus()); + + scope1->setFocus(); + QVERIFY(!scope1->hasFocus()); + QVERIFY(!scope2->hasFocus()); + QVERIFY(scope3->hasFocus()); + + scope2->clearFocus(); + QVERIFY(scope1->hasFocus()); + QVERIFY(!scope2->hasFocus()); + QVERIFY(!scope3->hasFocus()); + + scope2->setFocus(); + QVERIFY(!scope1->hasFocus()); + QVERIFY(!scope2->hasFocus()); + QVERIFY(scope3->hasFocus()); + + // Focus cleared while a parent doesn't have focus remains cleared + // when the parent regains focus. + scope1->clearFocus(); + scope3->clearFocus(); + QVERIFY(!scope1->hasFocus()); + QVERIFY(!scope2->hasFocus()); + QVERIFY(!scope3->hasFocus()); + + scope1->setFocus(); + QVERIFY(!scope1->hasFocus()); + QVERIFY(scope2->hasFocus()); + QVERIFY(!scope3->hasFocus()); + + scope3->setFocus(); + QVERIFY(!scope1->hasFocus()); + QVERIFY(!scope2->hasFocus()); + QVERIFY(scope3->hasFocus()); + QGraphicsRectItem *rect4 = new QGraphicsRectItem; rect4->setData(0, "rect4"); rect4->setParentItem(scope3); diff --git a/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp b/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp index e52ff3fa8b..dc7318ca64 100644 --- a/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp +++ b/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp @@ -54,6 +54,16 @@ #include <QStyleFactory> #include <QSharedPointer> +// Make a widget frameless to prevent size constraints of title bars +// from interfering (Windows). +static inline void setFrameless(QWidget *w) +{ + Qt::WindowFlags flags = w->windowFlags(); + flags |= Qt::FramelessWindowHint; + flags &= ~(Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint); + w->setWindowFlags(flags); +} + class tst_QGridLayout : public QObject { Q_OBJECT @@ -256,6 +266,7 @@ void tst_QGridLayout::badDistributionBug() void tst_QGridLayout::setMinAndMaxSize() { QWidget widget; + setFrameless(&widget); QGridLayout layout(&widget); layout.setMargin(0); layout.setSpacing(0); @@ -412,6 +423,7 @@ private: void tst_QGridLayout::spacingAndSpacers() { QWidget widget; + setFrameless(&widget); QGridLayout layout(&widget); layout.setMargin(0); layout.setSpacing(0); @@ -667,6 +679,8 @@ void tst_QGridLayout::spacingsAndMargins() QApplication::setStyle(new Qt42Style); QWidget toplevel; + setFrameless(&toplevel); + QVBoxLayout vbox(&toplevel); QGridLayout grid1; vbox.addLayout(&grid1); @@ -853,8 +867,10 @@ void tst_QGridLayout::minMaxSize() QApplication::setStyle(style); if (!m_grid) m_grid = new QGridLayout(); - if (!m_toplevel) + if (!m_toplevel) { m_toplevel = new QWidget(); + setFrameless(m_toplevel); + } if (fixedSize.isValid()) { m_toplevel->setFixedSize(fixedSize); } else { @@ -1061,6 +1077,7 @@ void tst_QGridLayout::styleDependentSpacingsAndMargins() QApplication::setStyle(new CustomLayoutStyle()); QWidget widget; + setFrameless(&widget); QGridLayout layout(&widget); QList<QPointer<SizeHinterFrame> > sizehinters; for (int i = 0; i < rows; ++i) { @@ -1101,6 +1118,7 @@ void tst_QGridLayout::layoutSpacing_data() style->reimplementSubelementRect = false; QApplication::setStyle(style); QWidget *w = new QWidget(); + setFrameless(w); QVBoxLayout *layout = new QVBoxLayout(); QRadioButton *rb1 = new QRadioButton(QLatin1String("Radio 1"), w); QRadioButton *rb2 = new QRadioButton(QLatin1String("Radio 2"), w); @@ -1137,6 +1155,7 @@ void tst_QGridLayout::layoutSpacing_data() style->reimplementSubelementRect = false; QApplication::setStyle(style); QWidget *w = new QWidget(); + setFrameless(w); QHBoxLayout *layout = new QHBoxLayout(); QLineEdit *le1 = new QLineEdit(w); QLineEdit *le2 = new QLineEdit(w); @@ -1174,6 +1193,7 @@ void tst_QGridLayout::layoutSpacing_data() style->reimplementSubelementRect = true; QApplication::setStyle(style); QWidget *w = new QWidget(); + setFrameless(w); QVBoxLayout *layout = new QVBoxLayout(); QPushButton *pb1 = new QPushButton(QLatin1String("Push 1"), w); @@ -1210,6 +1230,7 @@ void tst_QGridLayout::layoutSpacing_data() style->reimplementSubelementRect = true; QApplication::setStyle(style); QWidget *w = new QWidget(); + setFrameless(w); QGridLayout *layout = new QGridLayout(); QPushButton *pb1 = new QPushButton(QLatin1String("Push 1"), w); QPushButton *pb2 = new QPushButton(QLatin1String("Push 2"), w); @@ -1277,6 +1298,7 @@ void tst_QGridLayout::layoutSpacing_data() style->reimplementSubelementRect = true; QApplication::setStyle(style); QWidget *w = new QWidget(); + setFrameless(w); QVBoxLayout *layout = new QVBoxLayout(); QPushButton *pb1 = new QPushButton(QLatin1String("Push 1"), w); @@ -1316,6 +1338,7 @@ void tst_QGridLayout::layoutSpacing_data() style->reimplementSubelementRect = true; QApplication::setStyle(style); QWidget *w = new QWidget(); + setFrameless(w); QVBoxLayout *layout = new QVBoxLayout(); QPushButton *pb1 = new QPushButton(QLatin1String("Push 1"), w); @@ -1364,6 +1387,7 @@ void tst_QGridLayout::layoutSpacing_data() style->reimplementSubelementRect = false; QApplication::setStyle(style); QWidget *w = new QWidget(); + setFrameless(w); QGridLayout *layout = new QGridLayout(); QPushButton *left = new QPushButton(w); QPushButton *up = new QPushButton(w); @@ -1405,6 +1429,7 @@ void tst_QGridLayout::layoutSpacing_data() style->reimplementSubelementRect = false; QApplication::setStyle(style); QWidget *w = new QWidget(); + setFrameless(w); QGridLayout *layout = new QGridLayout(); QPushButton *left = new QPushButton(w); QPushButton *up = new QPushButton(w); @@ -1442,6 +1467,7 @@ void tst_QGridLayout::layoutSpacing() QFETCH(bool, customSubElementRect); QWidget toplevel; + setFrameless(&toplevel); CustomLayoutStyle *style = new CustomLayoutStyle(); style->hspacing = hSpacing; @@ -1466,6 +1492,7 @@ void tst_QGridLayout::layoutSpacing() void tst_QGridLayout::spacing() { QWidget w; + setFrameless(&w); CustomLayoutStyle *style = new CustomLayoutStyle(); style->hspacing = 5; style->vspacing = 10; @@ -1569,6 +1596,7 @@ void tst_QGridLayout::spacerWithSpacing() void tst_QGridLayout::contentsRect() { QWidget w; + setFrameless(&w); QGridLayout grid; w.setLayout(&grid); grid.addWidget(new QPushButton(&w)); diff --git a/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp b/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp index 230fcebfcb..058831af2e 100644 --- a/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp +++ b/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp @@ -230,28 +230,16 @@ void tst_QWidget_window::tst_windowFilePathAndwindowTitle_data() QString validPath = QApplication::applicationFilePath(); QString fileNameOnly = QFileInfo(validPath).fileName() + QLatin1String("[*]"); - QString fileAndSep = fileNameOnly + QLatin1String(" ") + QChar(0x2014) + QLatin1String(" "); QString windowTitle = QLatin1String("Here is a Window Title"); - - QString defaultPlatString = -#if 0 // was ifdef Q_OS_MAC, but that code is disabled in qwidget.cpp and caption handling should move to QPA anyway - fileNameOnly; -#else - fileAndSep + "tst_qwidget_window"; // default app name in Qt5 -#endif + QString defaultPlatString = fileNameOnly; QTest::newRow("never Set Title nor AppName") << false << false << validPath << QString() << windowTitle << defaultPlatString << defaultPlatString; QTest::newRow("set title after only, but no AppName") << false << true << validPath << QString() << windowTitle << defaultPlatString << windowTitle; QTest::newRow("set title before only, not AppName") << true << false << validPath << QString() << windowTitle << windowTitle << windowTitle; QTest::newRow("always set title, not appName") << true << true << validPath << QString() << windowTitle << windowTitle << windowTitle; - QString appName = QLatin1String("Killer App"); - QString platString = -#if 0 // was ifdef Q_OS_MAC, but that code is disabled in qwidget.cpp and caption handling should move to QPA anyway - fileNameOnly; -#else - fileAndSep + appName; -#endif + QString appName = QLatin1String("Killer App"); // Qt4 used to make it part of windowTitle(), Qt5 doesn't anymore, the QPA plugin takes care of it. + QString platString = fileNameOnly; QTest::newRow("never Set Title, yes AppName") << false << false << validPath << appName << windowTitle << platString << platString; QTest::newRow("set title after only, yes AppName") << false << true << validPath << appName << windowTitle << platString << windowTitle; diff --git a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp index d266692096..9dee368768 100644 --- a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp +++ b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp @@ -85,6 +85,16 @@ static bool qt_wince_is_smartphone() { #include <qwidget.h> +// Make a widget frameless to prevent size constraints of title bars +// from interfering (Windows). +static inline void setFrameless(QWidget *w) +{ + Qt::WindowFlags flags = w->windowFlags(); + flags |= Qt::FramelessWindowHint; + flags &= ~(Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint); + w->setWindowFlags(flags); +} + class tst_QStyle : public QObject { Q_OBJECT @@ -337,6 +347,7 @@ bool tst_QStyle::testScrollBarSubControls(QStyle* style) #endif QScrollBar scrollBar; + setFrameless(&scrollBar); scrollBar.show(); const QStyleOptionSlider opt = qt_qscrollbarStyleOption(&scrollBar); foreach (int subControl, QList<int>() << 1 << 2 << 4 << 8) { @@ -586,8 +597,8 @@ public: }; -int Qt42Style::pixelMetric(PixelMetric metric, const QStyleOption * option /*= 0*/, - const QWidget * widget /*= 0*/ ) const +int Qt42Style::pixelMetric(PixelMetric metric, const QStyleOption * /* option = 0*/, + const QWidget * /* widget = 0*/ ) const { switch (metric) { case QStyle::PM_DefaultTopLevelMargin: @@ -660,6 +671,7 @@ void tst_QStyle::progressBarChangeStyle() void tst_QStyle::lineUpLayoutTest(QStyle *style) { QWidget widget; + setFrameless(&widget); QHBoxLayout layout; QFont font; font.setPointSize(9); //Plastique is lined up for odd numbers... @@ -677,10 +689,21 @@ void tst_QStyle::lineUpLayoutTest(QStyle *style) foreach (QWidget *w, qFindChildren<QWidget *>(&widget)) w->setStyle(style); widget.show(); - QTest::qWait( 500 ); + QVERIFY(QTest::qWaitForWindowExposed(&widget)); - QVERIFY(qAbs(spinbox.height() - lineedit.height()) <= 1); - QVERIFY(qAbs(spinbox.height() - combo.height()) <= 1); +#ifdef Q_OS_WIN + const int limit = 2; // Aero style has larger margins +#else + const int limit = 1; +#endif + const int slDiff = qAbs(spinbox.height() - lineedit.height()); + const int scDiff = qAbs(spinbox.height() - combo.height()); + QVERIFY2(slDiff <= limit, + qPrintable(QString::fromLatin1("%1 exceeds %2 for %3") + .arg(slDiff).arg(limit).arg(style->objectName()))); + QVERIFY2(scDiff <= limit, + qPrintable(QString::fromLatin1("%1 exceeds %2 for %3") + .arg(scDiff).arg(limit).arg(style->objectName()))); } void tst_QStyle::defaultFont() @@ -690,6 +713,7 @@ void tst_QStyle::defaultFont() pointFont.setPixelSize(9); qApp->setFont(pointFont); QPushButton button; + setFrameless(&button); button.show(); qApp->processEvents(); qApp->setFont(defaultFont); @@ -716,6 +740,7 @@ void tst_QStyle::testDrawingShortcuts() { { QWidget w; + setFrameless(&w); QToolButton *tb = new QToolButton(&w); tb->setText("&abc"); DrawTextStyle *dts = new DrawTextStyle; @@ -730,6 +755,7 @@ void tst_QStyle::testDrawingShortcuts() } { QToolBar w; + setFrameless(&w); QToolButton *tb = new QToolButton(&w); tb->setText("&abc"); DrawTextStyle *dts = new DrawTextStyle; diff --git a/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp b/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp index 0420ecf1e0..d39b187c8b 100644 --- a/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp +++ b/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp @@ -238,17 +238,17 @@ void tst_QAbstractScrollArea::setScrollBars2() // Hide the OLD scroll bar and ensure that the NEW one is hidden. hbar->hide(); - scrollArea.setHorizontalScrollBar(new QScrollBar); - qApp->processEvents(); - QVERIFY(!scrollArea.horizontalScrollBar()->isVisible()); + hbar = new QScrollBar(&scrollArea); + scrollArea.setHorizontalScrollBar(hbar); + QVERIFY(!hbar->isVisibleTo(hbar->parentWidget())); vbar->hide(); - scrollArea.setVerticalScrollBar(new QScrollBar); - qApp->processEvents(); - QVERIFY(!scrollArea.verticalScrollBar()->isVisible()); + vbar = new QScrollBar(&scrollArea); + scrollArea.setVerticalScrollBar(vbar); + QVERIFY(!vbar->isVisibleTo(vbar->parentWidget())); - scrollArea.verticalScrollBar()->show(); - scrollArea.horizontalScrollBar()->show(); + vbar->show(); + hbar->show(); // Hide the NEW scroll bar and ensure that it's visible // (because the OLD one is visible). diff --git a/tests/auto/widgets/widgets/qmdiarea/qmdiarea.pro b/tests/auto/widgets/widgets/qmdiarea/qmdiarea.pro index 141392b251..cc2bcb3c30 100644 --- a/tests/auto/widgets/widgets/qmdiarea/qmdiarea.pro +++ b/tests/auto/widgets/widgets/qmdiarea/qmdiarea.pro @@ -6,7 +6,7 @@ QT += gui-private widgets testlib INCLUDEPATH += . SOURCES += tst_qmdiarea.cpp DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII -contains(QT_CONFIG, opengl):QT += opengl +qtHaveModule(opengl): QT += opengl mac { LIBS += -framework Security diff --git a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp index 5aa7b19917..ba5c461223 100644 --- a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp +++ b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp @@ -1733,9 +1733,9 @@ void tst_QMdiArea::tileSubWindows() QTRY_COMPARE(workspace.viewport()->rect().size(), expectedViewportSize); // Not enough space for all sub-windows to be visible -> provide scroll bars. - workspace.resize(150, 150); + workspace.resize(160, 150); qApp->processEvents(); - QTRY_COMPARE(workspace.size(), QSize(150, 150)); + QTRY_COMPARE(workspace.size(), QSize(160, 150)); // Horizontal scroll bar. QScrollBar *hBar = workspace.horizontalScrollBar(); @@ -2594,7 +2594,10 @@ void tst_QMdiArea::nativeSubWindows() const QString platformName = QGuiApplication::platformName(); if (platformName != QLatin1String("xcb") && platformName != QLatin1String("windows")) QSKIP(qPrintable(QString::fromLatin1("nativeSubWindows() does not work on this platform (%1).").arg(platformName))); - +#ifdef QT_OPENGL_ES_2_ANGLE + if (platformName == QLatin1String("windows")) + QSKIP("nativeSubWindows() does not work with ANGLE on Windows, QTBUG-28545."); +#endif { // Add native widgets after show. QMdiArea mdiArea; mdiArea.addSubWindow(new QWidget); diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp index 2535e23ab8..3aefe26b1c 100644 --- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp +++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp @@ -1016,6 +1016,25 @@ void tst_QMenuBar::check_shortcutPress() } #endif +class LayoutDirectionSaver +{ + Q_DISABLE_COPY(LayoutDirectionSaver) +public: + explicit LayoutDirectionSaver(Qt::LayoutDirection direction) + : m_oldDirection(qApp->layoutDirection()) + { + qApp->setLayoutDirection(direction); + } + + ~LayoutDirectionSaver() + { + qApp->setLayoutDirection(m_oldDirection); + } + +private: + const Qt::LayoutDirection m_oldDirection; +}; + // Qt/Mac,WinCE does not use the native popups/menubar #if !defined(Q_OS_MAC) && !defined(Q_OS_WINCE) void tst_QMenuBar::check_menuPosition() @@ -1070,10 +1089,9 @@ void tst_QMenuBar::check_menuPosition() menu.close(); } - //in RTL, the menu should be stuck at the right of the action geometry + // QTBUG-2596: in RTL, the menu should be stuck at the right of the action geometry { - Qt::LayoutDirection dir = qApp->layoutDirection(); - qApp->setLayoutDirection(Qt::RightToLeft); + LayoutDirectionSaver directionSaver(Qt::RightToLeft); menu.clear(); QObject::connect(&menu, SIGNAL(aboutToShow()), &menu, SLOT(addActions())); QRect mbItemRect = mw->menuBar()->actionGeometry(menu_action); @@ -1082,8 +1100,23 @@ void tst_QMenuBar::check_menuPosition() QVERIFY(menu.isActiveWindow()); QCOMPARE(menu.geometry().right(), mbItemRect.right()); menu.close(); - qApp->setLayoutDirection(dir); } + +# ifndef QTEST_NO_CURSOR + // QTBUG-28031: Click at bottom-right corner. + { + mw->move(400, 200); + LayoutDirectionSaver directionSaver(Qt::RightToLeft); + QMenuBar *mb = mw->menuBar(); + const QPoint localPos = mb->actionGeometry(menu.menuAction()).bottomRight() - QPoint(1, 1); + const QPoint globalPos = mb->mapToGlobal(localPos); + QCursor::setPos(globalPos); + QTest::mouseClick(mb, Qt::LeftButton, 0, localPos); + QTRY_VERIFY(menu.isActiveWindow()); + QCOMPARE(menu.geometry().right() - 1, globalPos.x()); + menu.close(); + } +# endif // QTEST_NO_CURSOR } #endif |