summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorTimur Pocheptsov <timur.pocheptsov@theqtcompany.com>2015-08-09 07:06:52 +0000
committerThe Qt Project <gerrit-noreply@qt-project.org>2015-08-09 07:06:52 +0000
commit5bfac9d653357c906946563b9494d7ae69cdad92 (patch)
tree0cc119af894a398497eba6f56fe2f224f6947616 /tests
parentf08e1ecdc88e9373a31c1505d5db7f905431c644 (diff)
parent77da617dc8e378a631ee8c15b1b414f16b87f147 (diff)
Merge "Merge remote-tracking branch 'origin/5.5' into dev" into refs/staging/dev
Diffstat (limited to 'tests')
-rwxr-xr-xtests/auto/android/runtests_androiddeployqt.pl2
-rw-r--r--tests/auto/corelib/io/qdebug/tst_qdebug.cpp49
-rw-r--r--tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp8
-rw-r--r--tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp11
-rw-r--r--tests/auto/corelib/io/qprocess/tst_qprocess.cpp38
-rw-r--r--tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp53
-rw-r--r--tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp18
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor.pro2
-rw-r--r--tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor/qdbusabstractadaptor.pro (renamed from tests/auto/dbus/qdbusabstractadaptor/test/test.pro)0
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface.pro2
-rw-r--r--tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface/qdbusabstractinterface.pro (renamed from tests/auto/dbus/qdbusabstractinterface/test/test.pro)0
-rw-r--r--tests/auto/dbus/qdbusinterface/qdbusinterface.pro2
-rw-r--r--tests/auto/dbus/qdbusinterface/qdbusinterface/qdbusinterface.pro (renamed from tests/auto/dbus/qdbusinterface/test/test.pro)0
-rw-r--r--tests/auto/dbus/qdbusmarshall/qdbusmarshall.pro2
-rw-r--r--tests/auto/dbus/qdbusmarshall/qdbusmarshall/qdbusmarshall.pro (renamed from tests/auto/dbus/qdbusmarshall/test/test.pro)0
-rw-r--r--tests/auto/gui/image/qimage/images/jpeg_exif_invalid_data_QTBUG-46870.jpgbin0 -> 14122 bytes
-rw-r--r--tests/auto/gui/image/qimage/tst_qimage.cpp8
-rw-r--r--tests/auto/gui/text/qfontcache/tst_qfontcache.cpp14
-rw-r--r--tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp76
-rw-r--r--tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp12
-rw-r--r--tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp8
-rw-r--r--tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.der.pubkeybin0 -> 442 bytes
-rw-r--r--tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem16
-rw-r--r--tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem.digest-md51
-rw-r--r--tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem.digest-sha11
-rw-r--r--tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem.pubkey12
-rw-r--r--tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.der.pubkeybin0 -> 120 bytes
-rw-r--r--tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem11
-rw-r--r--tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem.digest-md51
-rw-r--r--tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem.digest-sha11
-rw-r--r--tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem.pubkey5
-rwxr-xr-xtests/auto/network/ssl/qsslcertificate/certificates/gencertificates.sh46
-rw-r--r--tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp14
-rw-r--r--tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp2
-rw-r--r--tests/auto/testlib/selftests/expected_badxml.lightxml2
-rw-r--r--tests/auto/testlib/selftests/expected_badxml.xml2
-rw-r--r--tests/auto/testlib/selftests/expected_badxml.xunitxml4
-rw-r--r--tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp9
-rw-r--r--tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp5
39 files changed, 369 insertions, 68 deletions
diff --git a/tests/auto/android/runtests_androiddeployqt.pl b/tests/auto/android/runtests_androiddeployqt.pl
index 3e62e8614a..a73ea054b3 100755
--- a/tests/auto/android/runtests_androiddeployqt.pl
+++ b/tests/auto/android/runtests_androiddeployqt.pl
@@ -390,7 +390,7 @@ sub startTest
system("$adb_tool $device_serial pull /data/data/$packageName/output.txt $output_dir/$output_file.txt") if ($get_txt);
if ($get_txt){
- print "Tesresults for $packageName:\n";
+ print "Test results for $packageName:\n";
my $insig =
print_output("$output_dir/$output_file.txt", $packageName, $insignificance);
}
diff --git a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp
index 1b7d410beb..db2805ebf0 100644
--- a/tests/auto/corelib/io/qdebug/tst_qdebug.cpp
+++ b/tests/auto/corelib/io/qdebug/tst_qdebug.cpp
@@ -411,18 +411,48 @@ void tst_QDebug::qDebugQString() const
qDebug().noquote().nospace() << qSetFieldWidth(8) << string;
QCOMPARE(s_msg, " " + string);
- string = QLatin1String("\nSm\xF8rg\xE5sbord\\");
+ string = "Sm\xc3\xb8rg\xc3\xa5sbord " // Latin script
+ "\xce\x91\xce\xb8\xce\xae\xce\xbd\xce\xb1 " // Greek script
+ "\xd0\x9c\xd0\xbe\xd1\x81\xd0\xba\xd0\xb2\xd0\xb0"; // Cyrillic script
qDebug().noquote().nospace() << string;
QCOMPARE(s_msg, string);
+ // This string only contains printable characters
qDebug() << string;
- QCOMPARE(s_msg, QString("\"\\nSm\\u00F8rg\\u00E5sbord\\\\\""));
+ QCOMPARE(s_msg, '"' + string + '"');
+
+ string = "\n\t\\\"";
+ qDebug().noquote().nospace() << string;
+ QCOMPARE(s_msg, string);
+
+ // This string only contains characters that must be escaped
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\n\\t\\\\\\\"\""));
- // surrogate pairs (including broken pairings)
- ushort utf16[] = { 0xDC00, 0xD800, 0xDC00, 'x', 0xD800, 0xDC00, 0xD800, 0 };
+ // Unicode escapes, BMP
+ string = "\1" // U+0001: START OF HEADING (category Cc)
+ "\x7f" // U+007F: DELETE (category Cc)
+ "\xc2\xad" // U+00AD: SOFT HYPHEN (category Cf)
+ "\xef\xbb\xbf"; // U+FEFF: ZERO WIDTH NO-BREAK SPACE / BOM (category Cf)
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\u0001\\u007F\\u00AD\\uFEFF\""));
+
+ // Unicode printable non-BMP
+ string = "\xf0\x90\x80\x80"; // U+10000: LINEAR B SYLLABLE B008 A (category Lo)
+ qDebug() << string;
+ QCOMPARE(s_msg, '"' + string + '"');
+
+ // non-BMP and non-printable
+ string = "\xf3\xa0\x80\x81 " // U+E0001: LANGUAGE TAG (category Cf)
+ "\xf4\x80\x80\x80"; // U+100000: Plane 16 Private Use (category Co)
+ qDebug() << string;
+ QCOMPARE(s_msg, QString("\"\\U000E0001 \\U00100000\""));
+
+ // broken surrogate pairs
+ ushort utf16[] = { 0xDC00, 0xD800, 'x', 0xD800, 0 };
string = QString::fromUtf16(utf16);
qDebug() << string;
- QCOMPARE(s_msg, QString("\"\\uDC00\\U00010000x\\U00010000\\uD800\""));
+ QCOMPARE(s_msg, QString("\"\\uDC00\\uD800x\\uD800\""));
}
void tst_QDebug::qDebugQStringRef() const
@@ -657,5 +687,14 @@ void tst_QDebug::threadSafety() const
}
}
+// Should compile: instentiation of unrelated operator<< should not cause cause compilation
+// error in QDebug operators (QTBUG-47375)
+class TestClassA {};
+class TestClassB {};
+
+template <typename T>
+TestClassA& operator<< (TestClassA& s, T&) { return s; };
+template<> TestClassA& operator<< <TestClassB>(TestClassA& s, TestClassB& l);
+
QTEST_MAIN(tst_QDebug);
#include "tst_qdebug.moc"
diff --git a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
index bbee33ac78..8d276b3616 100644
--- a/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
+++ b/tests/auto/corelib/io/qfileinfo/tst_qfileinfo.cpp
@@ -144,12 +144,18 @@ inline bool qIsLikelyToBeNfs(int /* handle */)
#endif
#endif
+static QString seedAndTemplate()
+{
+ qsrand(QDateTime::currentDateTimeUtc().toTime_t());
+ return QDir::tempPath() + "/tst_qfileinfo-XXXXXX";
+}
class tst_QFileInfo : public QObject
{
Q_OBJECT
public:
- tst_QFileInfo() : m_currentDir(QDir::currentPath()) {}
+ tst_QFileInfo() : m_currentDir(QDir::currentPath()), m_dir(seedAndTemplate())
+ {}
private slots:
void initTestCase();
diff --git a/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp b/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp
index deef9eecbf..0f2cfd406d 100644
--- a/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp
+++ b/tests/auto/corelib/io/qloggingcategory/tst_qloggingcategory.cpp
@@ -376,6 +376,7 @@ private slots:
#ifdef Q_COMPILER_VARIADIC_MACROS
Q_LOGGING_CATEGORY(TST_MACRO_2, "tst.macro.2", QtDebugMsg)
Q_LOGGING_CATEGORY(TST_MACRO_3, "tst.macro.3", QtFatalMsg)
+ Q_LOGGING_CATEGORY(TST_MACRO_4, "tst.macro.4", QtInfoMsg)
#endif
void QLoggingCategoryMacro()
@@ -383,6 +384,7 @@ private slots:
const QLoggingCategory &cat1 = TST_MACRO_1();
QCOMPARE(cat1.categoryName(), "tst.macro.1");
QCOMPARE(cat1.isDebugEnabled(), true);
+ QCOMPARE(cat1.isInfoEnabled(), true);
QCOMPARE(cat1.isWarningEnabled(), true);
QCOMPARE(cat1.isCriticalEnabled(), true);
@@ -390,14 +392,23 @@ private slots:
const QLoggingCategory &cat2 = TST_MACRO_2();
QCOMPARE(cat2.categoryName(), "tst.macro.2");
QCOMPARE(cat2.isDebugEnabled(), true);
+ QCOMPARE(cat2.isInfoEnabled(), true);
QCOMPARE(cat2.isWarningEnabled(), true);
QCOMPARE(cat2.isCriticalEnabled(), true);
const QLoggingCategory &cat3 = TST_MACRO_3();
QCOMPARE(cat3.categoryName(), "tst.macro.3");
QCOMPARE(cat3.isDebugEnabled(), false);
+ QCOMPARE(cat3.isInfoEnabled(), false);
QCOMPARE(cat3.isWarningEnabled(), false);
QCOMPARE(cat3.isCriticalEnabled(), false);
+
+ const QLoggingCategory &cat4 = TST_MACRO_4();
+ QCOMPARE(cat4.categoryName(), "tst.macro.4");
+ QCOMPARE(cat4.isDebugEnabled(), false);
+ QCOMPARE(cat4.isInfoEnabled(), true);
+ QCOMPARE(cat4.isWarningEnabled(), true);
+ QCOMPARE(cat4.isCriticalEnabled(), true);
#endif
}
diff --git a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
index 02501ca9d9..0ffac21186 100644
--- a/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
+++ b/tests/auto/corelib/io/qprocess/tst_qprocess.cpp
@@ -155,6 +155,8 @@ private slots:
void failToStart();
void failToStartWithWait();
void failToStartWithEventLoop();
+ void failToStartEmptyArgs_data();
+ void failToStartEmptyArgs();
protected slots:
void readFromProcess();
@@ -1690,6 +1692,42 @@ void tst_QProcess::failToStartWithEventLoop()
}
}
+void tst_QProcess::failToStartEmptyArgs_data()
+{
+ QTest::addColumn<int>("startOverload");
+ QTest::newRow("start(QString, QStringList, OpenMode)") << 0;
+ QTest::newRow("start(QString, OpenMode)") << 1;
+ QTest::newRow("start(OpenMode)") << 2;
+}
+
+void tst_QProcess::failToStartEmptyArgs()
+{
+ QFETCH(int, startOverload);
+ qRegisterMetaType<QProcess::ProcessError>("QProcess::ProcessError");
+
+ QProcess process;
+ QSignalSpy errorSpy(&process, static_cast<void (QProcess::*)(QProcess::ProcessError)>(&QProcess::error));
+ QVERIFY(errorSpy.isValid());
+
+ switch (startOverload) {
+ case 0:
+ process.start(QString(), QStringList(), QIODevice::ReadWrite);
+ break;
+ case 1:
+ process.start(QString(), QIODevice::ReadWrite);
+ break;
+ case 2:
+ process.start(QIODevice::ReadWrite);
+ break;
+ default:
+ QFAIL("Unhandled QProcess::start overload.");
+ };
+
+ QVERIFY(!process.waitForStarted());
+ QCOMPARE(errorSpy.count(), 1);
+ QCOMPARE(process.error(), QProcess::FailedToStart);
+}
+
//-----------------------------------------------------------------------------
#ifndef Q_OS_WINCE
// Reading and writing to a process is not supported on Qt/CE
diff --git a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
index 7c32f2cc12..12abaf47c5 100644
--- a/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
+++ b/tests/auto/corelib/mimetypes/qmimedatabase/tst_qmimedatabase.cpp
@@ -73,10 +73,45 @@ static inline QString testSuiteWarning()
return result;
}
+static bool copyResourceFile(const QString &sourceFileName, const QString &targetFileName,
+ QString *errorMessage)
+{
+
+ QFile sourceFile(sourceFileName);
+ if (!sourceFile.exists()) {
+ *errorMessage = QDir::toNativeSeparators(sourceFileName) + QLatin1String(" does not exist.");
+ return false;
+ }
+ if (!sourceFile.copy(targetFileName)) {
+ *errorMessage = QLatin1String("Cannot copy ")
+ + QDir::toNativeSeparators(sourceFileName) + QLatin1String(" to ")
+ + QDir::toNativeSeparators(targetFileName) + QLatin1String(": ")
+ + sourceFile.errorString();
+ return false;
+ }
+ // QFile::copy() sets the permissions of the source file which are read-only for
+ // resource files. Set write permission to enable deletion of the temporary directory.
+ QFile targetFile(targetFileName);
+ if (!targetFile.setPermissions(targetFile.permissions() | QFileDevice::WriteUser)) {
+ *errorMessage = QLatin1String("Cannot set write permission on ")
+ + QDir::toNativeSeparators(targetFileName) + QLatin1String(": ")
+ + targetFile.errorString();
+ return false;
+ }
+ return true;
+}
+
// Set LANG before QCoreApplication is created
Q_CONSTRUCTOR_FUNCTION(initializeLang)
+static QString seedAndTemplate()
+{
+ qsrand(QDateTime::currentDateTimeUtc().toTime_t());
+ return QDir::tempPath() + "/tst_qmimedatabase-XXXXXX";
+}
+
tst_QMimeDatabase::tst_QMimeDatabase()
+ : m_temporaryDir(seedAndTemplate())
{
}
@@ -103,15 +138,15 @@ void tst_QMimeDatabase::initTestCase()
const QString freeDesktopXml = QStringLiteral("freedesktop.org.xml");
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));
+ const QString xmlTargetFileName = globalPackageDir + QLatin1Char('/') + freeDesktopXml;
+ QString errorMessage;
+ QVERIFY2(copyResourceFile(xmlFileName, xmlTargetFileName, &errorMessage), qPrintable(errorMessage));
m_testSuite = QFINDTESTDATA("testfiles");
if (m_testSuite.isEmpty())
qWarning("%s", qPrintable(testSuiteWarning()));
- const QString errorMessage = QString::fromLatin1("Cannot find '%1'");
+ errorMessage = QString::fromLatin1("Cannot find '%1'");
m_yastMimeTypes = QLatin1String(RESOURCE_PREFIX) + yastFileName;
QVERIFY2(QFile::exists(m_yastMimeTypes), qPrintable(errorMessage.arg(yastFileName)));
m_qmlAgainFileName = QLatin1String(RESOURCE_PREFIX) + qmlAgainFileName;
@@ -836,8 +871,9 @@ void tst_QMimeDatabase::installNewGlobalMimeType()
if (!QFileInfo(destDir).isDir())
QVERIFY(QDir(m_globalXdgDir).mkpath(destDir));
- QVERIFY(QFile::copy(m_yastMimeTypes, destFile));
- QVERIFY(QFile::copy(m_qmlAgainFileName, destQmlFile));
+ QString errorMessage;
+ QVERIFY2(copyResourceFile(m_yastMimeTypes, destFile, &errorMessage), qPrintable(errorMessage));
+ QVERIFY2(copyResourceFile(m_qmlAgainFileName, destQmlFile, &errorMessage), qPrintable(errorMessage));
if (!waitAndRunUpdateMimeDatabase(mimeDir))
QSKIP("shared-mime-info not found, skipping mime.cache test");
@@ -882,8 +918,9 @@ void tst_QMimeDatabase::installNewLocalMimeType()
QFile::remove(destFile);
const QString destQmlFile = destDir + QLatin1String(qmlAgainFileName);
QFile::remove(destQmlFile);
- QVERIFY(QFile::copy(m_yastMimeTypes, destFile));
- QVERIFY(QFile::copy(m_qmlAgainFileName, destQmlFile));
+ QString errorMessage;
+ QVERIFY2(copyResourceFile(m_yastMimeTypes, destFile, &errorMessage), qPrintable(errorMessage));
+ QVERIFY2(copyResourceFile(m_qmlAgainFileName, destQmlFile, &errorMessage), qPrintable(errorMessage));
if (!runUpdateMimeDatabase(mimeDir)) {
const QString skipWarning = QStringLiteral("shared-mime-info not found, skipping mime.cache test (")
+ QDir::toNativeSeparators(mimeDir) + QLatin1Char(')');
diff --git a/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp b/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp
index 2af37eb86e..b511abf670 100644
--- a/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp
+++ b/tests/auto/corelib/tools/qtimezone/tst_qtimezone.cpp
@@ -823,6 +823,24 @@ void tst_QTimeZone::tzTest()
QCOMPARE(dat.offsetFromUtc, 3600);
QCOMPARE(dat.standardTimeOffset, 3600);
QCOMPARE(dat.daylightTimeOffset, 0);
+
+ // Test TZ timezone vs UTC timezone for fractionary negative offset
+ QTzTimeZonePrivate tztz1("America/Caracas");
+ QUtcTimeZonePrivate tzutc1("UTC-04:30");
+ QVERIFY(tztz1.isValid());
+ QVERIFY(tzutc1.isValid());
+ QTzTimeZonePrivate::Data datatz1 = tztz1.data(std);
+ QTzTimeZonePrivate::Data datautc1 = tzutc1.data(std);
+ QCOMPARE(datatz1.offsetFromUtc, datautc1.offsetFromUtc);
+
+ // Test TZ timezone vs UTC timezone for fractionary positive offset
+ QTzTimeZonePrivate tztz2("Asia/Calcutta");
+ QUtcTimeZonePrivate tzutc2("UTC+05:30");
+ QVERIFY(tztz2.isValid());
+ QVERIFY(tzutc2.isValid());
+ QTzTimeZonePrivate::Data datatz2 = tztz2.data(std);
+ QTzTimeZonePrivate::Data datautc2 = tzutc2.data(std);
+ QCOMPARE(datatz2.offsetFromUtc, datautc2.offsetFromUtc);
#endif // Q_OS_UNIX
}
diff --git a/tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor.pro b/tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor.pro
index d67d81e4bf..1b35019f94 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor.pro
+++ b/tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor.pro
@@ -3,4 +3,4 @@ TARGET = tst_qdbusabstractadaptor
QT = core core-private testlib
TEMPLATE = subdirs
CONFIG += ordered
-SUBDIRS = qmyserver test
+SUBDIRS = qmyserver qdbusabstractadaptor
diff --git a/tests/auto/dbus/qdbusabstractadaptor/test/test.pro b/tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor/qdbusabstractadaptor.pro
index d95fa941f0..d95fa941f0 100644
--- a/tests/auto/dbus/qdbusabstractadaptor/test/test.pro
+++ b/tests/auto/dbus/qdbusabstractadaptor/qdbusabstractadaptor/qdbusabstractadaptor.pro
diff --git a/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface.pro b/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface.pro
index 623b07fcbd..99462b1b36 100644
--- a/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface.pro
+++ b/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface.pro
@@ -2,5 +2,5 @@ CONFIG += testcase
TARGET = tst_qdbusabstractinterface
TEMPLATE = subdirs
CONFIG += ordered
-SUBDIRS = qpinger test
+SUBDIRS = qpinger qdbusabstractinterface
OTHER_FILES += org.qtproject.QtDBus.Pinger.xml
diff --git a/tests/auto/dbus/qdbusabstractinterface/test/test.pro b/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface/qdbusabstractinterface.pro
index a8cc4c2b38..a8cc4c2b38 100644
--- a/tests/auto/dbus/qdbusabstractinterface/test/test.pro
+++ b/tests/auto/dbus/qdbusabstractinterface/qdbusabstractinterface/qdbusabstractinterface.pro
diff --git a/tests/auto/dbus/qdbusinterface/qdbusinterface.pro b/tests/auto/dbus/qdbusinterface/qdbusinterface.pro
index 093a888765..c8861cb2a4 100644
--- a/tests/auto/dbus/qdbusinterface/qdbusinterface.pro
+++ b/tests/auto/dbus/qdbusinterface/qdbusinterface.pro
@@ -3,4 +3,4 @@ TARGET = tst_qdbusinterface
QT = core testlib
TEMPLATE = subdirs
CONFIG += ordered
-SUBDIRS = qmyserver test
+SUBDIRS = qmyserver qdbusinterface
diff --git a/tests/auto/dbus/qdbusinterface/test/test.pro b/tests/auto/dbus/qdbusinterface/qdbusinterface/qdbusinterface.pro
index 170b555ee7..170b555ee7 100644
--- a/tests/auto/dbus/qdbusinterface/test/test.pro
+++ b/tests/auto/dbus/qdbusinterface/qdbusinterface/qdbusinterface.pro
diff --git a/tests/auto/dbus/qdbusmarshall/qdbusmarshall.pro b/tests/auto/dbus/qdbusmarshall/qdbusmarshall.pro
index dfbb206324..e9a41c0fb4 100644
--- a/tests/auto/dbus/qdbusmarshall/qdbusmarshall.pro
+++ b/tests/auto/dbus/qdbusmarshall/qdbusmarshall.pro
@@ -2,7 +2,7 @@ CONFIG += testcase
TARGET = tst_qdbusmarshall
TEMPLATE = subdirs
CONFIG += ordered
-SUBDIRS = qpong test
+SUBDIRS = qpong qdbusmarshall
QT = core-private testlib
diff --git a/tests/auto/dbus/qdbusmarshall/test/test.pro b/tests/auto/dbus/qdbusmarshall/qdbusmarshall/qdbusmarshall.pro
index b0656231d2..b0656231d2 100644
--- a/tests/auto/dbus/qdbusmarshall/test/test.pro
+++ b/tests/auto/dbus/qdbusmarshall/qdbusmarshall/qdbusmarshall.pro
diff --git a/tests/auto/gui/image/qimage/images/jpeg_exif_invalid_data_QTBUG-46870.jpg b/tests/auto/gui/image/qimage/images/jpeg_exif_invalid_data_QTBUG-46870.jpg
new file mode 100644
index 0000000000..a51a1e3162
--- /dev/null
+++ b/tests/auto/gui/image/qimage/images/jpeg_exif_invalid_data_QTBUG-46870.jpg
Binary files differ
diff --git a/tests/auto/gui/image/qimage/tst_qimage.cpp b/tests/auto/gui/image/qimage/tst_qimage.cpp
index c1b32a273c..08f48abd20 100644
--- a/tests/auto/gui/image/qimage/tst_qimage.cpp
+++ b/tests/auto/gui/image/qimage/tst_qimage.cpp
@@ -185,6 +185,7 @@ private slots:
void exifOrientation();
void exif_QTBUG45865();
+ void exif_invalid_data_QTBUG46870();
void cleanupFunctions();
@@ -2872,6 +2873,13 @@ void tst_QImage::exif_QTBUG45865()
QCOMPARE(image.size(), QSize(5, 8));
}
+void tst_QImage::exif_invalid_data_QTBUG46870()
+{
+ QImage image;
+ QVERIFY(image.load(m_prefix + "jpeg_exif_invalid_data_QTBUG-46870.jpg"));
+ QVERIFY(!image.isNull());
+}
+
static void cleanupFunction(void* info)
{
bool *called = static_cast<bool*>(info);
diff --git a/tests/auto/gui/text/qfontcache/tst_qfontcache.cpp b/tests/auto/gui/text/qfontcache/tst_qfontcache.cpp
index 0658d99fb2..272827e57b 100644
--- a/tests/auto/gui/text/qfontcache/tst_qfontcache.cpp
+++ b/tests/auto/gui/text/qfontcache/tst_qfontcache.cpp
@@ -51,15 +51,15 @@ private slots:
void clear();
};
-QT_BEGIN_NAMESPACE
-extern void qt_setQtEnableTestFont(bool value); // qfontdatabase.cpp
-
#ifdef QT_BUILD_INTERNAL
+QT_BEGIN_NAMESPACE
+// qfontdatabase.cpp
+Q_AUTOTEST_EXPORT void qt_setQtEnableTestFont(bool value);
// qfontengine.cpp
-extern void QFontEngine_startCollectingEngines();
-extern QList<QFontEngine *> QFontEngine_stopCollectingEngines();
-#endif
+Q_AUTOTEST_EXPORT void QFontEngine_startCollectingEngines();
+Q_AUTOTEST_EXPORT QList<QFontEngine *> QFontEngine_stopCollectingEngines();
QT_END_NAMESPACE
+#endif
tst_QFontCache::tst_QFontCache()
{
@@ -79,6 +79,7 @@ void tst_QFontCache::clear()
QFontEngine *fontEngine = 0;
+#ifdef QT_BUILD_INTERNAL
{
// we're never caching the box (and the "test") font engines
// let's ensure we're not leaking them as well as the cached ones
@@ -88,6 +89,7 @@ void tst_QFontCache::clear()
f.setFamily("__Qt__Box__Engine__");
f.exactMatch(); // loads engine
}
+#endif
{
QFontDatabase db;
diff --git a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
index b19f90935b..18da61925d 100644
--- a/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
+++ b/tests/auto/gui/text/qtextlayout/tst_qtextlayout.cpp
@@ -68,6 +68,7 @@ public slots:
private slots:
void getSetCheck();
void lineBreaking();
+#ifdef QT_BUILD_INTERNAL
void simpleBoundingRect();
void threeLineBoundingRect();
void boundingRectWithLongLineAndNoWrap();
@@ -83,16 +84,20 @@ private slots:
void horizontalAlignment();
void horizontalAlignmentMultiline_data();
void horizontalAlignmentMultiline();
+#endif
void defaultWordSeparators_data();
void defaultWordSeparators();
void cursorMovementFromInvalidPositions();
void cursorMovementInsideSpaces();
void charWordStopOnLineSeparator();
+#ifdef QT_BUILD_INTERNAL
void xToCursorAtEndOfLine();
+#endif
void boundingRectTopLeft();
void graphemeBoundaryForSurrogatePairs();
void tabStops();
void integerOverflow();
+#ifdef QT_BUILD_INTERNAL
void testDefaultTabs();
void testTabs();
void testMultilineTab();
@@ -103,6 +108,7 @@ private slots:
void testMultiTab();
void testTabDPIScale();
void tabsForRtl();
+#endif
void tabHeight();
void capitalization_allUpperCase();
void capitalization_allUpperCase_newline();
@@ -119,12 +125,14 @@ private slots:
void layoutWithCustomTabStops();
// QTextLine stuff
+#ifdef QT_BUILD_INTERNAL
void setNumColumnsWrapAtWordBoundaryOrAnywhere();
void setNumColumnsWordWrap();
void smallTextLengthNoWrap();
void smallTextLengthWordWrap();
void smallTextLengthWrapAtWordBoundaryOrAnywhere();
void testLineBreakingAllSpaces();
+#endif
void lineWidthFromBOM();
void textWidthVsWIdth();
void textWithSurrogates_qtbug15679();
@@ -143,7 +151,7 @@ private:
void tst_QTextLayout::getSetCheck()
{
QString str("Bogus text");
- QTextLayout layout(str, testFont);
+ QTextLayout layout(str);
layout.beginLayout();
QTextEngine *engine = layout.engine();
QTextInlineObject obj1(0, engine);
@@ -177,13 +185,18 @@ void tst_QTextLayout::getSetCheck()
QCOMPARE(true, obj2.cacheEnabled());
}
+#ifdef QT_BUILD_INTERNAL
QT_BEGIN_NAMESPACE
-extern void qt_setQtEnableTestFont(bool value);
+// qfontdatabase.cpp
+Q_AUTOTEST_EXPORT void qt_setQtEnableTestFont(bool value);
QT_END_NAMESPACE
+#endif
tst_QTextLayout::tst_QTextLayout()
{
+#ifdef QT_BUILD_INTERNAL
qt_setQtEnableTestFont(true);
+#endif
}
tst_QTextLayout::~tst_QTextLayout()
@@ -193,10 +206,14 @@ tst_QTextLayout::~tst_QTextLayout()
void tst_QTextLayout::init()
{
testFont = QFont();
+#ifdef QT_BUILD_INTERNAL
testFont.setFamily("__Qt__Box__Engine__");
+#endif
testFont.setPixelSize(TESTFONT_SIZE);
testFont.setWeight(QFont::Normal);
+#ifdef QT_BUILD_INTERNAL
QCOMPARE(QFontMetrics(testFont).width('a'), testFont.pixelSize());
+#endif
}
void tst_QTextLayout::cleanup()
@@ -286,6 +303,7 @@ void tst_QTextLayout::lineBreaking()
#endif
}
+#ifdef QT_BUILD_INTERNAL
void tst_QTextLayout::simpleBoundingRect()
{
/* just check if boundingRect() gives sane values. The text is not broken. */
@@ -972,6 +990,7 @@ void tst_QTextLayout::horizontalAlignmentMultiline()
QCOMPARE(rect.left(), lastLeft);
QCOMPARE(rect.right(), lastRight);
}
+#endif
void tst_QTextLayout::defaultWordSeparators_data()
{
@@ -1009,7 +1028,7 @@ void tst_QTextLayout::defaultWordSeparators()
QFETCH(QString, text);
QFETCH(int, startPos);
QFETCH(int, endPos);
- QTextLayout layout(text, testFont);
+ QTextLayout layout(text);
QCOMPARE(layout.nextCursorPosition(startPos, QTextLayout::SkipWords), endPos);
QCOMPARE(layout.previousCursorPosition(endPos, QTextLayout::SkipWords), startPos);
@@ -1019,7 +1038,7 @@ void tst_QTextLayout::cursorMovementFromInvalidPositions()
{
int badpos = 10000;
- QTextLayout layout("ABC", testFont);
+ QTextLayout layout("ABC");
QCOMPARE(layout.previousCursorPosition(-badpos, QTextLayout::SkipCharacters), -badpos);
QCOMPARE(layout.nextCursorPosition(-badpos, QTextLayout::SkipCharacters), -badpos);
@@ -1030,13 +1049,13 @@ void tst_QTextLayout::cursorMovementFromInvalidPositions()
void tst_QTextLayout::cursorMovementInsideSpaces()
{
- QTextLayout layout("ABC DEF", testFont);
+ QTextLayout layout("ABC DEF");
QCOMPARE(layout.previousCursorPosition(6, QTextLayout::SkipWords), 0);
QCOMPARE(layout.nextCursorPosition(6, QTextLayout::SkipWords), 15);
- QTextLayout layout2("ABC\t\t\t\t\t\t\t\t\t\t\t\tDEF", testFont);
+ QTextLayout layout2("ABC\t\t\t\t\t\t\t\t\t\t\t\tDEF");
QCOMPARE(layout2.previousCursorPosition(6, QTextLayout::SkipWords), 0);
QCOMPARE(layout2.nextCursorPosition(6, QTextLayout::SkipWords), 15);
@@ -1048,13 +1067,14 @@ void tst_QTextLayout::charWordStopOnLineSeparator()
QString txt;
txt.append(lineSeparator);
txt.append(lineSeparator);
- QTextLayout layout(txt, testFont);
+ QTextLayout layout(txt);
QTextEngine *engine = layout.engine();
const QCharAttributes *attrs = engine->attributes();
QVERIFY(attrs);
QVERIFY(attrs[1].graphemeBoundary);
}
+#ifdef QT_BUILD_INTERNAL
void tst_QTextLayout::xToCursorAtEndOfLine()
{
QString text = "FirstLine SecondLine";
@@ -1078,13 +1098,14 @@ void tst_QTextLayout::xToCursorAtEndOfLine()
line = layout.lineAt(1);
QCOMPARE(line.xToCursor(100000), 20);
}
+#endif
void tst_QTextLayout::boundingRectTopLeft()
{
QString text = "FirstLine\nSecondLine";
text.replace('\n', QChar::LineSeparator);
- QTextLayout layout(text, testFont);
+ QTextLayout layout(text);
layout.setCacheEnabled(true);
layout.beginLayout();
@@ -1106,7 +1127,7 @@ void tst_QTextLayout::graphemeBoundaryForSurrogatePairs()
txt.append(0xd87e);
txt.append(0xdc25);
txt.append("b");
- QTextLayout layout(txt, testFont);
+ QTextLayout layout(txt);
QTextEngine *engine = layout.engine();
const QCharAttributes *attrs = engine->attributes();
QVERIFY(attrs);
@@ -1119,13 +1140,13 @@ void tst_QTextLayout::graphemeBoundaryForSurrogatePairs()
void tst_QTextLayout::tabStops()
{
QString txt("Hello there\tworld");
- QTextLayout layout(txt, testFont);
+ QTextLayout layout(txt);
layout.beginLayout();
QTextLine line = layout.createLine();
QVERIFY(line.isValid());
line.setNumColumns(11);
- QCOMPARE(line.textLength(), TESTFONT_SIZE);
+ QCOMPARE(line.textLength(), 12);
line = layout.createLine();
QVERIFY(line.isValid());
@@ -1142,7 +1163,7 @@ void tst_QTextLayout::integerOverflow()
for (int i = 0; i < 8; ++i)
txt += txt;
- QTextLayout layout(txt, testFont);
+ QTextLayout layout(txt);
layout.beginLayout();
QTextLine line = layout.createLine();
@@ -1155,6 +1176,7 @@ void tst_QTextLayout::integerOverflow()
layout.endLayout();
}
+#ifdef QT_BUILD_INTERNAL
void tst_QTextLayout::setNumColumnsWrapAtWordBoundaryOrAnywhere()
{
QString txt("This is a small test text");
@@ -1696,22 +1718,23 @@ void tst_QTextLayout::testTabDPIScale()
QCOMPARE(line.cursorToX(12), tabs.at(1).position * scale - TESTFONT_SIZE * 5);
QCOMPARE(line.cursorToX(18), tabs.at(2).position * scale - TESTFONT_SIZE * 3 / 2.0);
}
+#endif
void tst_QTextLayout::tabHeight()
{
- QTextLayout layout("\t", testFont);
+ QTextLayout layout("\t");
layout.setCacheEnabled(true);
layout.beginLayout();
QTextLine line = layout.createLine();
layout.endLayout();
- QCOMPARE(qRound(line.ascent()), QFontMetrics(testFont).ascent());
- QCOMPARE(qRound(line.descent()), QFontMetrics(testFont).descent());
+ QCOMPARE(qRound(line.ascent()), QFontMetrics(layout.font()).ascent());
+ QCOMPARE(qRound(line.descent()), QFontMetrics(layout.font()).descent());
}
void tst_QTextLayout::capitalization_allUpperCase()
{
- QFont font(testFont);
+ QFont font;
font.setCapitalization(QFont::AllUppercase);
QTextLayout layout("Test", font);
layout.setCacheEnabled(true);
@@ -1727,7 +1750,7 @@ void tst_QTextLayout::capitalization_allUpperCase()
void tst_QTextLayout::capitalization_allUpperCase_newline()
{
- QFont font(testFont);
+ QFont font;
font.setCapitalization(QFont::AllUppercase);
QString tmp = "hello\nworld!";
@@ -1749,7 +1772,7 @@ void tst_QTextLayout::capitalization_allUpperCase_newline()
void tst_QTextLayout::capitalization_allLowerCase()
{
- QFont font(testFont);
+ QFont font;
font.setCapitalization(QFont::AllLowercase);
QTextLayout layout("Test", font);
layout.setCacheEnabled(true);
@@ -1765,7 +1788,7 @@ void tst_QTextLayout::capitalization_allLowerCase()
void tst_QTextLayout::capitalization_smallCaps()
{
- QFont font(testFont);
+ QFont font;
font.setCapitalization(QFont::SmallCaps);
QTextLayout layout("Test", font);
layout.setCacheEnabled(true);
@@ -1782,7 +1805,7 @@ void tst_QTextLayout::capitalization_smallCaps()
void tst_QTextLayout::capitalization_capitalize()
{
- QFont font(testFont);
+ QFont font;
font.setCapitalization(QFont::Capitalize);
QTextLayout layout("hello\tworld", font);
layout.setCacheEnabled(true);
@@ -1805,7 +1828,7 @@ void tst_QTextLayout::longText()
QString longText(128000, 'a');
{
- QTextLayout layout(longText, testFont);
+ QTextLayout layout(longText);
layout.setCacheEnabled(true);
layout.beginLayout();
QTextLine line = layout.createLine();
@@ -1815,7 +1838,7 @@ void tst_QTextLayout::longText()
}
for (int cap = QFont::MixedCase; cap < QFont::Capitalize + 1; ++cap) {
- QFont f(testFont);
+ QFont f;
f.setCapitalization(QFont::Capitalization(cap));
QTextLayout layout(longText, f);
layout.setCacheEnabled(true);
@@ -1827,7 +1850,7 @@ void tst_QTextLayout::longText()
}
{
- QTextLayout layout(longText, testFont);
+ QTextLayout layout(longText);
layout.setCacheEnabled(true);
layout.setFlags(Qt::TextForceLeftToRight);
layout.beginLayout();
@@ -1838,7 +1861,7 @@ void tst_QTextLayout::longText()
}
{
- QTextLayout layout(longText, testFont);
+ QTextLayout layout(longText);
layout.setCacheEnabled(true);
layout.setFlags(Qt::TextForceRightToLeft);
layout.beginLayout();
@@ -1851,7 +1874,8 @@ void tst_QTextLayout::longText()
void tst_QTextLayout::widthOfTabs()
{
- QTextEngine engine("ddd\t\t", testFont);
+ QTextEngine engine;
+ engine.text = "ddd\t\t";
engine.ignoreBidi = true;
engine.itemize();
QCOMPARE(qRound(engine.width(0, 5)), qRound(engine.boundingBox(0, 5).width));
@@ -2079,7 +2103,7 @@ void tst_QTextLayout::cursorInNonStopChars()
void tst_QTextLayout::justifyTrailingSpaces()
{
- QTextLayout layout(QStringLiteral(" t"), testFont);
+ QTextLayout layout(QStringLiteral(" t"));
layout.setTextOption(QTextOption(Qt::AlignJustify));
layout.beginLayout();
diff --git a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
index 5a685037a1..4d41d4beb1 100644
--- a/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
+++ b/tests/auto/network/access/qnetworkreply/tst_qnetworkreply.cpp
@@ -88,6 +88,14 @@ Q_DECLARE_METATYPE(QSharedPointer<char>)
#include "../../../network-settings.h"
+// Non-OpenSSL backends are not able to report a specific error code
+// for self-signed certificates.
+#ifndef QT_NO_OPENSSL
+#define FLUKE_CERTIFICATE_ERROR QSslError::SelfSignedCertificate
+#else
+#define FLUKE_CERTIFICATE_ERROR QSslError::CertificateUntrusted
+#endif
+
Q_DECLARE_METATYPE(QAuthenticator*)
#ifndef QT_NO_NETWORKPROXY
Q_DECLARE_METATYPE(QNetworkProxyQuery)
@@ -6047,8 +6055,8 @@ void tst_QNetworkReply::ignoreSslErrorsList_data()
QList<QSslError> expectedSslErrors;
QList<QSslCertificate> certs = QSslCertificate::fromPath(testDataDir + "/certs/qt-test-server-cacert.pem");
- QSslError rightError(QSslError::SelfSignedCertificate, certs.at(0));
- QSslError wrongError(QSslError::SelfSignedCertificate);
+ QSslError rightError(FLUKE_CERTIFICATE_ERROR, certs.at(0));
+ QSslError wrongError(FLUKE_CERTIFICATE_ERROR);
QTest::newRow("SSL-failure-empty-list") << "https://" + QtNetworkSettings::serverName() + "/index.html" << expectedSslErrors << QNetworkReply::SslHandshakeFailedError;
expectedSslErrors.append(wrongError);
diff --git a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp
index 5b27b7d2b4..dc41a93906 100644
--- a/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp
+++ b/tests/auto/network/socket/qudpsocket/tst_qudpsocket.cpp
@@ -1574,7 +1574,7 @@ void tst_QUdpSocket::readyRead()
QSignalSpy spy(&receiver, SIGNAL(readyRead()));
// send a datagram to that port
- sender.writeDatagram("a", makeNonAny(receiver.localAddress()), port);
+ sender.writeDatagram("aa", makeNonAny(receiver.localAddress()), port);
// wait a little
// if QTBUG-43857 is still going, we'll live-lock on socket notifications from receiver's socket
@@ -1583,8 +1583,8 @@ void tst_QUdpSocket::readyRead()
// make sure only one signal was emitted
QCOMPARE(spy.count(), 1);
QVERIFY(receiver.hasPendingDatagrams());
- QCOMPARE(receiver.bytesAvailable(), qint64(1));
- QCOMPARE(receiver.pendingDatagramSize(), qint64(1));
+ QCOMPARE(receiver.bytesAvailable(), qint64(2));
+ QCOMPARE(receiver.pendingDatagramSize(), qint64(2));
// write another datagram
sender.writeDatagram("ab", makeNonAny(receiver.localAddress()), port);
@@ -1594,7 +1594,7 @@ void tst_QUdpSocket::readyRead()
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));
+ QCOMPARE(receiver.pendingDatagramSize(), qint64(2));
// read all the datagrams (we could read one only, but we can't be sure the OS is queueing)
while (receiver.hasPendingDatagrams())
diff --git a/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.der.pubkey b/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.der.pubkey
new file mode 100644
index 0000000000..4e46848106
--- /dev/null
+++ b/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.der.pubkey
Binary files differ
diff --git a/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem b/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem
new file mode 100644
index 0000000000..d81f8f1def
--- /dev/null
+++ b/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem
@@ -0,0 +1,16 @@
+-----BEGIN CERTIFICATE-----
+MIICijCCAkgCCQC7PDslmXiXHzALBglghkgBZQMEAwIwKTEaMBgGA1UEAwwRbmFt
+ZS93aXRoL3NsYXNoZXMxCzAJBgNVBAYTAk5PMB4XDTE1MDcyOTEyMTAyNloXDTE1
+MDgyODEyMTAyNlowKTEaMBgGA1UEAwwRbmFtZS93aXRoL3NsYXNoZXMxCzAJBgNV
+BAYTAk5PMIIBtjCCASsGByqGSM44BAEwggEeAoGBAMJjrSlWu595Nf9UAAeggH6k
+US30P+pigB5WEgeToqTkpIwHO24GdEL+dGtFVWwT+r+rSuI+SZPMMSQWpVcgjeCq
+oaPpn+9P5gCof1jmn4oegis4K8hJANnsDDdE1HRkeVDSzFlkmvk+FnVfB0wI0T8F
+k7BV4wZDyvgTKko6t7YZAhUAoXZvBxhaUam1WnS18Yrk+1IT3u8CgYAx22xg8DQG
+4HE2vGH0p3Ug2FziCtjpDaN1ryomPbroQSK7/x9dhuy/4b1H2KdJufawWTVPdBI5
+TfXXvCcJEmQKKegarq3DFPGkpH+rp72GejEgmBMUU22+1NHga3VzSspLjAK2e/+r
++foHHzJnGQs6JrvMNaXK+UVJxXRp878CGgOBhAACgYAKoweyuHdke1ngEmgXMPrC
+NBJiPPHPcEX9CSZasSka7gI6OWZDk6H80W1KRPxHMeKb4V06wa02IbZvWA5zeStC
+OtmMCylk5Tzav8/UqYeDAqjddbSm7i423/pjmUh+eD/wLHvJxYanRm8nqBQLe1jL
+2NmVkb1OpCyMK+sRF+K+sjALBglghkgBZQMEAwIDLwAwLAIUHVt2TWRAe/JSEHY1
+x6+igQb3AFQCFHYwbrScyMUwuVkNft2ttDN1I7ak
+-----END CERTIFICATE-----
diff --git a/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem.digest-md5 b/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem.digest-md5
new file mode 100644
index 0000000000..dba3fdff03
--- /dev/null
+++ b/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem.digest-md5
@@ -0,0 +1 @@
+MD5 Fingerprint=35:B0:60:B2:37:14:43:31:01:71:C0:D9:CE:AF:20:CB
diff --git a/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem.digest-sha1 b/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem.digest-sha1
new file mode 100644
index 0000000000..3879ef954f
--- /dev/null
+++ b/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem.digest-sha1
@@ -0,0 +1 @@
+SHA1 Fingerprint=BD:46:36:00:D7:31:3F:95:46:55:62:1A:FB:CA:36:A3:3D:27:15:92
diff --git a/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem.pubkey b/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem.pubkey
new file mode 100644
index 0000000000..c44fd6f4a9
--- /dev/null
+++ b/tests/auto/network/ssl/qsslcertificate/certificates/dsa-cert-ss.pem.pubkey
@@ -0,0 +1,12 @@
+-----BEGIN PUBLIC KEY-----
+MIIBtjCCASsGByqGSM44BAEwggEeAoGBAMJjrSlWu595Nf9UAAeggH6kUS30P+pi
+gB5WEgeToqTkpIwHO24GdEL+dGtFVWwT+r+rSuI+SZPMMSQWpVcgjeCqoaPpn+9P
+5gCof1jmn4oegis4K8hJANnsDDdE1HRkeVDSzFlkmvk+FnVfB0wI0T8Fk7BV4wZD
+yvgTKko6t7YZAhUAoXZvBxhaUam1WnS18Yrk+1IT3u8CgYAx22xg8DQG4HE2vGH0
+p3Ug2FziCtjpDaN1ryomPbroQSK7/x9dhuy/4b1H2KdJufawWTVPdBI5TfXXvCcJ
+EmQKKegarq3DFPGkpH+rp72GejEgmBMUU22+1NHga3VzSspLjAK2e/+r+foHHzJn
+GQs6JrvMNaXK+UVJxXRp878CGgOBhAACgYAKoweyuHdke1ngEmgXMPrCNBJiPPHP
+cEX9CSZasSka7gI6OWZDk6H80W1KRPxHMeKb4V06wa02IbZvWA5zeStCOtmMCylk
+5Tzav8/UqYeDAqjddbSm7i423/pjmUh+eD/wLHvJxYanRm8nqBQLe1jL2NmVkb1O
+pCyMK+sRF+K+sg==
+-----END PUBLIC KEY-----
diff --git a/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.der.pubkey b/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.der.pubkey
new file mode 100644
index 0000000000..05e3f82ebd
--- /dev/null
+++ b/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.der.pubkey
Binary files differ
diff --git a/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem b/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem
new file mode 100644
index 0000000000..c4843c4420
--- /dev/null
+++ b/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem
@@ -0,0 +1,11 @@
+-----BEGIN CERTIFICATE-----
+MIIBfjCCAQUCCQC0FR+dPQNT7TAKBggqhkjOPQQDAjApMRowGAYDVQQDDBFuYW1l
+L3dpdGgvc2xhc2hlczELMAkGA1UEBhMCTk8wHhcNMTUwNzI5MTIyNDA2WhcNMTUw
+ODI4MTIyNDA2WjApMRowGAYDVQQDDBFuYW1lL3dpdGgvc2xhc2hlczELMAkGA1UE
+BhMCTk8wdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQk+TMJ/Zu30xojWhWSFnllEgEF
++jBRIxSoJ8T7vaPy3dV0Dxomv5NxOi0kn1kzYUzMoMReK/IAJ3bfRGyFbV4i/KDJ
+VAvyEevvMnp2ewKxmwlg9E9n+d4Tm7tf5+3Tz+EwCgYIKoZIzj0EAwIDZwAwZAIw
+cM1DRkrcg4IPUZZaP96rI70H7OT3VDg5zSNMkEE/QBPGtE7T1Lzkxk96e/BkiQoV
+AjB/t955UraOxLtnqjSHvVmiczWK+2b4QV+wiQBV6XTLI6FUeKLa70I0ruLdIgJ4
+zKU=
+-----END CERTIFICATE-----
diff --git a/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem.digest-md5 b/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem.digest-md5
new file mode 100644
index 0000000000..69ad0aa247
--- /dev/null
+++ b/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem.digest-md5
@@ -0,0 +1 @@
+MD5 Fingerprint=83:EF:5F:FF:C1:DB:E0:AC:4A:FA:E1:1C:9F:07:9B:1E
diff --git a/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem.digest-sha1 b/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem.digest-sha1
new file mode 100644
index 0000000000..7547b5ce3f
--- /dev/null
+++ b/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem.digest-sha1
@@ -0,0 +1 @@
+SHA1 Fingerprint=06:07:56:98:99:A1:45:D7:94:14:5A:B9:92:97:35:35:C8:EA:7C:3E
diff --git a/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem.pubkey b/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem.pubkey
new file mode 100644
index 0000000000..1ced61d62c
--- /dev/null
+++ b/tests/auto/network/ssl/qsslcertificate/certificates/ec-cert-ss.pem.pubkey
@@ -0,0 +1,5 @@
+-----BEGIN PUBLIC KEY-----
+MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEJPkzCf2bt9MaI1oVkhZ5ZRIBBfowUSMU
+qCfE+72j8t3VdA8aJr+TcTotJJ9ZM2FMzKDEXivyACd230RshW1eIvygyVQL8hHr
+7zJ6dnsCsZsJYPRPZ/neE5u7X+ft08/h
+-----END PUBLIC KEY-----
diff --git a/tests/auto/network/ssl/qsslcertificate/certificates/gencertificates.sh b/tests/auto/network/ssl/qsslcertificate/certificates/gencertificates.sh
index b21776536b..50d17b9453 100755
--- a/tests/auto/network/ssl/qsslcertificate/certificates/gencertificates.sh
+++ b/tests/auto/network/ssl/qsslcertificate/certificates/gencertificates.sh
@@ -34,7 +34,8 @@
# This script generates digital certificates of different types.
-#--- Certificates ---------------------------------------------------------------------------
+#--- RSA Certificates -----------------------------------------------------------------------
+
echo -e "\ngenerating 1024-bit RSA private key to PEM file ..."
openssl genrsa -out rsa-pri-1024.pem 1024
@@ -57,6 +58,38 @@ openssl x509 -req -in req.pem -out cert.pem -CA ca-cert.pem -set_serial 17
echo -e "\n generating a certifificate signed by a dummy CA to DER file ..."
openssl x509 -req -in req.pem -out cert.der -CA ca-cert.pem -set_serial 17 -outform der
+#--- DSA Certificates -----------------------------------------------------------------------
+echo -e "\ngenerating DSA parameters to PEM file ..."
+openssl dsaparam -out dsapar-1024.pem 1024
+
+echo -e "\ngenerating DSA private key to PEM file ..."
+openssl gendsa dsapar-1024.pem -out dsa-pri-1024.pem
+/bin/rm dsapar-1024.pem
+
+echo -e "\ngenerating DSA public key to PEM and DER file ..."
+openssl dsa -in dsa-pri-1024.pem -pubout -out dsa-pub-1024.pem
+openssl dsa -in dsa-pri-1024.pem -pubout -out dsa-pub-1024.der -outform der
+
+echo -e "\ngenerating certificate signing request (CSR) ..."
+openssl req -out req.pem -new -key dsa-pri-1024.pem -subj "/CN=name\/with\/slashes/C=NO"
+
+echo -e "\n generating a self-signed certifificate to PEM file ..."
+openssl x509 -req -in req.pem -out dsa-cert-ss.pem -signkey dsa-pri-1024.pem
+
+#--- EC Certificates ------------------------------------------------------------------------
+echo -e "\ngenerating EC private key to PEM file ..."
+openssl ecparam -name secp384r1 -genkey -noout -out ec-pri-384.pem
+
+echo -e "\ngenerating EC public key to PEM and DER file ..."
+openssl ec -in ec-pri-384.pem -pubout -out ec-pub-384.pem
+openssl ec -in ec-pri-384.pem -pubout -out ec-pub-384.der -outform DER
+
+echo -e "\ngenerating certificate signing request (CSR) ..."
+openssl req -out req.pem -new -key ec-pri-384.pem -subj "/CN=name\/with\/slashes/C=NO"
+
+echo -e "\n generating a self-signed certifificate to PEM file ..."
+openssl x509 -req -in req.pem -out ec-cert-ss.pem -signkey ec-pri-384.pem
+
#--- Public keys --------------------------------------------------------------------------------
echo -e "\n associate public keys with all certificates ..."
# Note: For now, there is only one public key (encoded in both PEM and DER), but that could change.
@@ -64,6 +97,10 @@ echo -e "\n associate public keys with all certificates ..."
/bin/cp rsa-pub-1024.der cert-ss.der.pubkey
/bin/cp rsa-pub-1024.pem cert.pem.pubkey
/bin/cp rsa-pub-1024.der cert.der.pubkey
+/bin/cp dsa-pub-1024.pem dsa-cert-ss.pem.pubkey
+/bin/cp dsa-pub-1024.der dsa-cert-ss.der.pubkey
+/bin/cp ec-pub-384.pem ec-cert-ss.pem.pubkey
+/bin/cp ec-pub-384.der ec-cert-ss.der.pubkey
#--- Digests --------------------------------------------------------------------------------
echo -e "\n generating md5 and sha1 digests of all certificates ..."
@@ -72,6 +109,8 @@ do
openssl x509 -in ca-cert.pem -noout -fingerprint -$digest > ca-cert.pem.digest-$digest
openssl x509 -in cert-ss.pem -noout -fingerprint -$digest > cert-ss.pem.digest-$digest
openssl x509 -in cert.pem -noout -fingerprint -$digest > cert.pem.digest-$digest
+ openssl x509 -in dsa-cert-ss.pem -noout -fingerprint -$digest > dsa-cert-ss.pem.digest-$digest
+ openssl x509 -in ec-cert-ss.pem -noout -fingerprint -$digest > ec-cert-ss.pem.digest-$digest
done
#--- Subjet Alternative Name extension ----------------------------------------------------
@@ -93,4 +132,7 @@ openssl req -x509 -in req-san.pem -out $outname -key rsa-pri-1024.pem \
/bin/cp san.cnf $outname.san
echo -e "\n cleaning up ..."
-/bin/rm rsa-pri-1024.pem rsa-pub-1024.* req*.pem
+/bin/rm rsa-pri-1024.pem rsa-pub-1024.*
+/bin/rm dsa-pri-1024.pem dsa-pub-1024.*
+/bin/rm ec-pri-384.pem ec-pub-384.*
+/bin/rm req*.pem
diff --git a/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp b/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp
index 5e7e250bfd..4c288fffaf 100644
--- a/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp
+++ b/tests/auto/network/ssl/qsslcertificate/tst_qsslcertificate.cpp
@@ -494,12 +494,20 @@ void tst_QSslCertificate::publicKey()
QFETCH(QSsl::EncodingFormat, format);
QFETCH(QString, pubkeyFilePath);
+ QSsl::KeyAlgorithm algorithm;
+ if (QFileInfo(pubkeyFilePath).fileName().startsWith("dsa-"))
+ algorithm = QSsl::Dsa;
+ else if (QFileInfo(pubkeyFilePath).fileName().startsWith("ec-"))
+ algorithm = QSsl::Ec;
+ else
+ algorithm = QSsl::Rsa;
+
QByteArray encodedCert = readFile(certFilePath);
QSslCertificate certificate(encodedCert, format);
QVERIFY(!certificate.isNull());
QByteArray encodedPubkey = readFile(pubkeyFilePath);
- QSslKey pubkey(encodedPubkey, QSsl::Rsa, format, QSsl::PublicKey); // ### support DSA as well!
+ QSslKey pubkey(encodedPubkey, algorithm, format, QSsl::PublicKey);
QVERIFY(!pubkey.isNull());
QCOMPARE(certificate.publicKey(), pubkey);
@@ -581,7 +589,7 @@ void tst_QSslCertificate::fromPath_data()
QTest::newRow("\"certificates/*\" fixed der") << QString("certificates/*") << int(QRegExp::FixedString) << false << 0;
QTest::newRow("\"certificates/*\" regexp pem") << QString("certificates/*") << int(QRegExp::RegExp) << true << 0;
QTest::newRow("\"certificates/*\" regexp der") << QString("certificates/*") << int(QRegExp::RegExp) << false << 0;
- QTest::newRow("\"certificates/*\" wildcard pem") << QString("certificates/*") << int(QRegExp::Wildcard) << true << 5;
+ QTest::newRow("\"certificates/*\" wildcard pem") << QString("certificates/*") << int(QRegExp::Wildcard) << true << 7;
QTest::newRow("\"certificates/ca*\" wildcard pem") << QString("certificates/ca*") << int(QRegExp::Wildcard) << true << 1;
QTest::newRow("\"certificates/cert*\" wildcard pem") << QString("certificates/cert*") << int(QRegExp::Wildcard) << true << 4;
QTest::newRow("\"certificates/cert-[sure]*\" wildcard pem") << QString("certificates/cert-[sure]*") << int(QRegExp::Wildcard) << true << 3;
@@ -612,7 +620,7 @@ void tst_QSslCertificate::fromPath_data()
QTest::newRow("\"d.*/c.*.pem\" wildcard pem") << QString("d.*/c.*.pem") << int(QRegExp::Wildcard) << true << 0;
QTest::newRow("\"d.*/c.*.pem\" wildcard der") << QString("d.*/c.*.pem") << int(QRegExp::Wildcard) << false << 0;
#ifdef Q_OS_LINUX
- QTest::newRow("absolute path wildcard pem") << (testDataDir + "/certificates/*.pem") << int(QRegExp::Wildcard) << true << 5;
+ QTest::newRow("absolute path wildcard pem") << (testDataDir + "/certificates/*.pem") << int(QRegExp::Wildcard) << true << 7;
#endif
QTest::newRow("trailing-whitespace") << QString("more-certificates/trailing-whitespace.pem") << int(QRegExp::FixedString) << true << 1;
diff --git a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
index 64288f50e1..c7d655af3d 100644
--- a/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
+++ b/tests/auto/network/ssl/qsslsocket/tst_qsslsocket.cpp
@@ -71,7 +71,7 @@ Q_DECLARE_METATYPE(QSslSocket::PeerVerifyMode);
typedef QSharedPointer<QSslSocket> QSslSocketPtr;
// Non-OpenSSL backends are not able to report a specific error code
-// for self-signed certificate for certificates.
+// for self-signed certificates.
#ifndef QT_NO_OPENSSL
#define FLUKE_CERTIFICATE_ERROR QSslError::SelfSignedCertificate
#else
diff --git a/tests/auto/testlib/selftests/expected_badxml.lightxml b/tests/auto/testlib/selftests/expected_badxml.lightxml
index e0de44f0be..94f479a79a 100644
--- a/tests/auto/testlib/selftests/expected_badxml.lightxml
+++ b/tests/auto/testlib/selftests/expected_badxml.lightxml
@@ -113,7 +113,7 @@
</TestFunction>
<TestFunction name="encoding">
<Message type="qdebug" file="" line="0">
- <Description><![CDATA["\u00DClrich \u00DCml\u00E4ut"]]></Description>
+ <Description><![CDATA["Ülrich Ümläut"]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_badxml.xml b/tests/auto/testlib/selftests/expected_badxml.xml
index 8667c2d9cd..c1266bfeed 100644
--- a/tests/auto/testlib/selftests/expected_badxml.xml
+++ b/tests/auto/testlib/selftests/expected_badxml.xml
@@ -115,7 +115,7 @@
</TestFunction>
<TestFunction name="encoding">
<Message type="qdebug" file="" line="0">
- <Description><![CDATA["\u00DClrich \u00DCml\u00E4ut"]]></Description>
+ <Description><![CDATA["Ülrich Ümläut"]]></Description>
</Message>
<Incident type="pass" file="" line="0" />
<Duration msecs="0"/>
diff --git a/tests/auto/testlib/selftests/expected_badxml.xunitxml b/tests/auto/testlib/selftests/expected_badxml.xunitxml
index 46f4be4391..49048fdad6 100644
--- a/tests/auto/testlib/selftests/expected_badxml.xunitxml
+++ b/tests/auto/testlib/selftests/expected_badxml.xunitxml
@@ -30,7 +30,7 @@
<failure message="failure message" result="fail"/>
</testcase>
<testcase result="pass" name="encoding">
- <!-- message="&quot;\u00DClrich \u00DCml\u00E4ut&quot;" type="qdebug" -->
+ <!-- message="&quot;Ülrich Ümläut&quot;" type="qdebug" -->
</testcase>
<testcase result="pass" name="cleanupTestCase"/>
<system-err>
@@ -46,6 +46,6 @@
<![CDATA[quotes " text" more text]]>
<![CDATA[xml close > open < tags < text]]>
<![CDATA[all > " mixed ]]]><![CDATA[]> up > " in < the ]]]><![CDATA[]> hopes < of triggering "< ]]]><![CDATA[]> bugs]]>
-<![CDATA["\u00DClrich \u00DCml\u00E4ut"]]>
+<![CDATA["Ülrich Ümläut"]]>
</system-err>
</testsuite>
diff --git a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
index fdc5bdd915..09129f0676 100644
--- a/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
+++ b/tests/auto/widgets/widgets/qcombobox/tst_qcombobox.cpp
@@ -165,6 +165,7 @@ private slots:
void setCustomModelAndView();
void updateDelegateOnEditableChange();
void respectChangedOwnershipOfItemView();
+ void task_QTBUG_39088_inputMethodHints();
};
class MyAbstractItemDelegate : public QAbstractItemDelegate
@@ -3170,6 +3171,14 @@ void tst_QComboBox::updateDelegateOnEditableChange()
}
}
+void tst_QComboBox::task_QTBUG_39088_inputMethodHints()
+{
+ QComboBox box;
+ box.setEditable(true);
+ box.setInputMethodHints(Qt::ImhNoPredictiveText);
+ QCOMPARE(box.lineEdit()->inputMethodHints(), Qt::ImhNoPredictiveText);
+}
+
void tst_QComboBox::respectChangedOwnershipOfItemView()
{
QComboBox box1;
diff --git a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
index fb7c3e8a68..0cc812cbca 100644
--- a/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
+++ b/tests/auto/widgets/widgets/qtextedit/tst_qtextedit.cpp
@@ -1909,9 +1909,12 @@ void tst_QTextEdit::setText()
QCOMPARE(browser.toPlainText(), QLatin1String("with space"));
}
+#ifdef QT_BUILD_INTERNAL
QT_BEGIN_NAMESPACE
-extern void qt_setQtEnableTestFont(bool value);
+// qfontdatabase.cpp
+Q_AUTOTEST_EXPORT void qt_setQtEnableTestFont(bool value);
QT_END_NAMESPACE
+#endif
#ifdef QT_BUILD_INTERNAL
void tst_QTextEdit::fullWidthSelection_data()