From ca17c0629483842d25e9c7347882bf822d1c7423 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 5 May 2014 16:56:06 +0200 Subject: Revive tst_qstylesheetstyle on Desktop platforms. Task-number: QTBUG-21468 Change-Id: I37f741d9709b17ad31b01078e10538f0f6bff01a Reviewed-by: Liang Qi --- .../qstylesheetstyle/tst_qstylesheetstyle.cpp | 121 +++++++++++++++------ tests/auto/widgets/styles/styles.pro | 2 +- 2 files changed, 91 insertions(+), 32 deletions(-) (limited to 'tests/auto/widgets/styles') diff --git a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp index b22c573442..86e3c51d5a 100644 --- a/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp +++ b/tests/auto/widgets/styles/qstylesheetstyle/tst_qstylesheetstyle.cpp @@ -49,6 +49,12 @@ #include "../../../qtest-config.h" +static inline void centerOnScreen(QWidget *w) +{ + const QPoint offset = QPoint(w->width() / 2, w->height() / 2); + w->move(QGuiApplication::primaryScreen()->availableGeometry().center() - offset); +} + class tst_QStyleSheetStyle : public QObject { Q_OBJECT @@ -142,6 +148,8 @@ tst_QStyleSheetStyle::~tst_QStyleSheetStyle() void tst_QStyleSheetStyle::numinstances() { QWidget w; + w.resize(200, 200); + centerOnScreen(&w); QCommonStyle *style = new QCommonStyle; style->setParent(&w); QWidget c(&w); @@ -531,7 +539,14 @@ void tst_QStyleSheetStyle::dynamicProperty() qApp->setStyleSheet(QString()); QString appStyle = qApp->style()->metaObject()->className(); - QPushButton pb1, pb2; + QPushButton pb1(QStringLiteral("dynamicProperty_pb1")); + pb1.setMinimumWidth(160); + pb1.move(QGuiApplication::primaryScreen()->availableGeometry().topLeft() + QPoint(20, 100)); + + QPushButton pb2(QStringLiteral("dynamicProperty_pb2")); + pb2.setMinimumWidth(160); + pb2.move(QGuiApplication::primaryScreen()->availableGeometry().topLeft() + QPoint(20, 200)); + pb1.setProperty("type", "critical"); qApp->setStyleSheet("*[class~=\"QPushButton\"] { color: red; } *[type=\"critical\"] { background: white; }"); QVERIFY(COLOR(pb1) == Qt::red); @@ -675,6 +690,8 @@ void tst_QStyleSheetStyle::onWidgetDestroyed() void tst_QStyleSheetStyle::fontPrecedence() { QLineEdit edit; + edit.setMinimumWidth(200); + centerOnScreen(&edit); edit.show(); QFont font; QVERIFY(FONTSIZE(edit) != 22); // Sanity check to make sure this test makes sense. @@ -737,8 +754,9 @@ void tst_QStyleSheetStyle::focusColors() // ten pixels of the right color requires quite a many characters, as the // majority of the pixels will have slightly different colors due to the // anti-aliasing effect. -#if !defined(Q_OS_WIN32) && !defined(Q_OS_MAC) && !(defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(Q_CC_INTEL)) - QSKIP("This is a fragile test which fails on many esoteric platforms because of focus problems. " +#if !defined(Q_OS_WIN32) && !(defined(Q_OS_LINUX) && defined(Q_CC_GNU) && !defined(Q_CC_INTEL)) + QSKIP("This is a fragile test which fails on many esoteric platforms because of focus problems" + " (for example, QTBUG-33959)." "That doesn't mean that the feature doesn't work in practice."); #endif QList widgets; @@ -768,6 +786,7 @@ void tst_QStyleSheetStyle::focusColors() layout->addWidget(widget); frame.setLayout(layout); + centerOnScreen(&frame); frame.show(); QApplication::setActiveWindow(&frame); QVERIFY(QTest::qWaitForWindowActive(&frame)); @@ -795,6 +814,9 @@ void tst_QStyleSheetStyle::focusColors() #ifndef QTEST_NO_CURSOR void tst_QStyleSheetStyle::hoverColors() { +#ifdef Q_OS_OSX + QSKIP("This test is fragile on Mac, most likely due to QTBUG-33959."); +#endif QList widgets; widgets << new QPushButton("TESTING TESTING"); widgets << new QLineEdit("TESTING TESTING"); @@ -822,15 +844,15 @@ void tst_QStyleSheetStyle::hoverColors() layout->addWidget(widget); frame.setLayout(layout); + centerOnScreen(&frame); frame.show(); QApplication::setActiveWindow(&frame); QVERIFY(QTest::qWaitForWindowActive(&frame)); //move the mouse inside the widget, it should be colored QTest::mouseMove ( widget, QPoint(6,6)); - QTest::qWait(60); - QVERIFY(widget->testAttribute(Qt::WA_UnderMouse)); + QTRY_VERIFY(widget->testAttribute(Qt::WA_UnderMouse)); QImage image(frame.width(), frame.height(), QImage::Format_ARGB32); frame.render(&image); @@ -857,9 +879,7 @@ void tst_QStyleSheetStyle::hoverColors() //move the mouse again inside the widget, it should be colored QTest::mouseMove (widget, QPoint(5,5)); - QTest::qWait(60); - - QVERIFY(widget->testAttribute(Qt::WA_UnderMouse)); + QTRY_VERIFY(widget->testAttribute(Qt::WA_UnderMouse)); frame.render(&image); @@ -895,35 +915,47 @@ public: void tst_QStyleSheetStyle::background() { - const int number = 4; - QWidget* widgets[number]; + typedef QSharedPointer WidgetPtr; + + const QString styleSheet = QStringLiteral("* { background-color: #e8ff66; }"); + QVector widgets; + const QPoint topLeft = QGuiApplication::primaryScreen()->availableGeometry().topLeft(); // Testing inheritance styling of QDialog. - widgets[0] = new SingleInheritanceDialog; - widgets[0]->setStyleSheet("* { background-color: #e8ff66; }"); - widgets[1] = new DoubleInheritanceDialog; - widgets[1]->setStyleSheet("* { background-color: #e8ff66; }"); + WidgetPtr toplevel(new SingleInheritanceDialog); + toplevel->resize(200, 200); + toplevel->move(topLeft + QPoint(20, 20)); + toplevel->setStyleSheet(styleSheet); + widgets.append(toplevel); + + toplevel = WidgetPtr(new DoubleInheritanceDialog); + toplevel->resize(200, 200); + toplevel->move(topLeft + QPoint(20, 320)); + toplevel->setStyleSheet(styleSheet); + widgets.append(toplevel); // Testing gradients in QComboBox. - QLayout* layout; - QComboBox* cb; // First color - widgets[2] = new QDialog; - layout = new QGridLayout; - cb = new QComboBox; + toplevel = WidgetPtr(new QDialog); + toplevel->move(topLeft + QPoint(320, 20)); + QGridLayout *layout = new QGridLayout(toplevel.data()); + QComboBox* cb = new QComboBox; + cb->setMinimumWidth(160); cb->setStyleSheet("* { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop:0 #e8ff66, stop:1 #000000); }"); - layout->addWidget(cb); - widgets[2]->setLayout(layout); + layout->addWidget(cb, 0, 0); + widgets.append(toplevel); // Second color - widgets[3] = new QDialog; - layout = new QGridLayout; + toplevel = WidgetPtr(new QDialog); + toplevel->move(topLeft + QPoint(320, 320)); + layout = new QGridLayout(toplevel.data()); cb = new QComboBox; + cb->setMinimumWidth(160); cb->setStyleSheet("* { background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop:0 #e8ff66, stop:1 #000000); }"); - layout->addWidget(cb); - widgets[3]->setLayout(layout); - - for (int c = 0; c < number; ++c) { - QWidget* widget = widgets[c]; + layout->addWidget(cb, 0, 0); + widgets.append(toplevel); + for (int c = 0; c < widgets.size(); ++c) { + QWidget *widget = widgets.at(c).data(); + widget->setWindowTitle(QStringLiteral("background ") + QString::number(c)); widget->show(); QVERIFY(QTest::qWaitForWindowExposed(widget)); @@ -932,12 +964,15 @@ void tst_QStyleSheetStyle::background() if (image.depth() < 24) QSKIP("Test doesn't support color depth < 24"); + if (c == 2 && !QApplication::style()->objectName().compare(QLatin1String("fusion"), Qt::CaseInsensitive)) + QEXPECT_FAIL("", "QTBUG-21468", Abort); + QVERIFY2(testForColors(image, QColor(0xe8, 0xff, 0x66)), - (QString::fromLatin1(widget->metaObject()->className()) + (QString::number(c) + QLatin1Char(' ') + QString::fromLatin1(widget->metaObject()->className()) + " did not contain background image with color #e8ff66") .toLocal8Bit().constData()); - delete widget; + widget->hide(); } } @@ -947,6 +982,7 @@ void tst_QStyleSheetStyle::tabAlignement() QTabWidget tabWidget(&topLevel); tabWidget.addTab(new QLabel("tab1"),"tab1"); tabWidget.resize(QSize(400,400)); + centerOnScreen(&topLevel); topLevel.show(); QVERIFY(QTest::qWaitForWindowExposed(&topLevel)); QTabBar *bar = tabWidget.findChild(); @@ -1014,6 +1050,7 @@ void tst_QStyleSheetStyle::minmaxSizes() tabWidget.setStyleSheet("QTabBar::tab { min-width:100px; max-width:130px; }"); + centerOnScreen(&tabWidget); tabWidget.show(); QTest::qWait(50); //i allow 4px additional border from the native style (hence the -2, <=2) @@ -1041,6 +1078,7 @@ void tst_QStyleSheetStyle::task206238_twice() tw->addTab(new QLabel("foo"), "test"); w.setCentralWidget(tw); w.setStyleSheet("background: red;"); + centerOnScreen(&w); w.show(); QTest::qWait(20); QCOMPARE(BACKGROUND(w) , QColor("red")); @@ -1210,6 +1248,8 @@ void tst_QStyleSheetStyle::proxyStyle() QString styleSheet("QPushButton {background-color: red; }"); QWidget *w = new QWidget; + w->setMinimumWidth(160); + centerOnScreen(w); QVBoxLayout *layout = new QVBoxLayout(w); QPushButton *pb1 = new QPushButton(qApp->style()->objectName(), w); @@ -1285,6 +1325,7 @@ void tst_QStyleSheetStyle::emptyStyleSheet() layout.addWidget(new QDateEdit(&w)); layout.addWidget(new QGroupBox("some text", &w)); + centerOnScreen(&w); w.show(); QVERIFY(QTest::qWaitForWindowExposed(&w)); //workaround the fact that the label sizehint is one pixel different the first time. @@ -1306,6 +1347,7 @@ void tst_QStyleSheetStyle::emptyStyleSheet() img2.save("emptyStyleSheet_img2.png"); } + QEXPECT_FAIL("", "QTBUG-21468", Abort); QCOMPARE(img1,img2); } @@ -1340,6 +1382,7 @@ void tst_QStyleSheetStyle::toolTip() wid4->setToolTip("this is wid4"); wid4->setObjectName("wid4"); + centerOnScreen(&w); w.show(); qApp->setActiveWindow(&w); QVERIFY(QTest::qWaitForWindowActive(&w)); @@ -1363,12 +1406,13 @@ void tst_QStyleSheetStyle::toolTip() QWidget *tooltip = 0; foreach (QWidget *widget, QApplication::topLevelWidgets()) { - if (widget->inherits("QTipLabel") && widget->isVisible()) { + if (widget->inherits("QTipLabel")) { tooltip = widget; break; } } QVERIFY(tooltip); + QTRY_VERIFY(tooltip->isVisible()); // Wait until Roll-Effect is finished (Windows Vista) QCOMPARE(tooltip->palette().color(tooltip->backgroundRole()), col); } @@ -1385,6 +1429,8 @@ void tst_QStyleSheetStyle::embeddedFonts() { //task 235622 and 210551 QSpinBox spin; + spin.setMinimumWidth(160); + spin.move(QGuiApplication::primaryScreen()->availableGeometry().topLeft() + QPoint(20, 20)); spin.show(); spin.setStyleSheet("QSpinBox { font-size: 32px; }"); QTest::qWait(20); @@ -1402,6 +1448,8 @@ void tst_QStyleSheetStyle::embeddedFonts() //task 242556 QComboBox box; + box.setMinimumWidth(160); + box.move(QGuiApplication::primaryScreen()->availableGeometry().topLeft() + QPoint(20, 120)); box.setEditable(true); box.addItems(QStringList() << "First" << "Second" << "Third"); box.setStyleSheet("QComboBox { font-size: 32px; }"); @@ -1474,6 +1522,7 @@ void tst_QStyleSheetStyle::complexWidgetFocus() layout->addWidget(widget); frame.setLayout(layout); + centerOnScreen(&frame); frame.show(); QApplication::setActiveWindow(&frame); QVERIFY(QTest::qWaitForWindowActive(&frame)); @@ -1498,6 +1547,7 @@ void tst_QStyleSheetStyle::task188195_baseBackground() { QTreeView tree; tree.setStyleSheet( "QTreeView:disabled { background-color:#ab1251; }" ); + tree.move(QGuiApplication::primaryScreen()->availableGeometry().topLeft() + QPoint(20, 100)); tree.show(); QTest::qWait(20); QImage image(tree.width(), tree.height(), QImage::Format_ARGB32); @@ -1518,6 +1568,7 @@ void tst_QStyleSheetStyle::task188195_baseBackground() QTableWidget table(12, 12); table.setItem(0, 0, new QTableWidgetItem()); table.setStyleSheet( "QTableView {background-color: #ff0000}" ); + table.move(QGuiApplication::primaryScreen()->availableGeometry().topLeft() + QPoint(300, 100)); table.show(); QTest::qWait(20); image = QImage(table.width(), table.height(), QImage::Format_ARGB32); @@ -1551,6 +1602,7 @@ void tst_QStyleSheetStyle::task232085_spinBoxLineEditBg() layout->addWidget(spinbox); frame.setLayout(layout); + centerOnScreen(&frame); frame.show(); QApplication::setActiveWindow(&frame); spinbox->setFocus(); @@ -1610,6 +1662,7 @@ void tst_QStyleSheetStyle::QTBUG11658_cachecrash() Widget(QWidget *parent = 0) : QWidget(parent) { + setMinimumWidth(160); QVBoxLayout* pLayout = new QVBoxLayout(this); QCheckBox* pCheckBox = new QCheckBox(this); pLayout->addWidget(pCheckBox); @@ -1624,6 +1677,7 @@ void tst_QStyleSheetStyle::QTBUG11658_cachecrash() Widget *w = new Widget(); delete w; w = new Widget(); + centerOnScreen(w); w->show(); QVERIFY(QTest::qWaitForWindowExposed(w)); @@ -1644,6 +1698,8 @@ void tst_QStyleSheetStyle::QTBUG15910_crashNullWidget() } } w; w.setStyleSheet("* { background-color: white; color:black; border 3px solid yellow }"); + w.setMinimumWidth(160); + centerOnScreen(&w); w.show(); QVERIFY(QTest::qWaitForWindowExposed(&w)); } @@ -1666,6 +1722,7 @@ void tst_QStyleSheetStyle::QTBUG36933_brokenPseudoClassLookup() // parsing of this stylesheet must not crash, and it must be correctly applied widget.setStyleSheet(QStringLiteral("QHeaderView::section:vertical { background-color: #FF0000 }")); + centerOnScreen(&widget); widget.show(); QVERIFY(QTest::qWaitForWindowExposed(&widget)); @@ -1676,6 +1733,8 @@ void tst_QStyleSheetStyle::QTBUG36933_brokenPseudoClassLookup() QHeaderView *verticalHeader = widget.verticalHeader(); QImage image(verticalHeader->size(), QImage::Format_ARGB32); verticalHeader->render(&image); + if (!QApplication::style()->objectName().compare(QLatin1String("fusion"), Qt::CaseInsensitive)) + QEXPECT_FAIL("", "QTBUG-21468", Abort); QVERIFY(testForColors(image, QColor(0xFF, 0x00, 0x00))); } diff --git a/tests/auto/widgets/styles/styles.pro b/tests/auto/widgets/styles/styles.pro index 1791279b72..508b6ecd41 100644 --- a/tests/auto/widgets/styles/styles.pro +++ b/tests/auto/widgets/styles/styles.pro @@ -12,5 +12,5 @@ SUBDIRS=\ !mac:SUBDIRS -= \ qmacstyle \ -!contains( styles, motif ):SUBDIRS -= \ +ios|android|qnx|*wince*:SUBDIRS -= \ qstylesheetstyle \ -- cgit v1.2.3