From ea9a366d3f01262f32134d1e9f7853d17832dbac Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 11 Dec 2014 09:47:43 +0100 Subject: Swallow wheel events while a popup widget is open. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wheel events should not cause a popup widget parented on a scrollable widget to be closed or moved to correctly reflect the system behavior on OS X and Windows. Task-number: QTBUG-42731 Task-number: QTBUG-40656 Change-Id: I4ef75aa8331390309c251316ac76db2cf9ec51f7 Reviewed-by: Morten Johan Sørvig --- tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp index ac32ee4968..23d0ffd2d2 100644 --- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp +++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp @@ -124,7 +124,7 @@ private slots: void pixmapIcon(); void mouseWheel_data(); void mouseWheel(); - void wheelClosingPopup(); + void popupWheelHandling(); void layoutDirection(); void itemListPosition(); void separatorItem_data(); @@ -2037,9 +2037,9 @@ void tst_QComboBox::mouseWheel() } } -void tst_QComboBox::wheelClosingPopup() +void tst_QComboBox::popupWheelHandling() { - // QTBUG-40656, combo and other popups should close when the main window gets a wheel event. + // QTBUG-40656, QTBUG-42731 combo and other popups should not be affected by wheel events. QScrollArea scrollArea; scrollArea.move(300, 300); QWidget *widget = new QWidget; @@ -2058,9 +2058,12 @@ void tst_QComboBox::wheelClosingPopup() QVERIFY(QTest::qWaitForWindowExposed(&scrollArea)); comboBox->showPopup(); QTRY_VERIFY(comboBox->view() && comboBox->view()->isVisible()); + const QPoint popupPos = comboBox->view()->pos(); QWheelEvent event(QPointF(10, 10), WHEEL_DELTA, Qt::NoButton, Qt::NoModifier); QVERIFY(QCoreApplication::sendEvent(scrollArea.windowHandle(), &event)); - QTRY_VERIFY(!comboBox->view()->isVisible()); + QCoreApplication::processEvents(); + QVERIFY(comboBox->view()->isVisible()); + QCOMPARE(comboBox->view()->pos(), popupPos); } void tst_QComboBox::layoutDirection() -- cgit v1.2.3 From 1909ab4b8fce0f9528e0ceaec9b0edf534c220de Mon Sep 17 00:00:00 2001 From: Joni Poikelin Date: Fri, 16 Jan 2015 10:46:16 +0200 Subject: Add test for QColorDialog initial color Task-number: QTBUG-43548 Change-Id: I9410072e5bf837933148d48c4f9d6797337485f5 Reviewed-by: Marc Mutz --- tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp b/tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp index fa50d10488..e4e4fda1ca 100644 --- a/tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp +++ b/tests/auto/widgets/dialogs/qcolordialog/tst_qcolordialog.cpp @@ -60,6 +60,7 @@ private slots: void defaultOkButton(); void native_activeModalWidget(); void task247349_alpha(); + void QTBUG_43548_initialColor(); }; class TestNativeDialog : public QColorDialog @@ -162,5 +163,14 @@ void tst_QColorDialog::task247349_alpha() QCOMPARE(alpha, qAlpha(dialog.currentColor().rgba())); } +void tst_QColorDialog::QTBUG_43548_initialColor() +{ + QColorDialog dialog; + dialog.setOption(QColorDialog::DontUseNativeDialog); + dialog.setCurrentColor(QColor(Qt::red)); + QColor a(Qt::red); + QCOMPARE(a, dialog.currentColor()); +} + QTEST_MAIN(tst_QColorDialog) #include "tst_qcolordialog.moc" -- cgit v1.2.3 From a15569b269598ef516b5fdb9ce3214f7d46bafb8 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Mon, 19 Jan 2015 10:56:05 +0200 Subject: Android: don't report xfail Change-Id: I2998632cffc29161eb26421b07cf51a4138fcad3 Reviewed-by: Eskil Abrahamsen Blomfeldt Reviewed-by: BogDan Vatra --- tests/auto/android/runtests_androiddeployqt.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'tests') diff --git a/tests/auto/android/runtests_androiddeployqt.pl b/tests/auto/android/runtests_androiddeployqt.pl index 8e9376da35..5ab6a63962 100755 --- a/tests/auto/android/runtests_androiddeployqt.pl +++ b/tests/auto/android/runtests_androiddeployqt.pl @@ -334,7 +334,7 @@ sub checkXMLOutput while (my($test_key, $test_valule) = each (%{$function_valule})) { next if $test_key ne "Incident"; for my $incident (@{$test_valule}) { - if ($incident->{type} ne "pass") { + if (($incident->{type} ne "pass") && ($incident->{type} ne "xfail")) { print "test $testName::$function_key failed $incident->{file}:$incident->{line}\n"; $fail = 1; } -- cgit v1.2.3 From 668a3a4da177f2da668555224954d0df70646fa8 Mon Sep 17 00:00:00 2001 From: Rainer Keller Date: Mon, 19 Jan 2015 11:03:49 +0100 Subject: Autotest: Use QFINDTESTDATA to find test data Change-Id: Ie6c659f6d8e8b3eeaf2453f0cba6189d56f86581 Reviewed-by: Oliver Wolff Reviewed-by: Richard J. Moore --- tests/auto/network/ssl/qsslcertificate/qsslcertificate.pro | 1 - tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp | 8 ++++---- 2 files changed, 4 insertions(+), 5 deletions(-) (limited to 'tests') diff --git a/tests/auto/network/ssl/qsslcertificate/qsslcertificate.pro b/tests/auto/network/ssl/qsslcertificate/qsslcertificate.pro index 69cd241f84..f2d6589410 100644 --- a/tests/auto/network/ssl/qsslcertificate/qsslcertificate.pro +++ b/tests/auto/network/ssl/qsslcertificate/qsslcertificate.pro @@ -6,6 +6,5 @@ SOURCES += tst_qsslcertificate.cpp QT = core network testlib TARGET = tst_qsslcertificate -DEFINES += SRCDIR=\\\"$$PWD/\\\" TESTDATA += certificates/* more-certificates/* verify-certs/* pkcs12/* diff --git a/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp b/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp index 82050e73fd..a300187b95 100644 --- a/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp +++ b/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp @@ -1301,7 +1301,7 @@ void tst_QSslCertificate::pkcs12() return; } - QFile f(QLatin1String(SRCDIR "pkcs12/leaf.p12")); + QFile f(testDataDir + QLatin1String("/pkcs12/leaf.p12")); bool ok = f.open(QIODevice::ReadOnly); QVERIFY(ok); @@ -1316,12 +1316,12 @@ void tst_QSslCertificate::pkcs12() QVERIFY(ok); f.close(); - QList leafCert = QSslCertificate::fromPath(QLatin1String( SRCDIR "pkcs12/leaf.crt")); + QList leafCert = QSslCertificate::fromPath(testDataDir + QLatin1String("/pkcs12/leaf.crt")); QVERIFY(!leafCert.isEmpty()); QCOMPARE(cert, leafCert.first()); - QFile f2(QLatin1String(SRCDIR "pkcs12/leaf.key")); + QFile f2(testDataDir + QLatin1String("/pkcs12/leaf.key")); ok = f2.open(QIODevice::ReadOnly); QVERIFY(ok); @@ -1331,7 +1331,7 @@ void tst_QSslCertificate::pkcs12() QVERIFY(!leafKey.isNull()); QCOMPARE(key, leafKey); - QList caCert = QSslCertificate::fromPath(QLatin1String(SRCDIR "pkcs12/inter.crt")); + QList caCert = QSslCertificate::fromPath(testDataDir + QLatin1String("/pkcs12/inter.crt")); QVERIFY(!caCert.isEmpty()); QVERIFY(!caCerts.isEmpty()); -- cgit v1.2.3 From ee1afbb8aa99e10f1dae11d8418e40351f685b64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Tue, 13 Jan 2015 10:49:07 +0100 Subject: tst_qstring_mac: Correct memory management. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The NSStrings return by QString::toNSString are autoreleased; manually releasing them is not correct. The test still works (no leaks or double deletes) since there is no autorelease pool in place when running it. We don't want to encourage incorrect usage: remove the release call an add an autorelease pool. Change-Id: Ic566fd3a8efd6cbc0eb6db850248a68bfc8fed0b Reviewed-by: Timur Pocheptsov Reviewed-by: Gabriel de Dietrich Reviewed-by: Tor Arne Vestbø Reviewed-by: Jake Petroules --- tests/auto/corelib/tools/qstring/tst_qstring_mac.mm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qstring/tst_qstring_mac.mm b/tests/auto/corelib/tools/qstring/tst_qstring_mac.mm index 9061b6c39d..4cec5b3798 100644 --- a/tests/auto/corelib/tools/qstring/tst_qstring_mac.mm +++ b/tests/auto/corelib/tools/qstring/tst_qstring_mac.mm @@ -63,17 +63,23 @@ void tst_QString_macTypes() } // QString <-> NSString { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + QString qtString("test string"); const NSString *nsString = qtString.toNSString(); QCOMPARE(QString::fromNSString(nsString), qtString); - [nsString release]; + + [pool release]; } { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + QString qtString("test string"); const NSString *nsString = qtString.toNSString(); QString qtStringCopy(qtString); qtString = qtString.toUpper(); // modify QCOMPARE(QString::fromNSString(nsString), qtStringCopy); - [nsString release]; + + [pool release]; } } -- cgit v1.2.3 From 8c5b3c6d912709d4db9624bb999b3166a27ee189 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 19 Jan 2015 14:57:05 +0100 Subject: Fix QVERIFY() in tst_qwidget. Replace by QCOMPARE where applicable; introduce message to generate output for failed comparisons with QVERIFY2(). Task-number: QTBUG-43872 Change-Id: I09c8f9fd31ceed224e441f253049f68907ca0d7a Reviewed-by: Oliver Wolff --- tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 90 ++++++++++++++--------- 1 file changed, 55 insertions(+), 35 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 756b22073e..562328810e 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -184,6 +184,14 @@ inline void setWindowsAnimationsEnabled(bool) {} static inline bool windowsAnimationsEnabled() { return false; } #endif // !Q_OS_WIN || Q_OS_WINCE || Q_OS_WINRT +template +static QByteArray msgComparisonFailed(T v1, const char *op, T v2) +{ + QString s; + QDebug(&s) << v1 << op << v2; + return s.toLocal8Bit(); +} + class tst_QWidget : public QObject { Q_OBJECT @@ -1393,11 +1401,13 @@ void tst_QWidget::fonts() newFont = newFont.resolve( testWidget->font() ); QVERIFY( cleanTestWidget->testAttribute(Qt::WA_SetFont) ); - QVERIFY( cleanTestWidget->font() == newFont ); + QVERIFY2( cleanTestWidget->font() == newFont, + msgComparisonFailed(cleanTestWidget->font(), "==", newFont)); cleanTestWidget->setFont(QFont()); QVERIFY( !cleanTestWidget->testAttribute(Qt::WA_SetFont) ); - QVERIFY( cleanTestWidget->font() == originalFont ); + QVERIFY2( cleanTestWidget->font() == originalFont, + msgComparisonFailed(cleanTestWidget->font(), "==", originalFont)); } void tst_QWidget::mapFromAndTo_data() @@ -1820,17 +1830,17 @@ void tst_QWidget::activation() widget2.show(); QTest::qWait(waitTime); - QVERIFY(qApp->activeWindow() == &widget2); + QCOMPARE(QApplication::activeWindow(), &widget2); widget2.showMinimized(); QTest::qWait(waitTime); - QVERIFY(qApp->activeWindow() == &widget1); + QCOMPARE(QApplication::activeWindow(), &widget1); widget2.showMaximized(); QTest::qWait(waitTime); - QVERIFY(qApp->activeWindow() == &widget2); + QCOMPARE(QApplication::activeWindow(), &widget2); widget2.showMinimized(); QTest::qWait(waitTime); - QVERIFY(qApp->activeWindow() == &widget1); + QCOMPARE(QApplication::activeWindow(), &widget1); widget2.showNormal(); QTest::qWait(waitTime); #ifndef Q_OS_WINCE @@ -1838,10 +1848,10 @@ void tst_QWidget::activation() QEXPECT_FAIL("", "MS introduced new behavior after XP", Continue); #endif QTest::qWait(waitTime); - QVERIFY(qApp->activeWindow() == &widget2); + QCOMPARE(QApplication::activeWindow(), &widget2); widget2.hide(); QTest::qWait(waitTime); - QVERIFY(qApp->activeWindow() == &widget1); + QCOMPARE(QApplication::activeWindow(), &widget1); } #endif // Q_OS_WIN @@ -2742,13 +2752,13 @@ void tst_QWidget::raise() QList list1; list1 << child1 << child2 << child3 << child4; - QVERIFY(parentPtr->children() == list1); + QCOMPARE(parentPtr->children(), list1); QCOMPARE(allChildren.count(), list1.count()); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = child == child4 ? 1 : 0; if (expectedPaintEvents == 0) { - QVERIFY(child->numPaintEvents == 0); + QCOMPARE(child->numPaintEvents, 0); } else { // show() issues multiple paint events on some window managers QTRY_VERIFY(child->numPaintEvents >= expectedPaintEvents); @@ -2771,7 +2781,7 @@ void tst_QWidget::raise() QList list2; list2 << child1 << child3 << child4 << child2; - QVERIFY(parentPtr->children() == list2); + QCOMPARE(parentPtr->children(), list2); // Creates a widget on top of all the children and checks that raising one of // the children underneath doesn't trigger a repaint on the covering widget. @@ -2804,7 +2814,7 @@ void tst_QWidget::raise() QList list3; list3 << child1 << child4 << child2 << child3; - QVERIFY(parent->children() == list3); + QCOMPARE(parent->children(), list3); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = 0; @@ -2846,13 +2856,13 @@ void tst_QWidget::lower() QList list1; list1 << child1 << child2 << child3 << child4; - QVERIFY(parent->children() == list1); + QCOMPARE(parent->children(), list1); QCOMPARE(allChildren.count(), list1.count()); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = child == child4 ? 1 : 0; if (expectedPaintEvents == 0) { - QVERIFY(child->numPaintEvents == 0); + QCOMPARE(child->numPaintEvents, 0); } else { // show() issues multiple paint events on some window managers QTRY_VERIFY(child->numPaintEvents >= expectedPaintEvents); @@ -2876,7 +2886,7 @@ void tst_QWidget::lower() QList list2; list2 << child4 << child1 << child2 << child3; - QVERIFY(parent->children() == list2); + QCOMPARE(parent->children(), list2); } #endif @@ -2910,7 +2920,7 @@ void tst_QWidget::stackUnder() QVERIFY(QTest::qWaitForWindowExposed(parent.data())); QList list1; list1 << child1 << child2 << child3 << child4; - QVERIFY(parent->children() == list1); + QCOMPARE(parent->children(), list1); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = child == child4 ? 1 : 0; @@ -2929,7 +2939,7 @@ void tst_QWidget::stackUnder() QList list2; list2 << child1 << child4 << child2 << child3; - QVERIFY(parent->children() == list2); + QCOMPARE(parent->children(), list2); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = child == child3 ? 1 : 0; @@ -2945,7 +2955,7 @@ void tst_QWidget::stackUnder() QList list3; list3 << child4 << child2 << child1 << child3; - QVERIFY(parent->children() == list3); + QCOMPARE(parent->children(), list3); foreach (UpdateWidget *child, allChildren) { int expectedZOrderChangeEvents = child == child1 ? 1 : 0; @@ -3757,8 +3767,10 @@ void tst_QWidget::setMinimumSize() w.setMinimumSize(nonDefaultSize); w.showNormal(); QTest::qWait(50); - QVERIFY(w.height() >= nonDefaultSize.height()); - QVERIFY(w.width() >= nonDefaultSize.width()); + QVERIFY2(w.height() >= nonDefaultSize.height(), + msgComparisonFailed(w.height(), ">=", nonDefaultSize.height())); + QVERIFY2(w.width() >= nonDefaultSize.width(), + msgComparisonFailed(w.width(), ">=", nonDefaultSize.width())); #endif } @@ -3810,7 +3822,7 @@ void tst_QWidget::setFixedSize() QTest::qWait(50); if (m_platform == QStringLiteral("xcb")) QSKIP("QTBUG-26424"); - QVERIFY(w.size() == defaultSize + QSize(150,150)); + QCOMPARE(w.size(), defaultSize + QSize(150,150)); } void tst_QWidget::ensureCreated() @@ -4695,8 +4707,8 @@ void tst_QWidget::setGeometry_win() widget.show(); RECT rt; ::GetWindowRect(winHandleOf(&widget), &rt); - QVERIFY(rt.left <= 0); - QVERIFY(rt.top <= 0); + QVERIFY2(rt.left <= 0, msgComparisonFailed(int(rt.left), "<=", 0)); + QVERIFY2(rt.top <= 0, msgComparisonFailed(int(rt.top), "<=", 0)); } #endif // defined (Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) @@ -6544,7 +6556,8 @@ void tst_QWidget::renderInvisible() QPixmap pixmap(topLevel.sizeHint()); topLevel.render(&pixmap); // triggers adjustSize() const QSize finalSize = topLevel.size(); - QVERIFY(finalSize != initialSize); + QVERIFY2(finalSize != initialSize, + msgComparisonFailed(finalSize, "!=", initialSize)); topLevel.layout()->removeWidget(widget); QCOMPARE(topLevel.size(), finalSize); @@ -7185,7 +7198,7 @@ void tst_QWidget::setContentsMargins() QSize oldSize = label.sizeHint(); label.setFrameStyle(QFrame::Sunken | QFrame::Box); QSize newSize = label.sizeHint(); - QVERIFY(oldSize != newSize); + QVERIFY2(oldSize != newSize, msgComparisonFailed(oldSize, "!=", newSize)); QLabel label2("why does it always rain on me?"); label2.show(); @@ -7718,8 +7731,10 @@ void tst_QWidget::adjustSize() child->resize(123, 456); child->adjustSize(); if (expectedSize == QSize(100000, 100000)) { - QVERIFY(child->size().width() < sizeHint.width()); - QVERIFY(child->size().height() < sizeHint.height()); + QVERIFY2(child->size().width() < sizeHint.width(), + msgComparisonFailed(child->size().width(), "<", sizeHint.width())); + QVERIFY2(child->size().height() < sizeHint.height(), + msgComparisonFailed(child->size().height(), "<", sizeHint.height())); } else { #if defined (Q_OS_WINCE) if (!haveParent) { @@ -9508,8 +9523,10 @@ void tst_QWidget::childAt_unifiedToolBar() // we use mapToGlobal/mapFromGlobal to re-calculate the corners. QPoint oldToolBarTopLeft = toolBarTopLeft; toolBarTopLeft = mainWindow.mapFromGlobal(toolBar->mapToGlobal(QPoint())); - QVERIFY(toolBarTopLeft != oldToolBarTopLeft); - QVERIFY(toolBarTopLeft.y() < 0); + QVERIFY2(toolBarTopLeft != oldToolBarTopLeft, + msgComparisonFailed(toolBarTopLeft, "!=", oldToolBarTopLeft)); + QVERIFY2(toolBarTopLeft.y() < 0, + msgComparisonFailed(toolBarTopLeft.y(), "<", 0)); labelTopLeft = mainWindow.mapFromGlobal(label->mapToGlobal(QPoint())); QCOMPARE(mainWindow.childAt(toolBarTopLeft), static_cast(toolBar)); @@ -9740,7 +9757,7 @@ void tst_QWidget::grabKeyboard() QTest::keyClick(w.windowHandle(), Qt::Key_A); grabber->releaseKeyboard(); QCOMPARE(grabber->text().toLower(), QStringLiteral("a")); - QVERIFY(nonGrabber->text().isEmpty()); + QVERIFY2(nonGrabber->text().isEmpty(), qPrintable(nonGrabber->text())); } class TouchMouseWidget : public QWidget { @@ -10092,7 +10109,7 @@ void tst_QWidget::underMouse() QVERIFY(QTest::qWaitForWindowExposed(&popupWidget)); QWindow *popupWindow = popupWidget.windowHandle(); QVERIFY(popupWindow); - QVERIFY(QApplication::activePopupWidget() == &popupWidget); + QCOMPARE(QApplication::activePopupWidget(), &popupWidget); // Send an artificial leave event for window, as it won't get generated automatically // due to cursor not actually being over the window. @@ -10365,13 +10382,15 @@ void tst_QWidget::largerThanScreen_QTBUG30142() widget.resize(200, 4000); widget.show(); QVERIFY(QTest::qWaitForWindowExposed(&widget)); - QVERIFY(widget.frameGeometry().y() >= 0); + QVERIFY2(widget.frameGeometry().y() >= 0, + msgComparisonFailed(widget.frameGeometry().y(), " >=", 0)); QWidget widget2; widget2.resize(10000, 400); widget2.show(); QVERIFY(QTest::qWaitForWindowExposed(&widget2)); - QVERIFY(widget2.frameGeometry().x() >= 0); + QVERIFY2(widget2.frameGeometry().x() >= 0, + msgComparisonFailed(widget.frameGeometry().x(), " >=", 0)); } void tst_QWidget::resizeStaticContentsChildWidget_QTBUG35282() @@ -10386,13 +10405,14 @@ void tst_QWidget::resizeStaticContentsChildWidget_QTBUG35282() widget.showNormal(); QVERIFY(QTest::qWaitForWindowExposed(&widget)); - QVERIFY(childWidget.numPaintEvents == 0); + QCOMPARE(childWidget.numPaintEvents, 0); childWidget.reset(); widget.resize(1000,1000); QVERIFY(QTest::qWaitForWindowExposed(&widget)); QGuiApplication::sync(); - QVERIFY(childWidget.numPaintEvents >= 1); + QVERIFY2(childWidget.numPaintEvents >= 1, + msgComparisonFailed(childWidget.numPaintEvents, ">=", 1)); } QTEST_MAIN(tst_QWidget) -- cgit v1.2.3 From 0b62cd8da7d8ee078b799b95088a63626099caa4 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 19 Jan 2015 15:00:05 +0100 Subject: Windows: Fix coordinate offset when positioning the taskbar on the left. For windows that do not have WS_EX_TOOLWINDOW set, the WINDOWPLACEMENT API uses workspace/available aera coordinates. Introduce a helper function to return the offset and use that. Task-number: QTBUG-43872 Change-Id: I329c640f180524699b45b855b4583f447c4a0987 Reviewed-by: Oliver Wolff --- tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 562328810e..d977f78b23 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -4696,8 +4696,9 @@ void tst_QWidget::setWindowGeometry() void tst_QWidget::setGeometry_win() { QWidget widget; + setFrameless(&widget); - widget.setGeometry(0, 600, 100,100); + widget.setGeometry(QRect(m_availableTopLeft + QPoint(0, 600), QSize(100, 100))); widget.show(); widget.setWindowState(widget.windowState() | Qt::WindowMaximized); QRect geom = widget.normalGeometry(); @@ -4707,8 +4708,10 @@ void tst_QWidget::setGeometry_win() widget.show(); RECT rt; ::GetWindowRect(winHandleOf(&widget), &rt); - QVERIFY2(rt.left <= 0, msgComparisonFailed(int(rt.left), "<=", 0)); - QVERIFY2(rt.top <= 0, msgComparisonFailed(int(rt.top), "<=", 0)); + QVERIFY2(rt.left <= m_availableTopLeft.x(), + msgComparisonFailed(int(rt.left), "<=", m_availableTopLeft.x())); + QVERIFY2(rt.top <= m_availableTopLeft.y(), + msgComparisonFailed(int(rt.top), "<=", m_availableTopLeft.y())); } #endif // defined (Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT) -- cgit v1.2.3 From 473ad206c40ac99d00732f5862a51affcd746d2d Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 7 Jan 2015 16:00:08 -0800 Subject: Fix QSharedPointer::create and QEnableSharedFromThis We forgot to initialize the tracker if create() was used. Task-number: QTBUG-43696 Change-Id: Ic5d393bfd36e48a193fcffff13b740931ff2204b Reviewed-by: Marc Mutz --- .../tools/qsharedpointer/tst_qsharedpointer.cpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp index d5a628889c..346ce6fcf9 100644 --- a/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp +++ b/tests/auto/corelib/tools/qsharedpointer/tst_qsharedpointer.cpp @@ -2355,6 +2355,24 @@ void tst_QSharedPointer::sharedFromThis() QCOMPARE(Data::generationCounter, generations + 4); QCOMPARE(Data::destructorCounter, destructions + 4); + { + QSharedPointer scp2 = QSharedPointer::create(); + QVERIFY(!scp2.isNull()); + + scp = scp2->sharedFromThis(); + QVERIFY(!scp.isNull()); + + QVERIFY(scp == scp2); + QCOMPARE(Data::generationCounter, generations + 5); + QCOMPARE(Data::destructorCounter, destructions + 4); + } + QCOMPARE(Data::generationCounter, generations + 5); + QCOMPARE(Data::destructorCounter, destructions + 4); + + scp.clear(); + + QCOMPARE(Data::generationCounter, generations + 5); + QCOMPARE(Data::destructorCounter, destructions + 5); } namespace ReentrancyWhileDestructing { -- cgit v1.2.3 From 0eaa86dd018294d1a961f486bf290f8647293c6d Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Tue, 1 Jul 2014 15:39:32 +0200 Subject: Accessibility: Fix selection change notifications on Linux MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The selection update is not implemented on other platforms (if needed at all). Task-number: QTBUG-39440 Change-Id: I8eb8c4eb1c23ba2d246bc95f1c77dc9da9e22495 Reviewed-by: Jan Arve Sæther --- tests/auto/other/qaccessibility/tst_qaccessibility.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp index ef70509541..e59509a944 100644 --- a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp +++ b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp @@ -2779,7 +2779,7 @@ void tst_QAccessibility::listTest() // Check for events QTest::mouseClick(listView->viewport(), Qt::LeftButton, 0, listView->visualItemRect(listView->item(1)).center()); - QAccessibleEvent selectionEvent(listView, QAccessible::Selection); + QAccessibleEvent selectionEvent(listView, QAccessible::SelectionAdd); selectionEvent.setChild(1); QAccessibleEvent focusEvent(listView, QAccessible::Focus); focusEvent.setChild(1); @@ -2787,7 +2787,7 @@ void tst_QAccessibility::listTest() QVERIFY(QTestAccessibility::containsEvent(&focusEvent)); QTest::mouseClick(listView->viewport(), Qt::LeftButton, 0, listView->visualItemRect(listView->item(2)).center()); - QAccessibleEvent selectionEvent2(listView, QAccessible::Selection); + QAccessibleEvent selectionEvent2(listView, QAccessible::SelectionAdd); selectionEvent2.setChild(2); QAccessibleEvent focusEvent2(listView, QAccessible::Focus); focusEvent2.setChild(2); @@ -3281,7 +3281,7 @@ void tst_QAccessibility::tableTest() tableView->setSelectionBehavior(QAbstractItemView::SelectItems); tableView->setSelectionMode(QAbstractItemView::SingleSelection); tableView->selectionModel()->select(index00, QItemSelectionModel::ClearAndSelect); - QAccessibleEvent event(tableView, QAccessible::Selection); + QAccessibleEvent event(tableView, QAccessible::SelectionAdd); event.setChild(12); QCOMPARE(QTestAccessibility::containsEvent(&event), true); QTestAccessibility::clearEvents(); -- cgit v1.2.3 From 358a9ac9362917e644e4c09c8d5c85d13faf5503 Mon Sep 17 00:00:00 2001 From: Frederik Gladhorn Date: Sun, 7 Sep 2014 08:48:29 +0200 Subject: Do not include accessibility.pri twice Change-Id: Id4b312a57b098ad893ba08e7a3c7f1a0fb891eef Reviewed-by: Friedemann Kleint --- tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro | 1 + 1 file changed, 1 insertion(+) (limited to 'tests') diff --git a/tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro b/tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro index cb5bc04c1d..2ea54ab603 100644 --- a/tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro +++ b/tests/auto/other/qaccessibilitylinux/qaccessibilitylinux.pro @@ -3,6 +3,7 @@ CONFIG += testcase # This is temporary to start running the test as part of normal CI. CONFIG += insignificant_test # QTBUG-27732 +include($$QT_SOURCE_TREE/src/platformsupport/accessibility/accessibility.pri) include($$QT_SOURCE_TREE/src/platformsupport/linuxaccessibility/linuxaccessibility.pri) TARGET = tst_qaccessibilitylinux -- cgit v1.2.3 From a4c837b3a1168ab07415501f141395dfffc3ed18 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Tue, 20 Jan 2015 12:30:26 -0800 Subject: Fix QUdpSocket's emission of readyRead() The documentation says that QUdpSocket emits readyRead() only for one datagram and that if you don't read it, the class will not emit again. That should be implemented by disabling of the socket notifier once we have the datagram already read, but was broken. In turn, that breakage caused a live-lock of the event loop: since we didn't disable the notifier nor read the pending datagram, the event loop would fire every time for the same datagram. The re-enabling of the notifier was already working. Task-number: QTBUG-43857 Change-Id: Ic5d393bfd36e48a193fcffff13bb32ad390b5fe8 Reviewed-by: Peter Hartmann Reviewed-by: Richard J. Moore --- .../network/socket/qudpsocket/tst_qudpsocket.cpp | 90 ++++++++++++++++++++++ 1 file changed, 90 insertions(+) (limited to 'tests') diff --git a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp index db09ec4486..49a3a720c7 100644 --- a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp +++ b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2015 Intel Corporation. ** Contact: http://www.qt-project.org/legal ** ** This file is part of the test suite of the Qt Toolkit. @@ -114,6 +115,8 @@ private slots: void echo(); void linkLocalIPv6(); void linkLocalIPv4(); + void readyRead(); + void readyReadForEmptyDatagram(); protected slots: void empty_readyReadSlot(); @@ -1515,5 +1518,92 @@ void tst_QUdpSocket::linkLocalIPv4() qDeleteAll(sockets); } +void tst_QUdpSocket::readyRead() +{ + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; + + char buf[1]; + QUdpSocket sender, receiver; +#ifdef FORCE_SESSION + sender.setProperty("_q_networksession", QVariant::fromValue(networkSession)); + receiver.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif + + QVERIFY(receiver.bind(QHostAddress(QHostAddress::AnyIPv4), 0)); + quint16 port = receiver.localPort(); + QVERIFY(port != 0); + + QSignalSpy spy(&receiver, SIGNAL(readyRead())); + + // send a datagram to that port + sender.writeDatagram("a", makeNonAny(receiver.localAddress()), port); + + // wait a little + // if QTBUG-43857 is still going, we'll live-lock on socket notifications from receiver's socket + QTest::qWait(100); + + // make sure only one signal was emitted + QCOMPARE(spy.count(), 1); + QVERIFY(receiver.hasPendingDatagrams()); + QCOMPARE(receiver.bytesAvailable(), qint64(1)); + QCOMPARE(receiver.pendingDatagramSize(), qint64(1)); + + // write another datagram + sender.writeDatagram("ab", makeNonAny(receiver.localAddress()), port); + + // no new signal should be emitted because we haven't read the first datagram yet + QTest::qWait(100); + QCOMPARE(spy.count(), 1); + QVERIFY(receiver.hasPendingDatagrams()); + QVERIFY(receiver.bytesAvailable() >= 1); // most likely is 1, but it could be 1 + 2 in the future + QCOMPARE(receiver.pendingDatagramSize(), qint64(1)); + + // read all the datagrams (we could read one only, but we can't be sure the OS is queueing) + while (receiver.hasPendingDatagrams()) + receiver.readDatagram(buf, sizeof buf); + + // write a new datagram and ensure the signal is emitted now + sender.writeDatagram("abc", makeNonAny(receiver.localAddress()), port); + QTest::qWait(100); + QCOMPARE(spy.count(), 2); + QVERIFY(receiver.hasPendingDatagrams()); + QCOMPARE(receiver.bytesAvailable(), qint64(3)); + QCOMPARE(receiver.pendingDatagramSize(), qint64(3)); +} + +void tst_QUdpSocket::readyReadForEmptyDatagram() +{ + QFETCH_GLOBAL(bool, setProxy); + if (setProxy) + return; + + QUdpSocket sender, receiver; +#ifdef FORCE_SESSION + sender.setProperty("_q_networksession", QVariant::fromValue(networkSession)); + receiver.setProperty("_q_networksession", QVariant::fromValue(networkSession)); +#endif + + QVERIFY(receiver.bind(QHostAddress(QHostAddress::AnyIPv4), 0)); + quint16 port = receiver.localPort(); + QVERIFY(port != 0); + + connect(&receiver, SIGNAL(readyRead()), SLOT(empty_readyReadSlot())); + + // send an empty datagram to that port + sender.writeDatagram("", makeNonAny(receiver.localAddress()), port); + + // ensure that we got a readyRead, despite bytesAvailable() == 0 + QTestEventLoop::instance().enterLoop(1); + QVERIFY(!QTestEventLoop::instance().timeout()); + + char buf[1]; + QVERIFY(receiver.hasPendingDatagrams()); + QCOMPARE(receiver.pendingDatagramSize(), qint64(0)); + QCOMPARE(receiver.bytesAvailable(), qint64(0)); + QCOMPARE(receiver.readDatagram(buf, sizeof buf), qint64(0)); +} + QTEST_MAIN(tst_QUdpSocket) #include "tst_qudpsocket.moc" -- cgit v1.2.3 From c8c68ecb8fc3b713e1b77c15b85ab94c7dde7d67 Mon Sep 17 00:00:00 2001 From: Rainer Keller Date: Wed, 21 Jan 2015 08:00:34 +0100 Subject: Autotest: Make mimedatabase testdata resources Change-Id: Ia410d6b0cdece248651213dbbb035c951e5f6983 Reviewed-by: David Faure --- .../qmimedatabase-cache/qmimedatabase-cache.pro | 4 ++-- .../qmimedatabase/qmimedatabase-xml/qmimedatabase-xml.pro | 3 ++- tests/auto/corelib/mimetypes/qmimedatabase/testdata.qrc | 7 +++++++ .../corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp | 13 ++++++------- 4 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 tests/auto/corelib/mimetypes/qmimedatabase/testdata.qrc (limited to 'tests') diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/qmimedatabase-cache.pro b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/qmimedatabase-cache.pro index 9f006b4a4f..d0dbf077c8 100644 --- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/qmimedatabase-cache.pro +++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-cache/qmimedatabase-cache.pro @@ -6,8 +6,8 @@ QT = core testlib concurrent SOURCES = tst_qmimedatabase-cache.cpp HEADERS = ../tst_qmimedatabase.h - -DEFINES += CORE_SOURCES='"\\"$$QT_SOURCE_TREE/src/corelib\\""' +RESOURCES += $$QT_SOURCE_TREE/src/corelib/mimetypes/mimetypes.qrc +RESOURCES += ../testdata.qrc *-g++*:QMAKE_CXXFLAGS += -W -Wall -Wextra -Wshadow -Wno-long-long -Wnon-virtual-dtor DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/qmimedatabase-xml.pro b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/qmimedatabase-xml.pro index 8dd8d930c1..6d7cbc6016 100644 --- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/qmimedatabase-xml.pro +++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase-xml/qmimedatabase-xml.pro @@ -7,7 +7,8 @@ QT = core testlib concurrent SOURCES += tst_qmimedatabase-xml.cpp HEADERS += ../tst_qmimedatabase.h -DEFINES += CORE_SOURCES='"\\"$$QT_SOURCE_TREE/src/corelib\\""' +RESOURCES += $$QT_SOURCE_TREE/src/corelib/mimetypes/mimetypes.qrc +RESOURCES += ../testdata.qrc *-g++*:QMAKE_CXXFLAGS += -W -Wall -Wextra -Wshadow -Wno-long-long -Wnon-virtual-dtor DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0 diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/testdata.qrc b/tests/auto/corelib/mimetypes/qmimedatabase/testdata.qrc new file mode 100644 index 0000000000..48d3204473 --- /dev/null +++ b/tests/auto/corelib/mimetypes/qmimedatabase/testdata.qrc @@ -0,0 +1,7 @@ + + + yast2-metapackage-handler-mimetypes.xml + qml-again.xml + test.qml + + diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp index 6dec691b1f..686e25c800 100644 --- a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp +++ b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp @@ -45,6 +45,7 @@ static const char yastFileName[] ="yast2-metapackage-handler-mimetypes.xml"; static const char qmlAgainFileName[] ="qml-again.xml"; +#define RESOURCE_PREFIX ":/qt-project.org/qmime/" void initializeLang() { @@ -99,9 +100,7 @@ void tst_QMimeDatabase::initTestCase() << "\nGlobal XDG_DATA_DIRS: " << m_globalXdgDir; const QString freeDesktopXml = QStringLiteral("freedesktop.org.xml"); - const QString xmlFileName = QLatin1String(CORE_SOURCES) - + QStringLiteral("/mimetypes/mime/packages/") - + freeDesktopXml; + const QString xmlFileName = QLatin1String(RESOURCE_PREFIX) + freeDesktopXml; QVERIFY2(QFileInfo(xmlFileName).exists(), qPrintable(xmlFileName + QStringLiteral(" does not exist"))); QFile xml(xmlFileName); QVERIFY(xml.copy(globalPackageDir + '/' + freeDesktopXml)); @@ -110,11 +109,11 @@ void tst_QMimeDatabase::initTestCase() if (m_testSuite.isEmpty()) qWarning("%s", qPrintable(testSuiteWarning())); - m_yastMimeTypes = QFINDTESTDATA(yastFileName); + m_yastMimeTypes = QLatin1String(RESOURCE_PREFIX) + yastFileName; QVERIFY2(!m_yastMimeTypes.isEmpty(), qPrintable(QString::fromLatin1("Cannot find '%1' starting from '%2'"). arg(yastFileName, QDir::currentPath()))); - m_qmlAgainFileName = QFINDTESTDATA(qmlAgainFileName); + m_qmlAgainFileName = QLatin1String(RESOURCE_PREFIX) + qmlAgainFileName; QVERIFY2(!m_qmlAgainFileName.isEmpty(), qPrintable(QString::fromLatin1("Cannot find '%1' starting from '%2'"). arg(qmlAgainFileName, QDir::currentPath()))); @@ -844,7 +843,7 @@ void tst_QMimeDatabase::installNewGlobalMimeType() checkHasMimeType("text/x-suse-ymp"); // Test that a double-definition of a mimetype doesn't lead to sniffing ("conflicting globs"). - const QString qmlTestFile = QFINDTESTDATA("test.qml"); + const QString qmlTestFile = QLatin1String(RESOURCE_PREFIX "test.qml"); QVERIFY2(!qmlTestFile.isEmpty(), qPrintable(QString::fromLatin1("Cannot find '%1' starting from '%2'"). arg("test.qml", QDir::currentPath()))); @@ -893,7 +892,7 @@ void tst_QMimeDatabase::installNewLocalMimeType() checkHasMimeType("text/x-suse-ymp"); // Test that a double-definition of a mimetype doesn't lead to sniffing ("conflicting globs"). - const QString qmlTestFile = QFINDTESTDATA("test.qml"); + const QString qmlTestFile = QLatin1String(RESOURCE_PREFIX "test.qml"); QVERIFY2(!qmlTestFile.isEmpty(), qPrintable(QString::fromLatin1("Cannot find '%1' starting from '%2'"). arg("test.qml", QDir::currentPath()))); -- cgit v1.2.3 From 2ecde56f65c21e91c2d7e9fe72ecb9c9d1ff1d33 Mon Sep 17 00:00:00 2001 From: Giuseppe D'Angelo Date: Wed, 14 Jan 2015 00:25:26 +0100 Subject: QSortFilterProxyModel: fix a regression bec1854cc023fb705319c582a636d5f484adafcc introduced a regression: when sorting a tree model, children items would not follow the sorted parents any more (they wouldn't be remapped correctly), resulting in crashes. So, the fix needs more reasoning; let's revert the fix, but leave the original test around for any subsequent attempt, and introduce a new test which looks for the right behavior when sorting trees. This commit partially reverts bec1854cc023fb705319c582a636d5f484adafcc. Task-number: QTBUG-43827 Change-Id: Ic83ac53aef639f870f6c36a8b4b2992f5b485b13 Reviewed-by: David Faure Reviewed-by: Volker Krause (cherry-picked from qtbase/e9ad46ed412987e3e46c5a641e5f30408b97ac90) --- .../tst_qsortfilterproxymodel.cpp | 37 ++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp index 53ed1bc9a0..5bb7ffc401 100644 --- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp +++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp @@ -96,6 +96,7 @@ private slots: void changeSourceData_data(); void changeSourceData(); void changeSourceDataKeepsStableSorting_qtbug1548(); + void resortingDoesNotBreakTreeModels(); void sortFilterRole(); void selectionFilteredOut(); void match_data(); @@ -2029,6 +2030,8 @@ static void checkSortedTableModel(const QAbstractItemModel *model, const QString void tst_QSortFilterProxyModel::changeSourceDataKeepsStableSorting_qtbug1548() { + QSKIP("This test will fail, see QTBUG-1548"); + // Check that emitting dataChanged from the source model // for a change of a role which is not the sorting role // doesn't alter the sorting. In this case, we sort on the DisplayRole, @@ -4028,5 +4031,39 @@ void tst_QSortFilterProxyModel::canDropMimeData() QCOMPARE(proxy.canDropMimeData(0, Qt::CopyAction, -1, -1, proxy.index(row, 0)), row < 5); } +void tst_QSortFilterProxyModel::resortingDoesNotBreakTreeModels() +{ + QStandardItemModel *treeModel = new QStandardItemModel(this); + QStandardItem *e1 = new QStandardItem("Loading..."); + e1->appendRow(new QStandardItem("entry10")); + treeModel->appendRow(e1); + QStandardItem *e0 = new QStandardItem("Loading..."); + e0->appendRow(new QStandardItem("entry00")); + e0->appendRow(new QStandardItem("entry01")); + treeModel->appendRow(e0); + + QSortFilterProxyModel proxy; + proxy.setDynamicSortFilter(true); + proxy.sort(0); + proxy.setSourceModel(treeModel); + + ModelTest modelTest(&proxy); + + QCOMPARE(proxy.rowCount(), 2); + e1->setText("entry1"); + e0->setText("entry0"); + + QModelIndex pi0 = proxy.index(0, 0); + QCOMPARE(pi0.data().toString(), QString("entry0")); + QCOMPARE(proxy.rowCount(pi0), 2); + + QModelIndex pi01 = proxy.index(1, 0, pi0); + QCOMPARE(pi01.data().toString(), QString("entry01")); + + QModelIndex pi1 = proxy.index(1, 0); + QCOMPARE(pi1.data().toString(), QString("entry1")); + QCOMPARE(proxy.rowCount(pi1), 1); +} + QTEST_MAIN(tst_QSortFilterProxyModel) #include "tst_qsortfilterproxymodel.moc" -- cgit v1.2.3 From 508b1fa173e135c839f07e0e4cd6009ac63a577c Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Tue, 20 Jan 2015 09:34:42 +0100 Subject: QTemporaryDir: Remove directories on failure When creating a temporary directory but failing to set its permissions, we need to remove the directory we created to avoid leaving 256 empty, unused directories in the destination folder. This happens on Android if you try creating a QTemporaryDir in the download path on the sdcard. Task-number: QTBUG-43352 Change-Id: Ic88fb7572f1abd65e5c7d8882b59c95f4b22ed72 Reviewed-by: Oswald Buddenhagen Reviewed-by: Thiago Macieira --- tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'tests') diff --git a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp index a68a1185b8..e909b90a12 100644 --- a/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp +++ b/tests/auto/corelib/io/qtemporarydir/tst_qtemporarydir.cpp @@ -70,6 +70,8 @@ private slots: void QTBUG_4796_data(); void QTBUG_4796(); + void QTBUG43352_failedSetPermissions(); + public: }; @@ -419,5 +421,17 @@ void tst_QTemporaryDir::QTBUG_4796() // unicode support cleaner.reset(); } +void tst_QTemporaryDir::QTBUG43352_failedSetPermissions() +{ + QString path = QStandardPaths::writableLocation(QStandardPaths::DownloadLocation) + QStringLiteral("/"); + int count = QDir(path).entryList().size(); + + { + QTemporaryDir dir(path); + } + + QCOMPARE(QDir(path).entryList().size(), count); +} + QTEST_MAIN(tst_QTemporaryDir) #include "tst_qtemporarydir.moc" -- cgit v1.2.3 From 560c8ac09865caa93228da8c343a93dce6ba01d2 Mon Sep 17 00:00:00 2001 From: Eskil Abrahamsen Blomfeldt Date: Wed, 14 Jan 2015 12:44:29 +0100 Subject: Android: Fix some tests for QCompleter When checking for completion on the file system, we need to check for directories that actually exists. Change-Id: Id83e3802abcd40355dcd8cd47f2d55061eacd117 Reviewed-by: Christian Stromme --- tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp b/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp index 1d6e75e76e..f8f3900372 100644 --- a/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp +++ b/tests/auto/widgets/util/qcompleter/tst_qcompleter.cpp @@ -601,6 +601,9 @@ void tst_QCompleter::directoryModel_data() QTest::newRow("()") << "" << "" << "/" << "/"; QTest::newRow("(/a)") << "/a" << "" << "Applications" << "/Applications"; QTest::newRow("(/u)") << "/u" << "" << "Users" << "/Users"; +#elif defined(Q_OS_ANDROID) + QTest::newRow("()") << "" << "" << "/" << "/"; + QTest::newRow("(/et)") << "/et" << "" << "etc" << "/etc"; #else QTest::newRow("()") << "" << "" << "/" << "/"; #if !defined(Q_OS_IRIX) && !defined(Q_OS_AIX) && !defined(Q_OS_HPUX) && !defined(Q_OS_QNX) @@ -647,6 +650,9 @@ void tst_QCompleter::fileSystemModel_data() QTest::newRow("()") << "" << "" << "/" << "/"; QTest::newRow("(/a)") << "/a" << "" << "Applications" << "/Applications"; // QTest::newRow("(/d)") << "/d" << "" << "Developer" << "/Developer"; +#elif defined(Q_OS_ANDROID) + QTest::newRow("()") << "" << "" << "/" << "/"; + QTest::newRow("(/et)") << "/et" << "" << "etc" << "/etc"; #else QTest::newRow("()") << "" << "" << "/" << "/"; #if !defined(Q_OS_IRIX) && !defined(Q_OS_AIX) && !defined(Q_OS_HPUX) && !defined(Q_OS_QNX) -- cgit v1.2.3 From cebd6d59cb52bad59e4056691c8eb04690858897 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 22 Jan 2015 16:53:16 +0100 Subject: Diaglib: Fix compilation with Qt 5.3. QDebug does not have noquote() in Qt 5.3. Task-number: QTBUG-44021 Change-Id: If35b926d6b1e5bb9ad3534357630533dfcecd076 Reviewed-by: Kai Koehne --- tests/manual/diaglib/nativewindowdump_win.cpp | 2 +- tests/manual/diaglib/qwidgetdump.cpp | 2 +- tests/manual/diaglib/qwindowdump.cpp | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/manual/diaglib/nativewindowdump_win.cpp b/tests/manual/diaglib/nativewindowdump_win.cpp index 814b580f4b..a8e715583d 100644 --- a/tests/manual/diaglib/nativewindowdump_win.cpp +++ b/tests/manual/diaglib/nativewindowdump_win.cpp @@ -166,7 +166,7 @@ static void dumpNativeWindows(const WIdVector& wins) dc.stream = QSharedPointer(new QTextStream(&s)); foreach (WId win, wins) dumpNativeWindowRecursion(reinterpret_cast(win), &dc); -#if QT_VERSION > 0x050000 +#if QT_VERSION >= 0x050400 qDebug().noquote() << s; #else qDebug("%s", qPrintable(s)); diff --git a/tests/manual/diaglib/qwidgetdump.cpp b/tests/manual/diaglib/qwidgetdump.cpp index d4f985c7c8..894f51bce3 100644 --- a/tests/manual/diaglib/qwidgetdump.cpp +++ b/tests/manual/diaglib/qwidgetdump.cpp @@ -84,7 +84,7 @@ void dumpAllWidgets(FormatWindowOptions options) str << "### QWidgets:\n"; foreach (QWidget *tw, QApplication::topLevelWidgets()) dumpWidgetRecursion(str, tw, options); -#if QT_VERSION > 0x050000 +#if QT_VERSION >= 0x050400 qDebug().noquote() << d; #else qDebug("%s", qPrintable(d)); diff --git a/tests/manual/diaglib/qwindowdump.cpp b/tests/manual/diaglib/qwindowdump.cpp index 2ecc52ca77..228472cd44 100644 --- a/tests/manual/diaglib/qwindowdump.cpp +++ b/tests/manual/diaglib/qwindowdump.cpp @@ -157,7 +157,11 @@ void dumpAllWindows(FormatWindowOptions options) str << "### QWindows:\n"; foreach (QWindow *w, QGuiApplication::topLevelWindows()) dumpWindowRecursion(str, w, options); +#if QT_VERSION >= 0x050400 qDebug().noquote() << d; +#else + qDebug() << d; +#endif } #else // Qt 5 -- cgit v1.2.3 From 906577c8b0045724b9b961926085e933c8e0d339 Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Tue, 9 Dec 2014 15:10:09 +0100 Subject: Enter/Return should cause an edit inside an itemview on OS X This was available before but was protected with the wrong define for OS X, so this is changed to the right define. Task-number: QTBUG-23696 QTBUG-23703 Change-Id: I669a6cf2ff7c01020693adff9f04a4b8b9404d02 Reviewed-by: David Faure --- tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp | 3 --- tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp | 3 --- 2 files changed, 6 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp index 92200618d6..92f768586a 100644 --- a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp +++ b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp @@ -1299,9 +1299,6 @@ void tst_QFiledialog::clearLineEdit() #endif QTest::qWait(2000); -#ifdef Q_OS_MAC - QEXPECT_FAIL("", "QTBUG-23703", Abort); -#endif QVERIFY(fd.directory().absolutePath() != QDir::home().absolutePath()); QVERIFY(!lineEdit->text().isEmpty()); diff --git a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp index 6ab93ba6db..0ca836d946 100644 --- a/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/widgets/itemviews/qtreeview/tst_qtreeview.cpp @@ -861,9 +861,6 @@ void tst_QTreeView::editTriggers() } // Check if we got an editor -#ifdef Q_OS_MAC - QEXPECT_FAIL("EditKeyPressed 4", "QTBUG-23696", Continue); -#endif QTRY_COMPARE(view.findChild(QString()) != 0, editorOpened); } -- cgit v1.2.3 From 817800ad39df10ca78e2c965a61d4d2025df622b Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 22 Dec 2014 21:19:27 -0200 Subject: Fix QXmlStreamReader parsing of files containing NULs Due to a flaw in the internal API, QXmlStreamReader's internal buffering would mistake a NUL byte in the input stream for EOF during parsing, but wouldn't set atEnd == true because it hadn't yet processed all bytes. This resulted in an infinite loop in QXmlStreamReaderPrivate::parse. So, instead of returning zero (false) to indicate EOF, return -1 (but in unsigned form, ~0, to avoid ICC warnings of change of sign). In turn, this required enlarging a few variables to avoid ~0U becoming 0xffff, which is a valid QChar (could happen if the input is a QString, not a QIODevice). Task-number: QTBUG-43513 Change-Id: If5badcfd3e4176b79517da1fd108e0abb93a3fd1 Reviewed-by: Lars Knoll Reviewed-by: Oswald Buddenhagen --- .../corelib/xml/qxmlstream/data/carriagereturn+nul.ref | 3 +++ .../corelib/xml/qxmlstream/data/carriagereturn+nul.xml | Bin 0 -> 60 bytes tests/auto/corelib/xml/qxmlstream/data/nul0.ref | 2 ++ tests/auto/corelib/xml/qxmlstream/data/nul0.xml | Bin 0 -> 1 bytes tests/auto/corelib/xml/qxmlstream/data/nul1.ref | 2 ++ tests/auto/corelib/xml/qxmlstream/data/nul1.xml | Bin 0 -> 3 bytes tests/auto/corelib/xml/qxmlstream/data/nul2.ref | 3 +++ tests/auto/corelib/xml/qxmlstream/data/nul2.xml | Bin 0 -> 4 bytes tests/auto/corelib/xml/qxmlstream/data/nul3.ref | 2 ++ tests/auto/corelib/xml/qxmlstream/data/nul3.xml | Bin 0 -> 7 bytes tests/auto/corelib/xml/qxmlstream/data/nul3bis.ref | 2 ++ tests/auto/corelib/xml/qxmlstream/data/nul3bis.xml | Bin 0 -> 9 bytes tests/auto/corelib/xml/qxmlstream/data/nul4.ref | 2 ++ tests/auto/corelib/xml/qxmlstream/data/nul4.xml | Bin 0 -> 8 bytes tests/auto/corelib/xml/qxmlstream/data/nul4bis.ref | 2 ++ tests/auto/corelib/xml/qxmlstream/data/nul4bis.xml | Bin 0 -> 10 bytes tests/auto/corelib/xml/qxmlstream/data/nul5.ref | 3 +++ tests/auto/corelib/xml/qxmlstream/data/nul5.xml | Bin 0 -> 23 bytes 18 files changed, 21 insertions(+) create mode 100644 tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.ref create mode 100644 tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.xml create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul0.ref create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul0.xml create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul1.ref create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul1.xml create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul2.ref create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul2.xml create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul3.ref create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul3.xml create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul3bis.ref create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul3bis.xml create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul4.ref create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul4.xml create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul4bis.ref create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul4bis.xml create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul5.ref create mode 100644 tests/auto/corelib/xml/qxmlstream/data/nul5.xml (limited to 'tests') diff --git a/tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.ref b/tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.ref new file mode 100644 index 0000000000..b636d80294 --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.ref @@ -0,0 +1,3 @@ +StartDocument( ) +Invalid( processingInstructionTarget="xml_" ) +ERROR: Invalid XML character. diff --git a/tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.xml b/tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.xml new file mode 100644 index 0000000000..e87bf56453 Binary files /dev/null and b/tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.xml differ diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul0.ref b/tests/auto/corelib/xml/qxmlstream/data/nul0.ref new file mode 100644 index 0000000000..a76455ee07 --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul0.ref @@ -0,0 +1,2 @@ +Invalid( ) +ERROR: Premature end of document. diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul0.xml b/tests/auto/corelib/xml/qxmlstream/data/nul0.xml new file mode 100644 index 0000000000..f76dd238ad Binary files /dev/null and b/tests/auto/corelib/xml/qxmlstream/data/nul0.xml differ diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul1.ref b/tests/auto/corelib/xml/qxmlstream/data/nul1.ref new file mode 100644 index 0000000000..a76455ee07 --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul1.ref @@ -0,0 +1,2 @@ +Invalid( ) +ERROR: Premature end of document. diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul1.xml b/tests/auto/corelib/xml/qxmlstream/data/nul1.xml new file mode 100644 index 0000000000..aab3ad6ca9 Binary files /dev/null and b/tests/auto/corelib/xml/qxmlstream/data/nul1.xml differ diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul2.ref b/tests/auto/corelib/xml/qxmlstream/data/nul2.ref new file mode 100644 index 0000000000..08bbcc6aa4 --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul2.ref @@ -0,0 +1,3 @@ +StartDocument( ) +Invalid( ) +ERROR: Expected '[a-zA-Z]', but got ' '. diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul2.xml b/tests/auto/corelib/xml/qxmlstream/data/nul2.xml new file mode 100644 index 0000000000..e14d1b8ae5 Binary files /dev/null and b/tests/auto/corelib/xml/qxmlstream/data/nul2.xml differ diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul3.ref b/tests/auto/corelib/xml/qxmlstream/data/nul3.ref new file mode 100644 index 0000000000..cf4dd3848b --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul3.ref @@ -0,0 +1,2 @@ +Invalid( ) +ERROR: Expected 'version', but got ''. diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul3.xml b/tests/auto/corelib/xml/qxmlstream/data/nul3.xml new file mode 100644 index 0000000000..d8260b908e Binary files /dev/null and b/tests/auto/corelib/xml/qxmlstream/data/nul3.xml differ diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul3bis.ref b/tests/auto/corelib/xml/qxmlstream/data/nul3bis.ref new file mode 100644 index 0000000000..cf4dd3848b --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul3bis.ref @@ -0,0 +1,2 @@ +Invalid( ) +ERROR: Expected 'version', but got ''. diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul3bis.xml b/tests/auto/corelib/xml/qxmlstream/data/nul3bis.xml new file mode 100644 index 0000000000..61e011014e Binary files /dev/null and b/tests/auto/corelib/xml/qxmlstream/data/nul3bis.xml differ diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul4.ref b/tests/auto/corelib/xml/qxmlstream/data/nul4.ref new file mode 100644 index 0000000000..cf4dd3848b --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul4.ref @@ -0,0 +1,2 @@ +Invalid( ) +ERROR: Expected 'version', but got ''. diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul4.xml b/tests/auto/corelib/xml/qxmlstream/data/nul4.xml new file mode 100644 index 0000000000..90f20eebf0 Binary files /dev/null and b/tests/auto/corelib/xml/qxmlstream/data/nul4.xml differ diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul4bis.ref b/tests/auto/corelib/xml/qxmlstream/data/nul4bis.ref new file mode 100644 index 0000000000..cf4dd3848b --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul4bis.ref @@ -0,0 +1,2 @@ +Invalid( ) +ERROR: Expected 'version', but got ''. diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul4bis.xml b/tests/auto/corelib/xml/qxmlstream/data/nul4bis.xml new file mode 100644 index 0000000000..15d2d10685 Binary files /dev/null and b/tests/auto/corelib/xml/qxmlstream/data/nul4bis.xml differ diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul5.ref b/tests/auto/corelib/xml/qxmlstream/data/nul5.ref new file mode 100644 index 0000000000..9432b74a99 --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul5.ref @@ -0,0 +1,3 @@ +StartDocument( documentVersion="1.0" ) +Invalid( ) +ERROR: Start tag expected. diff --git a/tests/auto/corelib/xml/qxmlstream/data/nul5.xml b/tests/auto/corelib/xml/qxmlstream/data/nul5.xml new file mode 100644 index 0000000000..6a79cbdc75 Binary files /dev/null and b/tests/auto/corelib/xml/qxmlstream/data/nul5.xml differ -- cgit v1.2.3 From 6430d6e3ec31afabe0e674397088dd6d9e056195 Mon Sep 17 00:00:00 2001 From: Shawn Rutledge Date: Tue, 27 Jan 2015 14:20:52 +0100 Subject: Use qt.io rather than qt-project.org for network tests Mainly because of a change in certificates which is causing failing tests. This patch is cherry-picked from https://codereview.qt-project.org/104619/ Change-Id: I8304e5ac4107428a250b71be5df7b5399a811017 Reviewed-by: Richard J. Moore --- tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp | 2 +- .../tst_qsslsocket_onDemandCertificates_member.cpp | 2 +- .../tst_qsslsocket_onDemandCertificates_static.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'tests') diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp index aa954429de..a355cfeb17 100644 --- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp @@ -772,7 +772,7 @@ void tst_QSslSocket::peerCertificateChain() QVERIFY(socket->waitForDisconnected()); // connect again to a different server - socket->connectToHostEncrypted("qt-project.org", 443); + socket->connectToHostEncrypted("www.qt.io", 443); socket->ignoreSslErrors(); QCOMPARE(socket->mode(), QSslSocket::UnencryptedMode); QVERIFY(socket->peerCertificateChain().isEmpty()); diff --git a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.cpp b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.cpp index 94d7c3905c..1a65d5f9f3 100644 --- a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.cpp +++ b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_member/tst_qsslsocket_onDemandCertificates_member.cpp @@ -185,7 +185,7 @@ void tst_QSslSocket_onDemandCertificates_member::proxyAuthenticationRequired(con void tst_QSslSocket_onDemandCertificates_member::onDemandRootCertLoadingMemberMethods() { - QString host("qt-project.org"); + QString host("www.qt.io"); // not using any root certs -> should not work QSslSocketPtr socket2 = newSocket(); diff --git a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.cpp b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.cpp index 418c702030..ad1f218471 100644 --- a/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.cpp +++ b/tests/auto/network/ssl/qsslsocket_onDemandCertificates_static/tst_qsslsocket_onDemandCertificates_static.cpp @@ -181,7 +181,7 @@ void tst_QSslSocket_onDemandCertificates_static::proxyAuthenticationRequired(con void tst_QSslSocket_onDemandCertificates_static::onDemandRootCertLoadingStaticMethods() { - QString host("qt-project.org"); + QString host("www.qt.io"); // not using any root certs -> should not work QSslSocket::setDefaultCaCertificates(QList()); -- cgit v1.2.3 From 2a27fc41a418cc3fda26334fdbaf1e31c9eecce5 Mon Sep 17 00:00:00 2001 From: Dyami Caliri Date: Mon, 26 Jan 2015 14:45:09 -0800 Subject: Fix QGraphicsWidget window frame section logic CppCat detected duplicate sub-expressions in the code that checked for BottomLeftSection and BottomRightSection. It was fairly obvious to see what the values should be. Change-Id: Id45ca5bbd26c92b800c60867fef5170578216eee Reviewed-by: Andreas Aardal Hanssen --- .../qgraphicswidget/tst_qgraphicswidget.cpp | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp b/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp index 6fde8321f9..e817157c79 100644 --- a/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicswidget/tst_qgraphicswidget.cpp @@ -171,6 +171,7 @@ private slots: void fontPropagatesResolveViaNonWidget(); void fontPropagatesResolveFromScene(); void tabFocus(); + void windowFrameSectionAt(); // Task fixes void task236127_bspTreeIndexFails(); @@ -243,6 +244,9 @@ public: void call_updateGeometry() { return QGraphicsWidget::updateGeometry(); } + Qt::WindowFrameSection call_windowFrameSectionAt(const QPointF &pos) const + { return QGraphicsWidget::windowFrameSectionAt(pos); } + int eventCount; Qt::LayoutDirection m_painterLayoutDirection; @@ -3411,6 +3415,31 @@ void tst_QGraphicsWidget::tabFocus() delete widget6; } +void tst_QGraphicsWidget::windowFrameSectionAt() +{ + SubQGraphicsWidget widget; + widget.setWindowFrameMargins(5, 5, 5, 5); + widget.setGeometry(0, 0, 200, 200); + + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(50, 50)), Qt::NoSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(-2, -2)), Qt::TopLeftSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(-2, 10)), Qt::TopLeftSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(-2, 30)), Qt::LeftSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(-2, 170)), Qt::LeftSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(-2, 198)), Qt::BottomLeftSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(-2, 202)), Qt::BottomLeftSection); + + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(202, -2)), Qt::TopRightSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(202, 10)), Qt::TopRightSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(202, 30)), Qt::RightSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(202, 170)), Qt::RightSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(202, 198)), Qt::BottomRightSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(202, 202)), Qt::BottomRightSection); + + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(50, -2)), Qt::TopSection); + QCOMPARE(widget.call_windowFrameSectionAt(QPointF(50, 202)), Qt::BottomSection); +} + void tst_QGraphicsWidget::QT_BUG_6544_tabFocusFirstUnsetWhenRemovingItems() { QGraphicsScene scene; -- cgit v1.2.3 From ec71482374969c3bebd59f3bd001cf2d922e6bcd Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 27 Jan 2015 14:40:04 +0100 Subject: Add qopenglconfig test. Add some parts of the qtdiag tool as a qtbase test to output the graphics configuration to the CI log and to verify that Open GL can be initialized for platforms on which the qopengl test is marked as insignificant (for example, ANGLE). Change-Id: Id445e57928e0307ad38cd433c52a62501f1097c6 Reviewed-by: Laszlo Agocs --- tests/auto/gui/gui.pro | 3 +- tests/auto/gui/qopenglconfig/qopenglconfig.pro | 10 + tests/auto/gui/qopenglconfig/tst_qopenglconfig.cpp | 222 +++++++++++++++++++++ 3 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 tests/auto/gui/qopenglconfig/qopenglconfig.pro create mode 100644 tests/auto/gui/qopenglconfig/tst_qopenglconfig.cpp (limited to 'tests') diff --git a/tests/auto/gui/gui.pro b/tests/auto/gui/gui.pro index 78386cc0b1..d3393663ed 100644 --- a/tests/auto/gui/gui.pro +++ b/tests/auto/gui/gui.pro @@ -7,9 +7,10 @@ SUBDIRS = \ image \ math3d \ painting \ + qopenglconfig \ qopengl \ text \ util \ itemmodels \ -!contains(QT_CONFIG, opengl(es2)?): SUBDIRS -= qopengl +!contains(QT_CONFIG, opengl(es2)?): SUBDIRS -= qopengl qopenglconfig diff --git a/tests/auto/gui/qopenglconfig/qopenglconfig.pro b/tests/auto/gui/qopenglconfig/qopenglconfig.pro new file mode 100644 index 0000000000..ebeb509d0b --- /dev/null +++ b/tests/auto/gui/qopenglconfig/qopenglconfig.pro @@ -0,0 +1,10 @@ +############################################################ +# Project file for autotest for gui/openglconfig functionality +############################################################ + +CONFIG += testcase +CONFIG += parallel_test +TARGET = tst_qopenglconfig +QT += gui-private core-private testlib + +SOURCES += tst_qopenglconfig.cpp diff --git a/tests/auto/gui/qopenglconfig/tst_qopenglconfig.cpp b/tests/auto/gui/qopenglconfig/tst_qopenglconfig.cpp new file mode 100644 index 0000000000..75cc0e06f7 --- /dev/null +++ b/tests/auto/gui/qopenglconfig/tst_qopenglconfig.cpp @@ -0,0 +1,222 @@ +/**************************************************************************** +** +** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/legal +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL21$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and Digia. For licensing terms and +** conditions see http://qt.digia.com/licensing. For further information +** use the contact form at http://qt.digia.com/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 or version 3 as published by the Free +** Software Foundation and appearing in the file LICENSE.LGPLv21 and +** LICENSE.LGPLv3 included in the packaging of this file. Please review the +** following information to ensure the GNU Lesser General Public License +** requirements will be met: https://www.gnu.org/licenses/lgpl.html and +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Digia gives you certain additional +** rights. These rights are described in the Digia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include + +#include + +#define DUMP_CAPABILITY(str, integration, capability) \ + if (platformIntegration->hasCapability(QPlatformIntegration::capability)) \ + str << ' ' << #capability; + +QTextStream &operator<<(QTextStream &str, const QSize &s) +{ + str << s.width() << 'x' << s.height(); + return str; +} + +QTextStream &operator<<(QTextStream &str, const QRect &r) +{ + str << r.size() << '+' << r.x() << '+' << r.y(); + return str; +} + +QTextStream &operator<<(QTextStream &str, const QSizeF &s) +{ + str << s.width() << 'x' << s.height(); + return str; +} + +QTextStream &operator<<(QTextStream &str, const QSurfaceFormat &format) +{ + str << "Version: " << format.majorVersion() << '.' + << format.minorVersion() << " Profile: " << format.profile() + << " Swap behavior: " << format.swapBehavior() + << " Buffer size (RGB"; + if (format.hasAlpha()) + str << 'A'; + str << "): " << format.redBufferSize() << ',' << format.greenBufferSize() + << ',' << format.blueBufferSize(); + if (format.hasAlpha()) + str << ',' << format.alphaBufferSize(); + if (const int dbs = format.depthBufferSize()) + str << " Depth buffer: " << dbs; + if (const int sbs = format.stencilBufferSize()) + str << " Stencil buffer: " << sbs; + const int samples = format.samples(); + if (samples > 0) + str << " Samples: " << samples; + return str; +} + +/* This test contains code from the qtdiag tool. Its purpose is to output the + * graphics configuration to the CI log and to verify that Open GL can be + * initialized for platforms on which the qopengl test is marked as + * insignificant. */ + +class tst_QOpenGlConfig : public QObject +{ + Q_OBJECT + +private slots: + void testConfiguration(); + void testGlConfiguration(); +}; + +static void dumpConfiguration(QTextStream &str) +{ + const QPlatformIntegration *platformIntegration = QGuiApplicationPrivate::platformIntegration(); + str << "\nBuild : " << QLibraryInfo::build() + << "\nPlatform : " << QGuiApplication::platformName() + << "\nOS : " << QSysInfo::prettyProductName() << " [" + << QSysInfo::kernelType() << " version " << QSysInfo::kernelVersion() << ']' + << "\nArchitecture : " << QSysInfo::currentCpuArchitecture() + << "\nCapabilities :"; + DUMP_CAPABILITY(str, platformIntegration, ThreadedPixmaps) + DUMP_CAPABILITY(str, platformIntegration, OpenGL) + DUMP_CAPABILITY(str, platformIntegration, ThreadedOpenGL) + DUMP_CAPABILITY(str, platformIntegration, SharedGraphicsCache) + DUMP_CAPABILITY(str, platformIntegration, BufferQueueingOpenGL) + DUMP_CAPABILITY(str, platformIntegration, WindowMasks) + DUMP_CAPABILITY(str, platformIntegration, RasterGLSurface) + DUMP_CAPABILITY(str, platformIntegration, AllGLFunctionsQueryable) + str << '\n'; + + const QList screens = QGuiApplication::screens(); + const int screenCount = screens.size(); + str << "\nScreens: " << screenCount << '\n'; + for (int s = 0; s < screenCount; ++s) { + const QScreen *screen = screens.at(s); + str << '#' << ' ' << s << " \"" << screen->name() << '"' + << " Depth: " << screen->depth() + << " Primary: " << (screen == QGuiApplication::primaryScreen() ? "yes" : "no") + << "\n Geometry: " << screen->geometry() << " Available: " << screen->availableGeometry(); + if (screen->geometry() != screen->virtualGeometry()) + str << "\n Virtual geometry: " << screen->virtualGeometry() << " Available: " << screen->availableVirtualGeometry(); + if (screen->virtualSiblings().size() > 1) + str << "\n " << screen->virtualSiblings().size() << " virtual siblings"; + str << "\n Physical size: " << screen->physicalSize() << " mm" + << " Refresh: " << screen->refreshRate() << " Hz" + << "\n Physical DPI: " << screen->physicalDotsPerInchX() + << ',' << screen->physicalDotsPerInchY() + << " Logical DPI: " << screen->logicalDotsPerInchX() + << ',' << screen->logicalDotsPerInchY() + << "\n DevicePixelRatio: " << screen->devicePixelRatio() + << " Primary orientation: " << screen->primaryOrientation() + << "\n Orientation: " << screen->orientation() + << " Native orientation: " << screen->nativeOrientation() + << " OrientationUpdateMask: " << screen->orientationUpdateMask() << '\n'; + } + + // On Windows, this will provide addition GPU info similar to the output of dxdiag. + const QVariant gpuInfoV = QGuiApplication::platformNativeInterface()->property("gpu"); + if (gpuInfoV.type() == QVariant::Map) { + const QString description = gpuInfoV.toMap().value(QStringLiteral("printable")).toString(); + if (!description.isEmpty()) + str << "\nGPU:\n" << description << "\n\n"; + } +} + +void tst_QOpenGlConfig::testConfiguration() +{ + QString result; + QTextStream str(&result); + dumpConfiguration(str); + + qDebug().noquote() << '\n' << result; +} + +static void dumpGlConfiguration(QOpenGLContext &context, QTextStream &str) +{ + str << "Type : "; +#ifdef QT_OPENGL_DYNAMIC + str << "Dynamic GL "; +#endif + switch (context.openGLModuleType()) { + case QOpenGLContext::LibGL: + str << "LibGL"; + break; + case QOpenGLContext::LibGLES: + str << "LibGLES"; + break; + } + QOpenGLFunctions functions(&context); + + str << "\nVendor : " << reinterpret_cast(functions.glGetString(GL_VENDOR)) + << "\nRenderer : " << reinterpret_cast(functions.glGetString(GL_RENDERER)) + << "\nVersion : " << reinterpret_cast(functions.glGetString(GL_VERSION)) + << "\nShading language : " << reinterpret_cast(functions.glGetString(GL_SHADING_LANGUAGE_VERSION)) + << "\nFormat : " << context.format(); + + QList extensionList = context.extensions().toList(); + std::sort(extensionList.begin(), extensionList.end()); + const int extensionCount = extensionList.size(); + str << "\n\nFound " << extensionCount << " extensions:\n"; + for (int e = 0; e < extensionCount; ++e) + str << ((e % 4) ? ' ' : '\n') << extensionList.at(e); +} + +void tst_QOpenGlConfig::testGlConfiguration() +{ + QString result; + QTextStream str(&result); + + QWindow window; + window.setSurfaceType(QSurface::OpenGLSurface); + window.create(); + QOpenGLContext context; + QVERIFY(context.create()); + QVERIFY(context.makeCurrent(&window)); + dumpGlConfiguration(context, str); + context.doneCurrent(); + + qDebug().noquote() << '\n' << result; +} + +QTEST_MAIN(tst_QOpenGlConfig) + +#include "tst_qopenglconfig.moc" -- cgit v1.2.3 From b85b78f17d3d18887b409a3ce9d2f2c71ae68844 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 27 Jan 2015 16:53:48 +0100 Subject: Suppress Ctrl/Ctrl+Shift keypresses in line/text edits. Ctrl/Ctrl+Shift should not cause any characters to be input (as opposed to AltGr(Alt+Ctrl) as used on German keyboards). Extend the tests in QLineEdit and QPlainTextEdit to check the modifiers, remove test from QTextEdit since it is handled by QWidgetTextControl. Task-number: QTBUG-35734 Change-Id: Ie0004fac68cf840c68247f27547e84b021355cd2 Reviewed-by: Gatis Paeglis --- .../widgets/widgets/qlineedit/tst_qlineedit.cpp | 35 ++++++++++++++++------ .../widgets/qplaintextedit/tst_qplaintextedit.cpp | 33 +++++++++++++++++--- .../widgets/widgets/qtextedit/tst_qtextedit.cpp | 7 ----- 3 files changed, 55 insertions(+), 20 deletions(-) (limited to 'tests') diff --git a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp index fec79326c8..5b467f4f17 100644 --- a/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp +++ b/tests/auto/widgets/widgets/qlineedit/tst_qlineedit.cpp @@ -249,6 +249,7 @@ private slots: void editInvalidText(); + void charWithAltOrCtrlModifier_data(); void charWithAltOrCtrlModifier(); void inlineCompletion(); @@ -3224,19 +3225,35 @@ void tst_QLineEdit::editInvalidText() testWidget->setValidator(0); } +Q_DECLARE_METATYPE(Qt::KeyboardModifiers) + +void tst_QLineEdit::charWithAltOrCtrlModifier_data() +{ + QTest::addColumn("modifiers"); + QTest::addColumn("textExpected"); + QTest::newRow("no-modifiers") << Qt::KeyboardModifiers() << true; + // Ctrl, Ctrl+Shift: No text (QTBUG-35734) + QTest::newRow("ctrl") << Qt::KeyboardModifiers(Qt::ControlModifier) + << false; + QTest::newRow("ctrl-shift") << Qt::KeyboardModifiers(Qt::ShiftModifier | Qt::ControlModifier) + << false; + QTest::newRow("alt") << Qt::KeyboardModifiers(Qt::AltModifier) << true; + // Alt-Ctrl (Alt-Gr on German keyboards, Task 129098): Expect text + QTest::newRow("alt-ctrl") << (Qt::AltModifier | Qt::ControlModifier) << true; +} + void tst_QLineEdit::charWithAltOrCtrlModifier() { + QFETCH(Qt::KeyboardModifiers, modifiers); + QFETCH(bool, textExpected); + QLineEdit *testWidget = ensureTestWidget(); testWidget->clear(); - QCOMPARE(testWidget->text(), QString("")); - QTest::keyPress(testWidget, Qt::Key_Plus); - QCOMPARE(testWidget->text(), QString("+")); - QTest::keyPress(testWidget, Qt::Key_Plus, Qt::ControlModifier); - QCOMPARE(testWidget->text(), QString("++")); - QTest::keyPress(testWidget, Qt::Key_Plus, Qt::AltModifier); - QCOMPARE(testWidget->text(), QString("+++")); - QTest::keyPress(testWidget, Qt::Key_Plus, Qt::AltModifier | Qt::ControlModifier); - QCOMPARE(testWidget->text(), QString("++++")); + QVERIFY(testWidget->text().isEmpty()); + + QTest::keyPress(testWidget, Qt::Key_Plus, modifiers); + const QString expectedText = textExpected ? QLatin1String("+") : QString(); + QCOMPARE(testWidget->text(), expectedText); } void tst_QLineEdit::leftKeyOnSelectedText() diff --git a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp index cf495e2238..390b99c6e7 100644 --- a/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp +++ b/tests/auto/widgets/widgets/qplaintextedit/tst_qplaintextedit.cpp @@ -99,7 +99,8 @@ private slots: #ifndef QT_NO_CLIPBOARD void copyAndSelectAllInReadonly(); #endif - void ctrlAltInput(); + void charWithAltOrCtrlModifier_data(); + void charWithAltOrCtrlModifier(); void noPropertiesOnDefaultTextEditCharFormat(); void setPlainTextShouldEmitTextChangedOnce(); void overwriteMode(); @@ -691,10 +692,34 @@ void tst_QPlainTextEdit::copyAndSelectAllInReadonly() } #endif -void tst_QPlainTextEdit::ctrlAltInput() +Q_DECLARE_METATYPE(Qt::KeyboardModifiers) + +// Test how QWidgetTextControlPrivate (used in QPlainTextEdit, QTextEdit) +// handles input with modifiers. +void tst_QPlainTextEdit::charWithAltOrCtrlModifier_data() +{ + QTest::addColumn("modifiers"); + QTest::addColumn("textExpected"); + + QTest::newRow("no-modifiers") << Qt::KeyboardModifiers() << true; + // Ctrl, Ctrl+Shift: No text (QTBUG-35734) + QTest::newRow("ctrl") << Qt::KeyboardModifiers(Qt::ControlModifier) + << false; + QTest::newRow("ctrl-shift") << Qt::KeyboardModifiers(Qt::ShiftModifier | Qt::ControlModifier) + << false; + QTest::newRow("alt") << Qt::KeyboardModifiers(Qt::AltModifier) << true; + // Alt-Ctrl (Alt-Gr on German keyboards, Task 129098): Expect text + QTest::newRow("alt-ctrl") << (Qt::AltModifier | Qt::ControlModifier) << true; +} + +void tst_QPlainTextEdit::charWithAltOrCtrlModifier() { - QTest::keyClick(ed, Qt::Key_At, Qt::ControlModifier | Qt::AltModifier); - QCOMPARE(ed->toPlainText(), QString("@")); + QFETCH(Qt::KeyboardModifiers, modifiers); + QFETCH(bool, textExpected); + + QTest::keyClick(ed, Qt::Key_At, modifiers); + const QString expectedText = textExpected ? QLatin1String("@") : QString(); + QCOMPARE(ed->toPlainText(), expectedText); } void tst_QPlainTextEdit::noPropertiesOnDefaultTextEditCharFormat() diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp index 8a82ee433d..220185c04f 100644 --- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp @@ -122,7 +122,6 @@ private slots: #ifndef QT_NO_CLIPBOARD void copyAndSelectAllInReadonly(); #endif - void ctrlAltInput(); void noPropertiesOnDefaultTextEditCharFormat(); void setPlainTextShouldUseCurrentCharFormat(); void setPlainTextShouldEmitTextChangedOnce(); @@ -1042,12 +1041,6 @@ void tst_QTextEdit::copyAndSelectAllInReadonly() } #endif -void tst_QTextEdit::ctrlAltInput() -{ - QTest::keyClick(ed, Qt::Key_At, Qt::ControlModifier | Qt::AltModifier); - QCOMPARE(ed->toPlainText(), QString("@")); -} - void tst_QTextEdit::noPropertiesOnDefaultTextEditCharFormat() { // there should be no properties set on the default/initial char format -- cgit v1.2.3 From cd7a36d341c84f2595a33ceeb6ac7458978f30e1 Mon Sep 17 00:00:00 2001 From: Arnaud Bienner Date: Thu, 29 Jan 2015 21:35:37 +0100 Subject: QHeaderView: check that length is correct and fix restoring Qt4 state. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When multiple sections were grouped together, sectionItem.size was the total size of grouped sections, not the size of one section. Length is supposed to be equal to the section items length, but the state saved might be corrupted. Task-number: QTBUG-40462 Change-Id: I401a1583dd30880ccf5b4c105a237d6563f212e8 Reviewed-by: Thorbjørn Lund Martsum --- .../itemviews/qheaderview/tst_qheaderview.cpp | 31 ++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp index 408e98b873..e632af1262 100644 --- a/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp +++ b/tests/auto/widgets/itemviews/qheaderview/tst_qheaderview.cpp @@ -1646,6 +1646,37 @@ void tst_QHeaderView::saveRestore() QVERIFY(s1 == s2); QVERIFY(!h2.restoreState(QByteArrayLiteral("Garbage"))); + + // QTBUG-40462 + // Setting from Qt4, where information about multiple sections were grouped together in one + // sectionItem object + QByteArray settings_qt4 = + QByteArray::fromHex("000000ff00000000000000010000000100000000010000000000000000000000000000" + "0000000003e80000000a0101000100000000000000000000000064ffffffff00000081" + "0000000000000001000003e80000000a00000000"); + QVERIFY(h2.restoreState(settings_qt4)); + int sectionItemsLengthTotal = 0; + for (int i = 0; i < h2.count(); ++i) + sectionItemsLengthTotal += h2.sectionSize(i); + QVERIFY(sectionItemsLengthTotal == h2.length()); + + // Buggy setting where sum(sectionItems) != length. Check false is returned and this corrupted + // state isn't restored + QByteArray settings_buggy_length = + QByteArray::fromHex("000000ff000000000000000100000000000000050100000000000000000000000a4000" + "000000010000000600000258000000fb0000000a010100010000000000000000000000" + "0064ffffffff00000081000000000000000a000000d30000000100000000000000c800" + "000001000000000000008000000001000000000000005c00000001000000000000003c" + "0000000100000000000002580000000100000000000000000000000100000000000002" + "580000000100000000000002580000000100000000000003c000000001000000000000" + "03e8"); + int old_length = h2.length(); + QByteArray old_state = h2.saveState(); + // Check setting is correctly recognized as corrupted + QVERIFY(!h2.restoreState(settings_buggy_length)); + // Check nothing has been actually restored + QVERIFY(h2.length() == old_length); + QVERIFY(h2.saveState() == old_state); } void tst_QHeaderView::defaultSectionSizeTest() -- cgit v1.2.3 From 5bd41b850f65b8054d94b58b787704bb45ede16c Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Mon, 2 Feb 2015 11:37:41 +0100 Subject: Correct inplace conversion methods from RGBA8888 formats The methods for inplace conversion from RGBA to ARGB was misplaced by one step causing conversion to RGB16 to get an invalid method. Change-Id: I3b2b4cffe993705c48613eec7d9b7c6213f57fc2 Reviewed-by: Gunnar Sletta --- tests/auto/gui/image/qimage/tst_qimage.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'tests') diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp index 1fef747399..ed1d915670 100644 --- a/tests/auto/gui/image/qimage/tst_qimage.cpp +++ b/tests/auto/gui/image/qimage/tst_qimage.cpp @@ -2462,6 +2462,8 @@ void tst_QImage::inplaceConversion_data() QTest::newRow("Format_RGB666 -> Format_RGB888") << QImage::Format_RGB666 << QImage::Format_RGB888; QTest::newRow("Format_ARGB8565_Premultiplied, Format_ARGB8555_Premultiplied") << QImage::Format_ARGB8565_Premultiplied << QImage::Format_ARGB8555_Premultiplied; QTest::newRow("Format_ARGB4444_Premultiplied, Format_RGB444") << QImage::Format_ARGB4444_Premultiplied << QImage::Format_RGB444; + QTest::newRow("Format_RGBA8888 -> RGB16") << QImage::Format_RGBA8888 << QImage::Format_RGB16; + QTest::newRow("Format_RGBA8888_Premultiplied -> RGB16") << QImage::Format_RGBA8888_Premultiplied << QImage::Format_RGB16; } void tst_QImage::inplaceConversion() @@ -2480,6 +2482,7 @@ void tst_QImage::inplaceConversion() const uchar* originalPtr = image.constScanLine(0); QImage imageConverted = std::move(image).convertToFormat(dest_format); + QCOMPARE(imageConverted.format(), dest_format); for (int i = 0; i < imageConverted.height(); ++i) { for (int j = 0; j < imageConverted.width(); ++j) { QRgb convertedColor = imageConverted.pixel(j,i); @@ -2487,8 +2490,8 @@ void tst_QImage::inplaceConversion() QCOMPARE(qGreen(convertedColor) & 0xF0, i * 16); } } - - QCOMPARE(imageConverted.constScanLine(0), originalPtr); + if (image.depth() == imageConverted.depth()) + QCOMPARE(imageConverted.constScanLine(0), originalPtr); #endif } -- cgit v1.2.3 From 239f67f158c55d3eb88348a53b87fa272402c733 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Mon, 19 Jan 2015 16:57:20 +0100 Subject: Do not close popup widgets when showing a widget embedded into QGraphicsView. Disable top-level widget code path for embedded widget in the show helper. Task-number: QTBUG-43780 Change-Id: I574e07130e5e68a019a426cee3fde982f3883720 Reviewed-by: Shawn Rutledge --- .../tst_qgraphicsproxywidget.cpp | 39 ++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'tests') diff --git a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp index 66d0f64ceb..5aea845f90 100644 --- a/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp @@ -175,6 +175,7 @@ private slots: void windowFrameMargins(); void QTBUG_6986_sendMouseEventToAlienWidget(); void mapToGlobal(); + void QTBUG_43780_visibility(); }; // Subclass that exposes the protected functions. @@ -278,6 +279,8 @@ void tst_QGraphicsProxyWidget::initTestCase() // Disable menu animations to prevent the alpha widget from getting in the way // in actionsContextMenu(). QApplication::setEffectEnabled(Qt::UI_AnimateMenu, false); + // Disable combo for QTBUG_43780_visibility()/Windows Vista. + QApplication::setEffectEnabled(Qt::UI_AnimateCombo, false); } // This will be called after the last test function is executed. @@ -3687,5 +3690,41 @@ void tst_QGraphicsProxyWidget::mapToGlobal() // QTBUG-41135 .arg(embeddedCenterGlobal.x()).arg(embeddedCenterGlobal.y()))); } +// QTBUG_43780: Embedded widgets have isWindow()==true but showing them should not +// trigger the top-level widget code path of show() that closes all popups +// (for example combo popups). +void tst_QGraphicsProxyWidget::QTBUG_43780_visibility() +{ + const QRect availableGeometry = QGuiApplication::primaryScreen()->availableGeometry(); + const QSize size = availableGeometry.size() / 4; + QWidget mainWindow; + QVBoxLayout *layout = new QVBoxLayout(&mainWindow); + QComboBox *combo = new QComboBox(&mainWindow); + combo->addItems(QStringList() << "i1" << "i2" << "i3"); + layout->addWidget(combo); + QGraphicsScene *scene = new QGraphicsScene(&mainWindow); + QGraphicsView *view = new QGraphicsView(scene, &mainWindow); + layout->addWidget(view); + mainWindow.setWindowTitle(QTest::currentTestFunction()); + mainWindow.resize(size); + mainWindow.move(availableGeometry.topLeft() + + QPoint(availableGeometry.width() - size.width(), + availableGeometry.height() - size.height()) / 2); + QLabel *label = new QLabel(QTest::currentTestFunction()); + scene->addWidget(label); + label->hide(); + mainWindow.show(); + combo->setFocus(); + mainWindow.activateWindow(); + QVERIFY(QTest::qWaitForWindowActive(&mainWindow)); + combo->showPopup(); + QWidget *comboPopup = combo->view()->window(); + QVERIFY(comboPopup); + QVERIFY(QTest::qWaitForWindowExposed(comboPopup)); + label->show(); + QTRY_VERIFY(label->isVisible()); + QVERIFY(comboPopup->isVisible()); +} + QTEST_MAIN(tst_QGraphicsProxyWidget) #include "tst_qgraphicsproxywidget.moc" -- cgit v1.2.3 From 3c24dddaf963026c6e3cd90dd7d538dfa8044c83 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Thu, 5 Feb 2015 14:05:21 +0100 Subject: SSL NPN negotiation: Do not abort on unmatched protocols ... but choose HTTP/1.1 and continue connecting anyhow. According to the NPN spec, actually we should choose SPDY: "In the event that the client doesn't support any of server's protocols, or the server doesn't advertise any, it SHOULD select the first protocol that it supports." However, some tested servers did not advertise anything and did not support SPDY, so blindly trying the newest protocol would fail. We are conservative in that case and choose HTTP. Task-number: QTBUG-40714 Change-Id: Ia8aaf01fea74e13d9e4416306f85f1890b25559e Reviewed-by: Richard J. Moore --- tests/manual/qnetworkreply/main.cpp | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'tests') diff --git a/tests/manual/qnetworkreply/main.cpp b/tests/manual/qnetworkreply/main.cpp index 9d199c3755..08a9df1144 100644 --- a/tests/manual/qnetworkreply/main.cpp +++ b/tests/manual/qnetworkreply/main.cpp @@ -69,6 +69,7 @@ private slots: void proxyAuthentication_data(); void proxyAuthentication(); void authentication(); + void npnWithEmptyList(); // QTBUG-40714 protected slots: void spdyReplyFinished(); // only used by spdyMultipleRequestsPerHost test @@ -577,6 +578,34 @@ void tst_qnetworkreply::authentication() QVERIFY(statusCode >= 200 && statusCode < 400); } +void tst_qnetworkreply::npnWithEmptyList() // QTBUG-40714 +{ +#if defined(QT_BUILD_INTERNAL) && !defined(QT_NO_SSL) && OPENSSL_VERSION_NUMBER >= 0x1000100fL && !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG) + + // The server does not send a list of Next Protocols, so we test + // that we continue anyhow and it works + + m_manager.clearAccessCache(); + + QUrl url(QStringLiteral("https://www.ossifrage.net/")); + QNetworkRequest request(url); + request.setAttribute(QNetworkRequest::SpdyAllowedAttribute, QVariant(true)); + QNetworkReply *reply = m_manager.get(request); + QObject::connect(reply, SIGNAL(finished()), &QTestEventLoop::instance(), SLOT(exitLoop())); + + QTestEventLoop::instance().enterLoop(15); + QVERIFY(!QTestEventLoop::instance().timeout()); + + int statusCode = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); + QVERIFY(statusCode == 200); + + QCOMPARE(reply->sslConfiguration().nextProtocolNegotiationStatus(), + QSslConfiguration::NextProtocolNegotiationUnsupported); +#else + QSKIP("Qt built withouth OpenSSL, or the OpenSSL version is too old"); +#endif // defined(QT_BUILD_INTERNAL) && !defined(QT_NO_SSL) ... +} + QTEST_MAIN(tst_qnetworkreply) #include "main.moc" -- cgit v1.2.3 From b444769840b2497f1295bca0694fe59aa78bb551 Mon Sep 17 00:00:00 2001 From: Maks Naumov Date: Sat, 24 Jan 2015 21:26:06 +0200 Subject: Don't crash with invalid QModelIndex or when QTreeWidgetItem is NULL in mimeData() Change-Id: I0a9abaa05cf136eadf222d3e7d102930719b84ff Reviewed-by: David Faure --- .../itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp | 8 ++++++++ tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp | 11 +++++++++++ 2 files changed, 19 insertions(+) (limited to 'tests') diff --git a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp index cde6141a71..10dedfaf95 100644 --- a/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp +++ b/tests/auto/gui/itemmodels/qstandarditemmodel/tst_qstandarditemmodel.cpp @@ -129,6 +129,7 @@ private slots: void removeRowsAndColumns(); void itemRoleNames(); + void getMimeDataWithInvalidModelIndex(); private: QAbstractItemModel *m_model; @@ -1671,6 +1672,13 @@ void tst_QStandardItemModel::itemRoleNames() VERIFY_MODEL } +void tst_QStandardItemModel::getMimeDataWithInvalidModelIndex() +{ + QStandardItemModel model; + QTest::ignoreMessage(QtWarningMsg, "QStandardItemModel::mimeData: No item associated with invalid index"); + QMimeData *data = model.mimeData(QModelIndexList() << QModelIndex()); + QVERIFY(!data); +} QTEST_MAIN(tst_QStandardItemModel) #include "tst_qstandarditemmodel.moc" diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp index c1331d62e1..bdeaaf38db 100644 --- a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp +++ b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp @@ -49,6 +49,9 @@ class CustomTreeWidget : public QTreeWidget public: QModelIndex indexFromItem(QTreeWidgetItem *item, int column = 0) const { return QTreeWidget::indexFromItem(item, column); } + + QMimeData * mimeData(const QList items) const + { return QTreeWidget::mimeData(items); } }; class tst_QTreeWidget : public QObject @@ -157,6 +160,7 @@ private slots: void setChildIndicatorPolicy(); void task20345_sortChildren(); + void getMimeDataWithInvalidItem(); public slots: void itemSelectionChanged(); @@ -3368,6 +3372,13 @@ void tst_QTreeWidget::task20345_sortChildren() QVERIFY(1); } +void tst_QTreeWidget::getMimeDataWithInvalidItem() +{ + CustomTreeWidget w; + QTest::ignoreMessage(QtWarningMsg, "QTreeWidget::mimeData: Null-item passed"); + QMimeData *md = w.mimeData(QList() << Q_NULLPTR); + QVERIFY(!md); +} QTEST_MAIN(tst_QTreeWidget) #include "tst_qtreewidget.moc" -- cgit v1.2.3