diff options
author | Liang Qi <liang.qi@qt.io> | 2017-03-28 09:23:03 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-03-28 09:28:31 +0200 |
commit | b48a13fd6843e12b5725aa3ff0d010007e7c43b4 (patch) | |
tree | 316cfe36fc67906efcd92ff806c7c0da56ed4f8e /tests | |
parent | 3398d9d40cb0dae2dc2a1a4f7dc3b4b9cceae903 (diff) | |
parent | 15fe60cfdada84ea519f08e905d59cc3fb6d20cd (diff) |
Merge remote-tracking branch 'origin/5.9' into dev
Conflicts:
examples/examples.pro
tests/auto/corelib/tools/qchar/tst_qchar.cpp
tests/auto/other/qaccessibility/accessiblewidgets.h
Change-Id: I426696c40ab57d14dc295b8103152cede79f244c
Diffstat (limited to 'tests')
32 files changed, 561 insertions, 93 deletions
diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index d3c4d470f5..f4ab0d8464 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -31,6 +31,8 @@ else:!qtConfig(process): SUBDIRS -= tools !qtHaveModule(concurrent): SUBDIRS -= concurrent !qtHaveModule(network): SUBDIRS -= network !qtHaveModule(dbus): SUBDIRS -= dbus +!qtHaveModule(xml): SUBDIRS -= xml +!qtHaveModule(sql): SUBDIRS -= sql # Disable the QtDBus tests if we can't connect to the session bus !cross_compile:qtHaveModule(dbus) { diff --git a/tests/auto/corelib/animation/qpauseanimation/BLACKLIST b/tests/auto/corelib/animation/qpauseanimation/BLACKLIST index 3b2cd84749..8fc1b07502 100644 --- a/tests/auto/corelib/animation/qpauseanimation/BLACKLIST +++ b/tests/auto/corelib/animation/qpauseanimation/BLACKLIST @@ -2,3 +2,5 @@ osx-10.9 [pauseAndPropertyAnimations] * +[multipleSequentialGroups] +osx diff --git a/tests/auto/corelib/io/io.pro b/tests/auto/corelib/io/io.pro index 470a1dde26..01ed84fda9 100644 --- a/tests/auto/corelib/io/io.pro +++ b/tests/auto/corelib/io/io.pro @@ -50,6 +50,11 @@ SUBDIRS=\ qprocess \ qtextstream +!qtHaveModule(concurrent): SUBDIRS -= \ + qdebug \ + qlockfile \ + qurl + !qtConfig(private_tests): SUBDIRS -= \ qabstractfileengine \ qfileinfo \ diff --git a/tests/auto/corelib/io/qdir/tst_qdir.cpp b/tests/auto/corelib/io/qdir/tst_qdir.cpp index 762cb539e0..330ff9312d 100644 --- a/tests/auto/corelib/io/qdir/tst_qdir.cpp +++ b/tests/auto/corelib/io/qdir/tst_qdir.cpp @@ -99,14 +99,11 @@ private slots: void entryListWithSymLinks(); - void mkdir_data(); - void mkdir(); + void mkdirRmdir_data(); + void mkdirRmdir(); void makedirReturnCode(); - void rmdir_data(); - void rmdir(); - void removeRecursively_data(); void removeRecursively(); void removeRecursivelyFailure(); @@ -342,26 +339,29 @@ void tst_QDir::setPath() QCOMPARE(shared.entryList(), entries2); } -void tst_QDir::mkdir_data() +void tst_QDir::mkdirRmdir_data() { QTest::addColumn<QString>("path"); QTest::addColumn<bool>("recurse"); QStringList dirs; - dirs << QDir::currentPath() + "/testdir/one/two/three" - << QDir::currentPath() + "/testdir/two" - << QDir::currentPath() + "/testdir/two/three"; - QTest::newRow("data0") << dirs.at(0) << true; - QTest::newRow("data1") << dirs.at(1) << false; - QTest::newRow("data2") << dirs.at(2) << false; // note: requires data1 to have been run! + dirs << "testdir/one" + << "testdir/two/three/four" + << "testdir/../testdir/three"; + QTest::newRow("plain") << QDir::currentPath() + "/" + dirs.at(0) << false; + QTest::newRow("recursive") << QDir::currentPath() + "/" + dirs.at(1) << true; + QTest::newRow("with-..") << QDir::currentPath() + "/" + dirs.at(2) << false; + + QTest::newRow("relative-plain") << dirs.at(0) << false; + QTest::newRow("relative-recursive") << dirs.at(1) << true; + QTest::newRow("relative-with-..") << dirs.at(2) << false; // Ensure that none of these directories already exist - QDir dir; for (int i = 0; i < dirs.count(); ++i) - dir.rmpath(dirs.at(i)); + QVERIFY(!QFile::exists(dirs.at(i))); } -void tst_QDir::mkdir() +void tst_QDir::mkdirRmdir() { QFETCH(QString, path); QFETCH(bool, recurse); @@ -376,6 +376,15 @@ void tst_QDir::mkdir() //make sure it really exists (ie that mkdir returns the right value) QFileInfo fi(path); QVERIFY2(fi.exists() && fi.isDir(), msgDoesNotExist(path).constData()); + + if (recurse) + QVERIFY(dir.rmpath(path)); + else + QVERIFY(dir.rmdir(path)); + + //make sure it really doesn't exist (ie that rmdir returns the right value) + fi.refresh(); + QVERIFY(!fi.exists()); } void tst_QDir::makedirReturnCode() @@ -405,32 +414,6 @@ void tst_QDir::makedirReturnCode() f.remove(); } -void tst_QDir::rmdir_data() -{ - QTest::addColumn<QString>("path"); - QTest::addColumn<bool>("recurse"); - - QTest::newRow("data0") << QDir::currentPath() + "/testdir/one/two/three" << true; - QTest::newRow("data1") << QDir::currentPath() + "/testdir/two/three" << false; - QTest::newRow("data2") << QDir::currentPath() + "/testdir/two" << false; -} - -void tst_QDir::rmdir() -{ - QFETCH(QString, path); - QFETCH(bool, recurse); - - QDir dir; - if (recurse) - QVERIFY(dir.rmpath(path)); - else - QVERIFY(dir.rmdir(path)); - - //make sure it really doesn't exist (ie that rmdir returns the right value) - QFileInfo fi(path); - QVERIFY(!fi.exists()); -} - void tst_QDir::removeRecursively_data() { QTest::addColumn<QString>("path"); diff --git a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp index a13ff0358a..d2f345feb5 100644 --- a/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp +++ b/tests/auto/corelib/io/qlockfile/tst_qlockfile.cpp @@ -34,6 +34,7 @@ #include <qsysinfo.h> #if defined(Q_OS_UNIX) && !defined(Q_OS_VXWORKS) #include <unistd.h> +#include <sys/time.h> #elif defined(Q_OS_WIN) && !defined(Q_OS_WINRT) # include <qt_windows.h> #endif @@ -59,6 +60,7 @@ private slots: void noPermissions(); void noPermissionsWindows(); void corruptedLockFile(); + void corruptedLockFileInTheFuture(); private: static bool overwritePidInLockFile(const QString &filePath, qint64 pid); @@ -521,6 +523,32 @@ void tst_QLockFile::corruptedLockFile() QCOMPARE(int(secondLock.error()), int(QLockFile::NoError)); } +void tst_QLockFile::corruptedLockFileInTheFuture() +{ +#if !defined(Q_OS_UNIX) + QSKIP("This tests needs utimes"); +#else + // This test is the same as the previous one, but the corruption was so there is a corrupted + // .rmlock whose timestamp is in the future + + const QString fileName = dir.path() + "/corruptedLockFile.rmlock"; + + { + QFile file(fileName); + QVERIFY(file.open(QFile::WriteOnly)); + } + + struct timeval times[2]; + gettimeofday(times, 0); + times[1].tv_sec = (times[0].tv_sec += 600); + times[1].tv_usec = times[0].tv_usec; + utimes(fileName.toLocal8Bit(), times); + + QTest::ignoreMessage(QtInfoMsg, "QLockFile: Lock file '" + fileName.toUtf8() + "' has a modification time in the future"); + corruptedLockFile(); +#endif +} + bool tst_QLockFile::overwritePidInLockFile(const QString &filePath, qint64 pid) { QFile f(filePath); diff --git a/tests/auto/corelib/io/qurl/tst_qurl.cpp b/tests/auto/corelib/io/qurl/tst_qurl.cpp index e1a999abfb..1cbb7ad19c 100644 --- a/tests/auto/corelib/io/qurl/tst_qurl.cpp +++ b/tests/auto/corelib/io/qurl/tst_qurl.cpp @@ -3071,7 +3071,11 @@ void tst_QUrl::fromUserInputWithCwd_data() } // Existing files - for (const char *fileName : {"file.txt", "file#a.txt", "file .txt", "file.txt "}) { + for (const char *fileName : {"file.txt", "file#a.txt", "file .txt", "file.txt " +#ifndef Q_OS_WIN + , "file:colon.txt" +#endif + }) { const QString filePath = base + '/' + fileName; QFile file(filePath); QVERIFY2(file.open(QIODevice::WriteOnly), qPrintable(filePath)); diff --git a/tests/auto/corelib/itemmodels/itemmodels.pro b/tests/auto/corelib/itemmodels/itemmodels.pro index 3552f30632..a09f03a7b4 100644 --- a/tests/auto/corelib/itemmodels/itemmodels.pro +++ b/tests/auto/corelib/itemmodels/itemmodels.pro @@ -9,6 +9,10 @@ qtHaveModule(gui): SUBDIRS += \ qitemselectionmodel \ qsortfilterproxymodel_recursive \ -qtHaveModule(widgets): SUBDIRS += \ - qitemmodel \ - qsortfilterproxymodel \ +qtHaveModule(widgets) { + SUBDIRS += \ + qsortfilterproxymodel + + qtHaveModule(sql): SUBDIRS += \ + qitemmodel +} diff --git a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp index 2346ca6d30..54582ee4c3 100644 --- a/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp +++ b/tests/auto/corelib/itemmodels/qsortfilterproxymodel/tst_qsortfilterproxymodel.cpp @@ -4017,7 +4017,7 @@ public: } bool canDropMimeData(const QMimeData *, Qt::DropAction, - int row, int column, const QModelIndex &parent) const Q_DECL_OVERRIDE + int row, int column, const QModelIndex &parent) const override { Q_UNUSED(row); Q_UNUSED(column); diff --git a/tests/auto/corelib/json/tst_qtjson.cpp b/tests/auto/corelib/json/tst_qtjson.cpp index 6aa5165e24..b215364f0e 100644 --- a/tests/auto/corelib/json/tst_qtjson.cpp +++ b/tests/auto/corelib/json/tst_qtjson.cpp @@ -32,6 +32,7 @@ #include "qjsonobject.h" #include "qjsonvalue.h" #include "qjsondocument.h" +#include "qregularexpression.h" #include <limits> #define INVALID_UNICODE "\xCE\xBA\xE1" @@ -49,6 +50,7 @@ private Q_SLOTS: void testNumbers(); void testNumbers_2(); void testNumbers_3(); + void testNumbers_4(); void testObjectSimple(); void testObjectSmallKeys(); @@ -375,6 +377,33 @@ void tst_QtJson::testNumbers_3() QVERIFY(d1_1 != d2_1); } +void tst_QtJson::testNumbers_4() +{ + // no exponent notation used to print numbers between -2^64 and 2^64 + QJsonArray array; + array << QJsonValue(+1000000000000000.0); + array << QJsonValue(-1000000000000000.0); + array << QJsonValue(+9007199254740992.0); + array << QJsonValue(-9007199254740992.0); + array << QJsonValue(+9223372036854775808.0); + array << QJsonValue(-9223372036854775808.0); + array << QJsonValue(+18446744073709551616.0); + array << QJsonValue(-18446744073709551616.0); + const QByteArray json(QJsonDocument(array).toJson()); + const QByteArray expected = + "[\n" + " 1000000000000000,\n" + " -1000000000000000,\n" + " 9007199254740992,\n" + " -9007199254740992,\n" + " 9223372036854776000,\n" + " -9223372036854776000,\n" + " 18446744073709552000,\n" + " -18446744073709552000\n" + "]\n"; + QCOMPARE(json, expected); +} + void tst_QtJson::testObjectSimple() { QJsonObject object; diff --git a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp index 78833d08bd..28c5c53744 100644 --- a/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp +++ b/tests/auto/corelib/kernel/qmetatype/tst_qmetatype.cpp @@ -1566,7 +1566,6 @@ DECLARE_NONSTREAMABLE(QJsonArray) DECLARE_NONSTREAMABLE(QJsonDocument) DECLARE_NONSTREAMABLE(QObject*) DECLARE_NONSTREAMABLE(QWidget*) -DECLARE_NONSTREAMABLE(std::nullptr_t) #define DECLARE_GUI_CLASS_NONSTREAMABLE(MetaTypeName, MetaTypeId, RealType) \ DECLARE_NONSTREAMABLE(RealType) @@ -1605,7 +1604,10 @@ void tst_QMetaType::saveAndLoadBuiltin() if (isStreamable) { QVERIFY(QMetaType::load(stream, type, value)); // Hmmm, shouldn't it return false? - QCOMPARE(stream.status(), QDataStream::ReadPastEnd); + + // std::nullptr_t is nullary: it doesn't actually read anything + if (type != QMetaType::Nullptr) + QCOMPARE(stream.status(), QDataStream::ReadPastEnd); } stream.device()->seek(0); @@ -1615,7 +1617,10 @@ void tst_QMetaType::saveAndLoadBuiltin() if (isStreamable) { QVERIFY(QMetaType::load(stream, type, value)); // Hmmm, shouldn't it return false? - QCOMPARE(stream.status(), QDataStream::ReadPastEnd); + + // std::nullptr_t is nullary: it doesn't actually read anything + if (type != QMetaType::Nullptr) + QCOMPARE(stream.status(), QDataStream::ReadPastEnd); } QMetaType::destroy(type, value); diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase.pro b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase.pro index 536a6b64de..f821702564 100644 --- a/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase.pro +++ b/tests/auto/corelib/mimetypes/qmimedatabase/qmimedatabase.pro @@ -1,3 +1,5 @@ TEMPLATE = subdirs -SUBDIRS = qmimedatabase-xml -unix:!mac:!qnx: SUBDIRS += qmimedatabase-cache +qtHaveModule(concurrent) { + SUBDIRS = qmimedatabase-xml + unix:!darwin:!qnx: SUBDIRS += qmimedatabase-cache +} diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp index 02ba987ccd..280e3f77a4 100644 --- a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp +++ b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp @@ -861,7 +861,7 @@ void tst_QMimeDatabase::fromThreads() #if QT_CONFIG(process) enum { - UpdateMimeDatabaseTimeout = 120 * 1000 // 2min + UpdateMimeDatabaseTimeout = 4 * 60 * 1000 // 4min }; static bool runUpdateMimeDatabase(const QString &path) // TODO make it a QMimeDatabase method? diff --git a/tests/auto/corelib/thread/thread.pro b/tests/auto/corelib/thread/thread.pro index f18dad6a4c..d3c669859b 100644 --- a/tests/auto/corelib/thread/thread.pro +++ b/tests/auto/corelib/thread/thread.pro @@ -6,7 +6,6 @@ SUBDIRS=\ qresultstore \ qfuture \ qfuturesynchronizer \ - qfuturewatcher \ qmutex \ qmutexlocker \ qreadlocker \ @@ -18,3 +17,8 @@ SUBDIRS=\ qthreadstorage \ qwaitcondition \ qwritelocker + +qtHaveModule(concurrent) { + SUBDIRS += \ + qfuturewatcher +} diff --git a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp index ba2adddca0..a00c962510 100644 --- a/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp +++ b/tests/auto/corelib/tools/qarraydata/tst_qarraydata.cpp @@ -750,7 +750,6 @@ void tst_QArrayData::reallocate() QFETCH(size_t, alignment); QFETCH(QArrayData::AllocationOptions, allocateOptions); QFETCH(bool, isCapacityReserved); - QFETCH(const QArrayData *, commonEmpty); // Maximum alignment that can be requested is that of QArrayData, // otherwise, we can't use reallocate(). diff --git a/tests/auto/corelib/tools/qchar/tst_qchar.cpp b/tests/auto/corelib/tools/qchar/tst_qchar.cpp index dede56b4bf..76309d914b 100644 --- a/tests/auto/corelib/tools/qchar/tst_qchar.cpp +++ b/tests/auto/corelib/tools/qchar/tst_qchar.cpp @@ -38,7 +38,7 @@ class tst_QChar : public QObject private slots: void fromChar16_t(); void fromWchar_t(); - void operator_eqeq_int(); + void operator_eqeq_null(); void operators_data(); void operators(); void toUpper(); @@ -101,32 +101,54 @@ void tst_QChar::fromWchar_t() #endif } -void tst_QChar::operator_eqeq_int() +void tst_QChar::operator_eqeq_null() { { const QChar ch = QLatin1Char(' '); - QVERIFY(ch != 0); - QVERIFY(!(ch == 0)); - - QVERIFY(ch == 0x20); - QVERIFY(!(ch != 0x20)); - QVERIFY(0x20 == ch); - QVERIFY(!(0x20 != ch)); +#define CHECK(NUL) \ + do { \ + QVERIFY(!(ch == NUL)); \ + QVERIFY( ch != NUL ); \ + QVERIFY(!(ch < NUL)); \ + QVERIFY( ch > NUL ); \ + QVERIFY(!(ch <= NUL)); \ + QVERIFY( ch >= NUL ); \ + QVERIFY(!(NUL == ch )); \ + QVERIFY( NUL != ch ); \ + QVERIFY( NUL < ch ); \ + QVERIFY(!(NUL > ch )); \ + QVERIFY( NUL <= ch ); \ + QVERIFY(!(NUL >= ch )); \ + } while (0) + + CHECK(0); + CHECK('\0'); +#undef CHECK } { const QChar ch = QLatin1Char('\0'); - QVERIFY(ch == 0); - QVERIFY(!(ch != 0)); - - QVERIFY(ch != 0x20); - QVERIFY(!(ch == 0x20)); - QVERIFY(0x20 != ch); - QVERIFY(!(0x20 == ch)); +#define CHECK(NUL) \ + do { \ + QVERIFY( ch == NUL ); \ + QVERIFY(!(ch != NUL)); \ + QVERIFY(!(ch < NUL)); \ + QVERIFY(!(ch > NUL)); \ + QVERIFY( ch <= NUL ); \ + QVERIFY( ch >= NUL ); \ + QVERIFY( NUL == ch ); \ + QVERIFY(!(NUL != ch )); \ + QVERIFY(!(NUL < ch )); \ + QVERIFY(!(NUL > ch )); \ + QVERIFY( NUL <= ch ); \ + QVERIFY( NUL >= ch ); \ + } while (0) + + CHECK(0); + CHECK('\0'); +#undef CHECK } } -QT_WARNING_POP - void tst_QChar::operators_data() { QTest::addColumn<QChar>("lhs"); diff --git a/tests/auto/corelib/tools/qhash/tst_qhash.cpp b/tests/auto/corelib/tools/qhash/tst_qhash.cpp index 0b864e71d4..0c5f1a7afb 100644 --- a/tests/auto/corelib/tools/qhash/tst_qhash.cpp +++ b/tests/auto/corelib/tools/qhash/tst_qhash.cpp @@ -1053,6 +1053,10 @@ void tst_QHash::keyIterator() QCOMPARE(*(--key_it), (--it).key()); QCOMPARE(std::count(hash.keyBegin(), hash.keyEnd(), 99), 1); + + // DefaultConstructible test + typedef QHash<int, int>::key_iterator keyIterator; + Q_STATIC_ASSERT(std::is_default_constructible<keyIterator>::value); } void tst_QHash::rehash_isnt_quadratic() diff --git a/tests/auto/corelib/tools/qmap/tst_qmap.cpp b/tests/auto/corelib/tools/qmap/tst_qmap.cpp index 8aa7a3e518..f42ffc0471 100644 --- a/tests/auto/corelib/tools/qmap/tst_qmap.cpp +++ b/tests/auto/corelib/tools/qmap/tst_qmap.cpp @@ -857,6 +857,10 @@ void tst_QMap::keyIterator() QCOMPARE(*(--key_it), (--it).key()); QCOMPARE(std::count(map.keyBegin(), map.keyEnd(), 99), 1); + + // DefaultConstructible test + typedef QMap<int, int>::key_iterator keyIterator; + Q_STATIC_ASSERT(std::is_default_constructible<keyIterator>::value); } void tst_QMap::keys_values_uniqueKeys() diff --git a/tests/auto/corelib/xml/xml.pro b/tests/auto/corelib/xml/xml.pro index 20519edf1b..374e695aa7 100644 --- a/tests/auto/corelib/xml/xml.pro +++ b/tests/auto/corelib/xml/xml.pro @@ -1,3 +1,3 @@ TEMPLATE=subdirs -qtHaveModule(network): SUBDIRS= \ +qtHaveModule(network):qtHaveModule(xml): SUBDIRS= \ qxmlstream diff --git a/tests/auto/dbus/dbus.pro b/tests/auto/dbus/dbus.pro index 2c58d7e235..6878c9341d 100644 --- a/tests/auto/dbus/dbus.pro +++ b/tests/auto/dbus/dbus.pro @@ -34,3 +34,6 @@ SUBDIRS+=\ qdbusabstractinterface \ qdbusinterface \ qdbusmarshall + +!qtHaveModule(xml): SUBDIRS -= \ + qdbusxmlparser diff --git a/tests/auto/gui/text/text.pro b/tests/auto/gui/text/text.pro index d1a3eda4fc..6b033fb506 100644 --- a/tests/auto/gui/text/text.pro +++ b/tests/auto/gui/text/text.pro @@ -35,3 +35,7 @@ win32:SUBDIRS -= qtextpiecetable qtextpiecetable \ qzip \ qtextodfwriter + +!qtHaveModule(xml): SUBDIRS -= \ + qcssparser \ + qtextdocument diff --git a/tests/auto/network/ssl/qsslsocket/certs/xn--schufele-2za.crt b/tests/auto/network/ssl/qsslsocket/certs/xn--schufele-2za.crt new file mode 100644 index 0000000000..b34847b8d2 --- /dev/null +++ b/tests/auto/network/ssl/qsslsocket/certs/xn--schufele-2za.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBfTCCASegAwIBAgIJANTX9XvqKXllMA0GCSqGSIb3DQEBCwUAMBoxGDAWBgNV +BAMMDyouU0NIw4RVRkVMRS5ERTAeFw0xNzAzMDcwOTIwMzZaFw0xNzA0MDYwOTIw +MzZaMBoxGDAWBgNVBAMMDyouU0NIw4RVRkVMRS5ERTBcMA0GCSqGSIb3DQEBAQUA +A0sAMEgCQQDZGJFl85dMxps7EryuNyP1apWrBqp7mlwgfbCN9wboyUZBLCWM58UK +6oJPg0X19IJUv3UTxD8GH7qQteCXPl4bAgMBAAGjUDBOMB0GA1UdDgQWBBSLuHtk +CfEpYnW5Rw7XcO53P/1+jDAfBgNVHSMEGDAWgBSLuHtkCfEpYnW5Rw7XcO53P/1+ +jDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA0EAXrGVzhGlekW5Zm78tASr +5lTF6wn3klqvd2zTqTKuAKWAuBNX46p79g8OGsfY76X9M+/RbUYa7h5BuTL9b45K +dw== +-----END CERTIFICATE----- diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp index ba02af1d47..f44e5261dd 100644 --- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp @@ -191,6 +191,7 @@ private slots: void supportedCiphers(); void systemCaCertificates(); void wildcardCertificateNames(); + void isMatchingHostname(); void wildcard(); void setEmptyKey(); void spontaneousWrite(); @@ -1687,10 +1688,15 @@ void tst_QSslSocket::wildcardCertificateNames() { // Passing CN matches QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("www.example.com"), QString("www.example.com")), true ); + QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("WWW.EXAMPLE.COM"), QString("www.example.com")), true ); QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("*.example.com"), QString("www.example.com")), true ); QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("xxx*.example.com"), QString("xxxwww.example.com")), true ); QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("f*.example.com"), QString("foo.example.com")), true ); QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("192.168.0.0"), QString("192.168.0.0")), true ); + QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("foo.éxample.com"), QString("foo.xn--xample-9ua.com")), true ); + QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("*.éxample.com"), QString("foo.xn--xample-9ua.com")), true ); + QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("xn--kcry6tjko.example.org"), QString("xn--kcry6tjko.example.org")), true); + QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("*.xn--kcry6tjko.example.org"), QString("xn--kcr.xn--kcry6tjko.example.org")), true); // Failing CN matches QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("xxx.example.com"), QString("www.example.com")), false ); @@ -1705,6 +1711,26 @@ void tst_QSslSocket::wildcardCertificateNames() QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString(""), QString("www")), false ); QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("*"), QString("www")), false ); QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("*.168.0.0"), QString("192.168.0.0")), false ); + QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("xn--kcry6tjko*.example.org"), QString("xn--kcry6tjkoanc.example.org")), false ); // RFC 6125 §7.2 + QCOMPARE( QSslSocketPrivate::isMatchingHostname(QString("å*.example.org"), QString("xn--la-xia.example.org")), false ); +} + +void tst_QSslSocket::isMatchingHostname() +{ + // with normalization: (the certificate has *.SCHÄUFELE.DE as a CN) + // openssl req -x509 -nodes -subj "/CN=*.SCHÄUFELE.DE" -newkey rsa:512 -keyout /dev/null -out xn--schufele-2za.crt + QList<QSslCertificate> certs = QSslCertificate::fromPath(SRCDIR "certs/xn--schufele-2za.crt"); + QVERIFY(!certs.isEmpty()); + QSslCertificate cert = certs.first(); + + QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("WWW.SCHÄUFELE.DE")), true); + QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("www.xn--schufele-2za.de")), true); + QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("www.schäufele.de")), true); + QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("föo.schäufele.de")), true); + + QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("foo.foo.xn--schufele-2za.de")), false); + QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("www.schaufele.de")), false); + QCOMPARE(QSslSocketPrivate::isMatchingHostname(cert, QString::fromUtf8("www.schufele.de")), false); } void tst_QSslSocket::wildcard() diff --git a/tests/auto/other/qaccessibility/accessiblewidgets.h b/tests/auto/other/qaccessibility/accessiblewidgets.h index 62aa38ff6c..0c337a72f4 100644 --- a/tests/auto/other/qaccessibility/accessiblewidgets.h +++ b/tests/auto/other/qaccessibility/accessiblewidgets.h @@ -98,14 +98,15 @@ public: return 0; } CustomTextWidgetIface(CustomTextWidget *w): QAccessibleWidget(w) {} - void *interface_cast(QAccessible::InterfaceType t) override { + void *interface_cast(QAccessible::InterfaceType t) override + { if (t == QAccessible::TextInterface) return static_cast<QAccessibleTextInterface*>(this); return 0; } // this is mostly to test the base implementation for textBefore/At/After - QString text(QAccessible::Text t) const Q_DECL_OVERRIDE + QString text(QAccessible::Text t) const override { if (t == QAccessible::Value) return textWidget()->text; @@ -131,20 +132,20 @@ public: return QAccessibleTextInterface::textAfterOffset(offset, boundaryType, startOffset, endOffset); } - void selection(int, int *startOffset, int *endOffset) const Q_DECL_OVERRIDE + void selection(int, int *startOffset, int *endOffset) const override { *startOffset = *endOffset = -1; } - int selectionCount() const Q_DECL_OVERRIDE { return 0; } - void addSelection(int, int) Q_DECL_OVERRIDE {} - void removeSelection(int) Q_DECL_OVERRIDE {} - void setSelection(int, int, int) Q_DECL_OVERRIDE {} - int cursorPosition() const Q_DECL_OVERRIDE { return textWidget()->cursorPosition; } - void setCursorPosition(int position) Q_DECL_OVERRIDE { textWidget()->cursorPosition = position; } - QString text(int startOffset, int endOffset) const Q_DECL_OVERRIDE { return textWidget()->text.mid(startOffset, endOffset); } - int characterCount() const Q_DECL_OVERRIDE { return textWidget()->text.length(); } - QRect characterRect(int) const Q_DECL_OVERRIDE { return QRect(); } - int offsetAtPoint(const QPoint &) const Q_DECL_OVERRIDE { return 0; } - void scrollToSubstring(int, int) Q_DECL_OVERRIDE {} - QString attributes(int, int *, int *) const Q_DECL_OVERRIDE + int selectionCount() const override { return 0; } + void addSelection(int, int) override {} + void removeSelection(int) override {} + void setSelection(int, int, int) override {} + int cursorPosition() const override { return textWidget()->cursorPosition; } + void setCursorPosition(int position) override { textWidget()->cursorPosition = position; } + QString text(int startOffset, int endOffset) const override { return textWidget()->text.mid(startOffset, endOffset); } + int characterCount() const override { return textWidget()->text.length(); } + QRect characterRect(int) const override { return QRect(); } + int offsetAtPoint(const QPoint &) const override { return 0; } + void scrollToSubstring(int, int) override {} + QString attributes(int, int *, int *) const override { return QString(); } private: diff --git a/tests/auto/tools/moc/cxx17-namespaces.h b/tests/auto/tools/moc/cxx17-namespaces.h index 7c9f54d5f3..97f534c697 100644 --- a/tests/auto/tools/moc/cxx17-namespaces.h +++ b/tests/auto/tools/moc/cxx17-namespaces.h @@ -27,7 +27,7 @@ ****************************************************************************/ #ifndef CXX17_NAMESPACES_H -#define CXX11_NAMESPACES_H +#define CXX17_NAMESPACES_H #include <QtCore/QObject> #if defined(__cpp_nested_namespace_definitions) || defined(Q_MOC_RUN) diff --git a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp index d241296a6b..f2cf78e8ac 100644 --- a/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp +++ b/tests/auto/widgets/itemviews/qabstractitemview/tst_qabstractitemview.cpp @@ -45,6 +45,7 @@ #include <qpushbutton.h> #include <qscrollbar.h> #include <qboxlayout.h> +#include <qitemdelegate.h> #include <qlineedit.h> #include <qscreen.h> #include <qscopedpointer.h> @@ -151,6 +152,7 @@ private slots: void testSelectionModelInSyncWithView(); void testClickToSelect(); void testDialogAsEditor(); + void QTBUG46785_mouseout_hover_state(); }; class MyAbstractItemDelegate : public QAbstractItemDelegate @@ -2213,5 +2215,56 @@ void tst_QAbstractItemView::testDialogAsEditor() QCOMPARE(delegate.result, QDialog::Accepted); } +class HoverItemDelegate : public QItemDelegate +{ +public: + HoverItemDelegate() + : QItemDelegate() + , m_paintedWithoutHover(false) + { } + + void paint(QPainter *painter, const QStyleOptionViewItem &opt, const QModelIndex &index) const override + { + Q_UNUSED(painter); + + if (!(opt.state & QStyle::State_MouseOver)) { + + // We don't want to set m_paintedWithoutHover for any item so check for the item at 0,0 + if (index.row() == 0 && index.column() == 0) { + m_paintedWithoutHover = true; + } + } + } + + mutable bool m_paintedWithoutHover; +}; + +void tst_QAbstractItemView::QTBUG46785_mouseout_hover_state() +{ + HoverItemDelegate delegate; + + QTableWidget table(5, 5); + table.verticalHeader()->hide(); + table.horizontalHeader()->hide(); + table.setMouseTracking(true); + table.setItemDelegate(&delegate); + centerOnScreen(&table); + table.show(); + QVERIFY(QTest::qWaitForWindowActive(&table)); + + QModelIndex item = table.model()->index(0, 0); + QRect itemRect = table.visualRect(item); + + // Move the mouse into the center of the item at 0,0 to cause a paint event to occur + QTest::mouseMove(table.viewport(), itemRect.center()); + QTest::mouseClick(table.viewport(), Qt::LeftButton, 0, itemRect.center()); + + delegate.m_paintedWithoutHover = false; + + QTest::mouseMove(table.viewport(), QPoint(-50, 0)); + + QTRY_VERIFY(delegate.m_paintedWithoutHover); +} + QTEST_MAIN(tst_QAbstractItemView) #include "tst_qabstractitemview.moc" diff --git a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp index cd1df49f8c..5fe0232d90 100644 --- a/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp +++ b/tests/auto/widgets/kernel/qwidget/tst_qwidget.cpp @@ -277,6 +277,7 @@ private slots: #endif void setLocale(); + void propagateLocale(); void deleteStyle(); void multipleToplevelFocusCheck(); void setFocus(); @@ -1205,6 +1206,33 @@ void tst_QWidget::setLocale() QCOMPARE(child2.locale(), QLocale(QLocale::French)); } +void tst_QWidget::propagateLocale() +{ + QWidget parent; + parent.setLocale(QLocale::French); + // Non-window widget; propagates locale: + QWidget *child = new QWidget(&parent); + QVERIFY(!child->isWindow()); + QVERIFY(!child->testAttribute(Qt::WA_WindowPropagation)); + QCOMPARE(child->locale(), QLocale(QLocale::French)); + parent.setLocale(QLocale::Italian); + QCOMPARE(child->locale(), QLocale(QLocale::Italian)); + delete child; + // Window: doesn't propagate locale: + child = new QWidget(&parent, Qt::Window); + QVERIFY(child->isWindow()); + QVERIFY(!child->testAttribute(Qt::WA_WindowPropagation)); + QCOMPARE(child->locale(), QLocale()); + parent.setLocale(QLocale::French); + QCOMPARE(child->locale(), QLocale()); + // ... unless we tell it to: + child->setAttribute(Qt::WA_WindowPropagation, true); + QVERIFY(child->testAttribute(Qt::WA_WindowPropagation)); + QCOMPARE(child->locale(), QLocale(QLocale::French)); + parent.setLocale(QLocale::Italian); + QCOMPARE(child->locale(), QLocale(QLocale::Italian)); +} + void tst_QWidget::visible_setWindowOpacity() { QScopedPointer<QWidget> testWidget(new QWidget); diff --git a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp index 52d7a39406..ceef88338a 100644 --- a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp +++ b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp @@ -106,7 +106,8 @@ static bool tabBetweenSubWindowsIn(QMdiArea *mdiArea, int tabCount = -1, bool re } QMdiSubWindow *subWindow = subWindows.at(reverse ? subWindows.size() -1 - i : i); if (rubberBand->geometry() != subWindow->geometry()) { - qWarning("Rubber band has different geometry"); + qWarning().nospace() << "Rubber band of tab " << i << " has different geometry: " + << rubberBand->geometry() << " (sub window: " << subWindow->geometry() << ")."; return false; } } diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp index b9ea310d80..bc94e2a05b 100644 --- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp @@ -46,6 +46,7 @@ #include <qcommonstyle.h> #include <qlayout.h> #include <qdir.h> +#include <qpaintengine.h> #include <qabstracttextdocumentlayout.h> #include <qtextdocumentfragment.h> @@ -60,6 +61,8 @@ typedef QPair<Qt::Key, Qt::KeyboardModifier> keyPairType; typedef QList<keyPairType> pairListType; Q_DECLARE_METATYPE(keyPairType); +Q_DECLARE_METATYPE(QList<QInputMethodEvent::Attribute>); + QT_FORWARD_DECLARE_CLASS(QTextEdit) class tst_QTextEdit : public QObject @@ -200,6 +203,9 @@ private slots: void wheelEvent(); #endif + void preeditCharFormat_data(); + void preeditCharFormat(); + private: void createSelection(); int blockCount() const; @@ -2594,5 +2600,235 @@ void tst_QTextEdit::wheelEvent() #endif +namespace { + class MyPaintEngine : public QPaintEngine + { + public: + bool begin(QPaintDevice *) + { + return true; + } + + bool end() + { + return true; + } + + void updateState(const QPaintEngineState &) + { + } + + void drawPixmap(const QRectF &, const QPixmap &, const QRectF &) + { + } + + void drawTextItem(const QPointF &, const QTextItem &textItem) Q_DECL_OVERRIDE + { + itemFonts.append(qMakePair(textItem.text(), textItem.font())); + } + + Type type() const { return User; } + + + QList<QPair<QString, QFont> > itemFonts; + }; + + class MyPaintDevice : public QPaintDevice + { + public: + MyPaintDevice() : m_paintEngine(new MyPaintEngine) + { + } + + + QPaintEngine *paintEngine () const + { + return m_paintEngine; + } + + int metric (QPaintDevice::PaintDeviceMetric metric) const { + switch (metric) { + case QPaintDevice::PdmWidth: + case QPaintDevice::PdmHeight: + case QPaintDevice::PdmWidthMM: + case QPaintDevice::PdmHeightMM: + case QPaintDevice::PdmNumColors: + return INT_MAX; + case QPaintDevice::PdmDepth: + return 32; + case QPaintDevice::PdmDpiX: + case QPaintDevice::PdmDpiY: + case QPaintDevice::PdmPhysicalDpiX: + case QPaintDevice::PdmPhysicalDpiY: + return 72; + case QPaintDevice::PdmDevicePixelRatio: + case QPaintDevice::PdmDevicePixelRatioScaled: + ; // fall through + } + return 0; + } + + MyPaintEngine *m_paintEngine; + }; +} + +void tst_QTextEdit::preeditCharFormat_data() +{ + QTest::addColumn<QList<QInputMethodEvent::Attribute> >("imeAttributes"); + QTest::addColumn<QStringList>("substrings"); + QTest::addColumn<QList<bool> >("boldnessList"); + QTest::addColumn<QList<bool> >("italicnessList"); + QTest::addColumn<QList<int> >("pointSizeList"); + + { + QList<QInputMethodEvent::Attribute> attributes; + { + QTextCharFormat tcf; + tcf.setFontPointSize(13); + tcf.setFontItalic(true); + attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, 1, 1, tcf)); + } + + { + QTextCharFormat tcf; + tcf.setFontPointSize(8); + tcf.setFontWeight(QFont::Normal); + attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, 4, 2, tcf)); + } + + QTest::newRow("Two formats, middle, in order") + << attributes + << (QStringList() << "P" << "r" << "eE" << "di" << "tText") + << (QList<bool>() << true << true << true << false << true) + << (QList<bool>() << false << true << false << false << false) + << (QList<int>() << 20 << 13 << 20 << 8 << 20); + } + + { + QList<QInputMethodEvent::Attribute> attributes; + { + QTextCharFormat tcf; + tcf.setFontPointSize(8); + tcf.setFontWeight(QFont::Normal); + attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, 4, 2, tcf)); + } + + { + QTextCharFormat tcf; + tcf.setFontPointSize(13); + tcf.setFontItalic(true); + attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, 1, 1, tcf)); + } + + QTest::newRow("Two formats, middle, out of order") + << attributes + << (QStringList() << "P" << "r" << "eE" << "di" << "tText") + << (QList<bool>() << true << true << true << false << true) + << (QList<bool>() << false << true << false << false << false) + << (QList<int>() << 20 << 13 << 20 << 8 << 20); + } + + { + QList<QInputMethodEvent::Attribute> attributes; + { + QTextCharFormat tcf; + tcf.setFontPointSize(13); + tcf.setFontItalic(true); + attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, 0, 1, tcf)); + } + + { + QTextCharFormat tcf; + tcf.setFontPointSize(8); + tcf.setFontWeight(QFont::Normal); + attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, 4, 2, tcf)); + } + + QTest::newRow("Two formats, front, in order") + << attributes + << (QStringList() << "P" << "reE" << "di" << "tText") + << (QList<bool>() << true << true << false << true) + << (QList<bool>() << true << false << false << false) + << (QList<int>() << 13 << 20 << 8 << 20); + } + + { + QList<QInputMethodEvent::Attribute> attributes; + { + QTextCharFormat tcf; + tcf.setFontPointSize(8); + tcf.setFontWeight(QFont::Normal); + attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, 4, 2, tcf)); + } + + { + QTextCharFormat tcf; + tcf.setFontPointSize(13); + tcf.setFontItalic(true); + attributes.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, 0, 1, tcf)); + } + + QTest::newRow("Two formats, front, out of order") + << attributes + << (QStringList() << "P" << "reE" << "di" << "tText") + << (QList<bool>() << true << true << false << true) + << (QList<bool>() << true << false << false << false) + << (QList<int>() << 13 << 20 << 8 << 20); + } +} + +void tst_QTextEdit::preeditCharFormat() +{ + QFETCH(QList<QInputMethodEvent::Attribute>, imeAttributes); + QFETCH(QStringList, substrings); + QFETCH(QList<bool>, boldnessList); + QFETCH(QList<bool>, italicnessList); + QFETCH(QList<int>, pointSizeList); + + QTextEdit *w = new QTextEdit; + w->show(); + QVERIFY(QTest::qWaitForWindowExposed(w)); + + // Set main char format + { + QTextCharFormat tcf; + tcf.setFontPointSize(20); + tcf.setFontWeight(QFont::Bold); + w->mergeCurrentCharFormat(tcf); + } + + QList<QInputMethodEvent::Attribute> attributes; + attributes.prepend(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, + w->textCursor().position(), + 0, + QVariant())); + + attributes += imeAttributes; + + QInputMethodEvent event("PreEditText", attributes); + QApplication::sendEvent(w, &event); + + MyPaintDevice device; + { + QPainter p(&device); + w->document()->drawContents(&p); + } + + QCOMPARE(device.m_paintEngine->itemFonts.size(), substrings.size()); + for (int i = 0; i < substrings.size(); ++i) + QCOMPARE(device.m_paintEngine->itemFonts.at(i).first, substrings.at(i)); + + for (int i = 0; i < substrings.size(); ++i) + QCOMPARE(device.m_paintEngine->itemFonts.at(i).second.bold(), boldnessList.at(i)); + + for (int i = 0; i < substrings.size(); ++i) + QCOMPARE(device.m_paintEngine->itemFonts.at(i).second.italic(), italicnessList.at(i)); + + for (int i = 0; i < substrings.size(); ++i) + QCOMPARE(device.m_paintEngine->itemFonts.at(i).second.pointSize(), pointSizeList.at(i)); + + delete w; +} + QTEST_MAIN(tst_QTextEdit) #include "tst_qtextedit.moc" diff --git a/tests/manual/diaglib/diaglib.pri b/tests/manual/diaglib/diaglib.pri index f240a73167..9f10167136 100644 --- a/tests/manual/diaglib/diaglib.pri +++ b/tests/manual/diaglib/diaglib.pri @@ -10,7 +10,7 @@ HEADERS += \ $$PWD/qwindowdump.h \ $$PWD/nativewindowdump.h -win32!winrt: { +win32:!winrt: { SOURCES += $$PWD/nativewindowdump_win.cpp LIBS *= -luser32 } else { diff --git a/tests/manual/diaglib/qwidgetdump.cpp b/tests/manual/diaglib/qwidgetdump.cpp index 10cfde510d..6c1e7d8f79 100644 --- a/tests/manual/diaglib/qwidgetdump.cpp +++ b/tests/manual/diaglib/qwidgetdump.cpp @@ -96,6 +96,12 @@ static void dumpWidgetRecursion(QTextStream &str, const QWidget *w, str << "windowState=" << hex << showbase << states << dec << noshowbase << ' '; formatRect(str, w->geometry()); if (w->isWindow()) { + str << ' ' << w->logicalDpiX() << "DPI"; +#if QT_VERSION > 0x050600 + const qreal dpr = w->devicePixelRatioF(); + if (!qFuzzyCompare(dpr, qreal(1))) + str << " dpr=" << dpr; +#endif // Qt 5.6 const QRect normalGeometry = w->normalGeometry(); if (normalGeometry.isValid() && !normalGeometry.isEmpty() && normalGeometry != w->geometry()) { str << " normal="; diff --git a/tests/manual/diaglib/qwindowdump.cpp b/tests/manual/diaglib/qwindowdump.cpp index 4adb1da5f1..0e613753ef 100644 --- a/tests/manual/diaglib/qwindowdump.cpp +++ b/tests/manual/diaglib/qwindowdump.cpp @@ -138,7 +138,7 @@ void formatWindow(QTextStream &str, const QWindow *w, FormatWindowOptions option str << " \"" << w->screen()->name() << "\" "; #if QT_VERSION >= 0x050600 if (QHighDpiScaling::isActive()) - str << "factor=" << QHighDpiScaling::factor(w) << ' '; + str << "factor=" << QHighDpiScaling::factor(w) << " dpr=" << w->devicePixelRatio(); #endif } if (!(options & DontPrintWindowFlags)) { @@ -161,7 +161,7 @@ static void dumpWindowRecursion(QTextStream &str, const QWindow *w, FormatWindowOptions options = 0, int depth = 0) { indentStream(str, 2 * depth); - formatWindow(str, w); + formatWindow(str, w, options); foreach (const QObject *co, w->children()) { if (co->isWindowType()) dumpWindowRecursion(str, static_cast<const QWindow *>(co), options, depth + 1); diff --git a/tests/tests.pro b/tests/tests.pro index 346102ab7b..a3ca94a94f 100644 --- a/tests/tests.pro +++ b/tests/tests.pro @@ -1,5 +1,7 @@ TEMPLATE = subdirs CONFIG += no_docs_target +requires(qtHaveModule(testlib)) + SUBDIRS = auto # benchmarks in debug mode is rarely sensible |