diff options
Diffstat (limited to 'tests')
52 files changed, 675 insertions, 92 deletions
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; } 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" 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 @@ +<RCC> + <qresource prefix="/qt-project.org/qmime"> + <file alias="yast2-metapackage-handler-mimetypes.xml">yast2-metapackage-handler-mimetypes.xml</file> + <file alias="qml-again.xml">qml-again.xml</file> + <file alias="test.qml">test.qml</file> + </qresource> +</RCC> 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()))); 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<SomeClass> scp2 = QSharedPointer<SomeClass>::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 { 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]; } } 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 Binary files differnew file mode 100644 index 0000000000..e87bf56453 --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/carriagereturn+nul.xml 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 Binary files differnew file mode 100644 index 0000000000..f76dd238ad --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul0.xml 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 Binary files differnew file mode 100644 index 0000000000..aab3ad6ca9 --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul1.xml 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 Binary files differnew file mode 100644 index 0000000000..e14d1b8ae5 --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul2.xml 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 Binary files differnew file mode 100644 index 0000000000..d8260b908e --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul3.xml 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 Binary files differnew file mode 100644 index 0000000000..61e011014e --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul3bis.xml 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 Binary files differnew file mode 100644 index 0000000000..90f20eebf0 --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul4.xml 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 Binary files differnew file mode 100644 index 0000000000..15d2d10685 --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul4bis.xml 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 Binary files differnew file mode 100644 index 0000000000..6a79cbdc75 --- /dev/null +++ b/tests/auto/corelib/xml/qxmlstream/data/nul5.xml 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/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp index c61f5f38ca..9feec3f6c7 100644 --- a/tests/auto/gui/image/qimage/tst_qimage.cpp +++ b/tests/auto/gui/image/qimage/tst_qimage.cpp @@ -2477,6 +2477,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() @@ -2495,6 +2497,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); @@ -2502,8 +2505,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 } 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/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 <QtGui/QOpenGLFunctions> +#include <QtGui/QScreen> +#include <QtGui/QWindow> +#include <private/qguiapplication_p.h> +#include <qpa/qplatformintegration.h> +#include <qpa/qplatformnativeinterface.h> + +#include <QtTest/QtTest> + +#include <QtCore/QSysInfo> +#include <QtCore/QLibraryInfo> +#include <QtCore/QScopedPointer> +#include <QtCore/QVariant> +#include <QtCore/QDebug> +#include <QtCore/QTextStream> + +#include <algorithm> + +#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<QScreen*> 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<const char *>(functions.glGetString(GL_VENDOR)) + << "\nRenderer : " << reinterpret_cast<const char *>(functions.glGetString(GL_RENDERER)) + << "\nVersion : " << reinterpret_cast<const char *>(functions.glGetString(GL_VERSION)) + << "\nShading language : " << reinterpret_cast<const char *>(functions.glGetString(GL_SHADING_LANGUAGE_VERSION)) + << "\nFormat : " << context.format(); + + QList<QByteArray> 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" 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" 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<QSslCertificate> leafCert = QSslCertificate::fromPath(QLatin1String( SRCDIR "pkcs12/leaf.crt")); + QList<QSslCertificate> 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<QSslCertificate> caCert = QSslCertificate::fromPath(QLatin1String(SRCDIR "pkcs12/inter.crt")); + QList<QSslCertificate> caCert = QSslCertificate::fromPath(testDataDir + QLatin1String("/pkcs12/inter.crt")); QVERIFY(!caCert.isEmpty()); QVERIFY(!caCerts.isEmpty()); diff --git a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp index af0a0b446e..19462b5342 100644 --- a/tests/auto/other/qaccessibility/tst_qaccessibility.cpp +++ b/tests/auto/other/qaccessibility/tst_qaccessibility.cpp @@ -2773,7 +2773,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); @@ -2781,7 +2781,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); @@ -3275,7 +3275,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(); 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 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" 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/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp b/tests/auto/widgets/graphicsview/qgraphicsproxywidget/tst_qgraphicsproxywidget.cpp index 07c9369771..c2ec7be9e7 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" 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; 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<QLineEdit *>(QString()) != 0, editorOpened); } diff --git a/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp b/tests/auto/widgets/itemviews/qtreewidget/tst_qtreewidget.cpp index 8bcd03c760..6f7a6c2491 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<QTreeWidgetItem*> items) const + { return QTreeWidget::mimeData(items); } }; class tst_QTreeWidget : public QObject @@ -159,6 +162,7 @@ private slots: void setChildIndicatorPolicy(); void task20345_sortChildren(); + void getMimeDataWithInvalidItem(); public slots: void itemSelectionChanged(); @@ -3410,6 +3414,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<QTreeWidgetItem*>() << Q_NULLPTR); + QVERIFY(!md); +} QTEST_MAIN(tst_QTreeWidget) #include "tst_qtreewidget.moc" diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index 8f3f12e7ff..8dacab7c3b 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -185,6 +185,14 @@ inline void setWindowsAnimationsEnabled(bool) {} static inline bool windowsAnimationsEnabled() { return false; } #endif // !Q_OS_WIN || Q_OS_WINCE || Q_OS_WINRT +template <class T> +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 @@ -1396,11 +1404,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() @@ -1823,17 +1833,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 @@ -1841,10 +1851,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 @@ -2745,13 +2755,13 @@ void tst_QWidget::raise() QList<QObject *> 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); @@ -2774,7 +2784,7 @@ void tst_QWidget::raise() QList<QObject *> 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. @@ -2807,7 +2817,7 @@ void tst_QWidget::raise() QList<QObject *> list3; list3 << child1 << child4 << child2 << child3; - QVERIFY(parent->children() == list3); + QCOMPARE(parent->children(), list3); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = 0; @@ -2849,13 +2859,13 @@ void tst_QWidget::lower() QList<QObject *> 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); @@ -2879,7 +2889,7 @@ void tst_QWidget::lower() QList<QObject *> list2; list2 << child4 << child1 << child2 << child3; - QVERIFY(parent->children() == list2); + QCOMPARE(parent->children(), list2); } #endif @@ -2913,7 +2923,7 @@ void tst_QWidget::stackUnder() QVERIFY(QTest::qWaitForWindowExposed(parent.data())); QList<QObject *> list1; list1 << child1 << child2 << child3 << child4; - QVERIFY(parent->children() == list1); + QCOMPARE(parent->children(), list1); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = child == child4 ? 1 : 0; @@ -2932,7 +2942,7 @@ void tst_QWidget::stackUnder() QList<QObject *> list2; list2 << child1 << child4 << child2 << child3; - QVERIFY(parent->children() == list2); + QCOMPARE(parent->children(), list2); foreach (UpdateWidget *child, allChildren) { int expectedPaintEvents = child == child3 ? 1 : 0; @@ -2948,7 +2958,7 @@ void tst_QWidget::stackUnder() QList<QObject *> list3; list3 << child4 << child2 << child1 << child3; - QVERIFY(parent->children() == list3); + QCOMPARE(parent->children(), list3); foreach (UpdateWidget *child, allChildren) { int expectedZOrderChangeEvents = child == child1 ? 1 : 0; @@ -3760,8 +3770,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 } @@ -3813,7 +3825,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() @@ -4687,8 +4699,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(); @@ -4698,8 +4711,10 @@ void tst_QWidget::setGeometry_win() widget.show(); RECT rt; ::GetWindowRect(winHandleOf(&widget), &rt); - QVERIFY(rt.left <= 0); - QVERIFY(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) @@ -6547,7 +6562,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); @@ -7188,7 +7204,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(); @@ -7721,8 +7737,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) { @@ -9511,8 +9529,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<QWidget *>(toolBar)); @@ -9743,7 +9763,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 { @@ -10095,7 +10115,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. @@ -10368,13 +10388,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() @@ -10389,13 +10411,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)); } void tst_QWidget::qmlSetParentHelper() 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) diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp index 5007983aa6..0873c6bbb1 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(); @@ -2066,9 +2066,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; @@ -2087,9 +2087,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() 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<Qt::KeyboardModifiers>("modifiers"); + QTest::addColumn<bool>("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<Qt::KeyboardModifiers>("modifiers"); + QTest::addColumn<bool>("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 diff --git a/tests/manual/diaglib/nativewindowdump_win.cpp b/tests/manual/diaglib/nativewindowdump_win.cpp index 69ba17a5d0..0fbba08a21 100644 --- a/tests/manual/diaglib/nativewindowdump_win.cpp +++ b/tests/manual/diaglib/nativewindowdump_win.cpp @@ -170,7 +170,7 @@ static void dumpNativeWindows(const WIdVector& wins) dc.stream = QSharedPointer<QTextStream>(new QTextStream(&s)); foreach (WId win, wins) dumpNativeWindowRecursion(reinterpret_cast<HWND>(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 diff --git a/tests/manual/qnetworkreply/main.cpp b/tests/manual/qnetworkreply/main.cpp index f91309502b..a0680b5af9 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 @@ -579,6 +580,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" |