Merge remote-tracking branch 'origin/5.13' into dev

Conflicts:
	.qmake.conf
	src/network/ssl/qsslsocket_openssl.cpp

Done-With: Timur Pocheptsov <timur.pocheptsov@qt.io>
Change-Id: Ibb57a0548b4977797b400637487a56245ac1c024
This commit is contained in:
Liang Qi 2019-06-27 14:38:03 +02:00
commit 25eb97d2d4
75 changed files with 220 additions and 73 deletions

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qt3d.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtactiveqt.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtandroidextras.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtbase.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtcharts.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtconnectivity.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtdatavis3d.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtdeclarative.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtdoc.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtgamepad.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtgraphicaleffects.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtimageformats.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtlocation.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtlottie.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtmacextras.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtmultimedia.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtnetworkauth.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtpurchasing.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtquickcontrols.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtquickcontrols2.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtremoteobjects.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtscript.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtscxml.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtsensors.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtserialbus.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtserialport.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtspeech.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtsvg.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qttools.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtvirtualkeyboard.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtwayland.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtwebchannel.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtwebengine.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtwebsockets.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtwebview.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtwinextras.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtx11extras.git/tree/examples/\1?h=$QT_VER"

View File

@ -0,0 +1 @@
url.examples = "https://code.qt.io/cgit/qt/qtxmlpatterns.git/tree/examples/\1?h=$QT_VER"

View File

@ -79,6 +79,32 @@ QVariant addAuthor(QSqlQuery &q, const QString &name, const QDate &birthdate)
return q.lastInsertId(); return q.lastInsertId();
} }
const auto BOOKS_SQL = QLatin1String(R"(
create table books(id integer primary key, title varchar, author integer,
genre integer, year integer, rating integer)
)");
const auto AUTHORS_SQL = QLatin1String(R"(
create table authors(id integer primary key, name varchar, birthdate date)
)");
const auto GENRES_SQL = QLatin1String(R"(
create table genres(id integer primary key, name varchar)
)");
const auto INSERT_AUTHOR_SQL = QLatin1String(R"(
insert into authors(name, birthdate) values(?, ?)
)");
const auto INSERT_BOOK_SQL = QLatin1String(R"(
insert into books(title, year, author, genre, rating)
values(?, ?, ?, ?, ?)
)");
const auto INSERT_GENRE_SQL = QLatin1String(R"(
insert into genres(name) values(?)
)");
QSqlError initDb() QSqlError initDb()
{ {
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
@ -93,26 +119,26 @@ QSqlError initDb()
return QSqlError(); return QSqlError();
QSqlQuery q; QSqlQuery q;
if (!q.exec(QLatin1String("create table books(id integer primary key, title varchar, author integer, genre integer, year integer, rating integer)"))) if (!q.exec(BOOKS_SQL))
return q.lastError(); return q.lastError();
if (!q.exec(QLatin1String("create table authors(id integer primary key, name varchar, birthdate date)"))) if (!q.exec(AUTHORS_SQL))
return q.lastError(); return q.lastError();
if (!q.exec(QLatin1String("create table genres(id integer primary key, name varchar)"))) if (!q.exec(GENRES_SQL))
return q.lastError(); return q.lastError();
if (!q.prepare(QLatin1String("insert into authors(name, birthdate) values(?, ?)"))) if (!q.prepare(INSERT_AUTHOR_SQL))
return q.lastError(); return q.lastError();
QVariant asimovId = addAuthor(q, QLatin1String("Isaac Asimov"), QDate(1920, 2, 1)); QVariant asimovId = addAuthor(q, QLatin1String("Isaac Asimov"), QDate(1920, 2, 1));
QVariant greeneId = addAuthor(q, QLatin1String("Graham Greene"), QDate(1904, 10, 2)); QVariant greeneId = addAuthor(q, QLatin1String("Graham Greene"), QDate(1904, 10, 2));
QVariant pratchettId = addAuthor(q, QLatin1String("Terry Pratchett"), QDate(1948, 4, 28)); QVariant pratchettId = addAuthor(q, QLatin1String("Terry Pratchett"), QDate(1948, 4, 28));
if (!q.prepare(QLatin1String("insert into genres(name) values(?)"))) if (!q.prepare(INSERT_GENRE_SQL))
return q.lastError(); return q.lastError();
QVariant sfiction = addGenre(q, QLatin1String("Science Fiction")); QVariant sfiction = addGenre(q, QLatin1String("Science Fiction"));
QVariant fiction = addGenre(q, QLatin1String("Fiction")); QVariant fiction = addGenre(q, QLatin1String("Fiction"));
QVariant fantasy = addGenre(q, QLatin1String("Fantasy")); QVariant fantasy = addGenre(q, QLatin1String("Fantasy"));
if (!q.prepare(QLatin1String("insert into books(title, year, author, genre, rating) values(?, ?, ?, ?, ?)"))) if (!q.prepare(INSERT_BOOK_SQL))
return q.lastError(); return q.lastError();
addBook(q, QLatin1String("Foundation"), 1951, asimovId, sfiction, 3); addBook(q, QLatin1String("Foundation"), 1951, asimovId, sfiction, 3);
addBook(q, QLatin1String("Foundation and Empire"), 1952, asimovId, sfiction, 4); addBook(q, QLatin1String("Foundation and Empire"), 1952, asimovId, sfiction, 4);

View File

@ -59,7 +59,7 @@ function(_qt5_$${CMAKE_MODULE_NAME}_process_prl_file prl_file_location Configura
file(STRINGS \"${prl_file_location}\" _prl_strings REGEX \"QMAKE_PRL_LIBS[ \\t]*=\") file(STRINGS \"${prl_file_location}\" _prl_strings REGEX \"QMAKE_PRL_LIBS[ \\t]*=\")
string(REGEX REPLACE \"QMAKE_PRL_LIBS[ \\t]*=[ \\t]*([^\\n]*)\" \"\\\\1\" _static_depends ${_prl_strings}) string(REGEX REPLACE \"QMAKE_PRL_LIBS[ \\t]*=[ \\t]*([^\\n]*)\" \"\\\\1\" _static_depends ${_prl_strings})
string(REGEX REPLACE \"[ \\t]+\" \";\" _static_depends ${_static_depends}) string(REGEX REPLACE \"[ \\t]+\" \";\" _static_depends ${_static_depends})
string(REGEX REPLACE \"[ \\t]+\" \";\" _standard_libraries ${CMAKE_CXX_STANDARD_LIBRARIES}) string(REGEX REPLACE \"[ \\t]+\" \";\" _standard_libraries \"${CMAKE_CXX_STANDARD_LIBRARIES}\")
set(_search_paths) set(_search_paths)
string(REPLACE \"\\$\\$[QT_INSTALL_LIBS]\" \"${_qt5_install_libs}\" _static_depends \"${_static_depends}\") string(REPLACE \"\\$\\$[QT_INSTALL_LIBS]\" \"${_qt5_install_libs}\" _static_depends \"${_static_depends}\")
foreach(_flag ${_static_depends}) foreach(_flag ${_static_depends})

View File

@ -1,4 +1,6 @@
CONFIG(release, debug|release) { static:no-static-ltcg {
# Static library but no-static-ltcg enabled: skip LTCG
} else: CONFIG(release, debug|release) {
# We need fat object files when creating static libraries on some platforms # We need fat object files when creating static libraries on some platforms
# so the linker will know to load a particular object from the library # so the linker will know to load a particular object from the library
# in the first place. On others, we have special ar and nm to create the symbol # in the first place. On others, we have special ar and nm to create the symbol
@ -22,7 +24,7 @@ CONFIG(release, debug|release) {
} }
} }
fat-lto { fat-lto|if(static:fat-static-lto) {
QMAKE_CFLAGS_LTCG += $$QMAKE_CFLAGS_LTCG_FATOBJECTS QMAKE_CFLAGS_LTCG += $$QMAKE_CFLAGS_LTCG_FATOBJECTS
QMAKE_CXXFLAGS_LTCG += $$QMAKE_CXXFLAGS_LTCG_FATOBJECTS QMAKE_CXXFLAGS_LTCG += $$QMAKE_CXXFLAGS_LTCG_FATOBJECTS
} }

View File

@ -250,7 +250,7 @@ void MingwMakefileGenerator::init()
} }
if(project->isActiveConfig("dll")) { if(project->isActiveConfig("dll")) {
project->values("QMAKE_CLEAN").append(project->first("MINGW_IMPORT_LIB")); project->values("QMAKE_DISTCLEAN").append(project->first("MINGW_IMPORT_LIB"));
} }
} }

View File

@ -517,4 +517,9 @@ ProKey ProFile::getHashStr(const ushort *&tPtr)
return ret; return ret;
} }
QDebug operator<<(QDebug debug, const ProString &str)
{
return debug << str.toQString();
}
QT_END_NAMESPACE QT_END_NAMESPACE

View File

@ -31,6 +31,7 @@
#include "qmake_global.h" #include "qmake_global.h"
#include <qdebug.h>
#include <qstring.h> #include <qstring.h>
#include <qvector.h> #include <qvector.h>
#include <qhash.h> #include <qhash.h>
@ -468,6 +469,8 @@ struct ProFunctionDefs {
QHash<ProKey, ProFunctionDef> replaceFunctions; QHash<ProKey, ProFunctionDef> replaceFunctions;
}; };
QDebug operator<<(QDebug debug, const ProString &str);
QT_END_NAMESPACE QT_END_NAMESPACE
#endif // PROITEMS_H #endif // PROITEMS_H

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
project = QtConcurrent project = QtConcurrent
description = Qt Concurrent Reference Documentation description = Qt Concurrent Reference Documentation

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
project = QtCore project = QtCore
description = Qt Core Reference Documentation description = Qt Core Reference Documentation

View File

@ -220,7 +220,7 @@ static bool shouldIncludeFs(const QStorageIterator &it)
return false; return false;
} }
#ifdef Q_OS_LINUX #if defined(Q_OS_LINUX) && !defined(Q_OS_ANDROID)
if (it.fileSystemType() == "rootfs") if (it.fileSystemType() == "rootfs")
return false; return false;
#endif #endif
@ -849,7 +849,7 @@ QList<QStorageInfo> QStorageInfoPrivate::mountedVolumes()
info.d->device = it.device(); info.d->device = it.device();
info.d->fileSystemType = it.fileSystemType(); info.d->fileSystemType = it.fileSystemType();
info.d->subvolume = it.subvolume(); info.d->subvolume = it.subvolume();
if (info.bytesTotal() == 0) if (info.bytesTotal() == 0 && info != root())
continue; continue;
volumes.append(info); volumes.append(info);
} }

View File

@ -621,11 +621,11 @@ int QDateTimeParser::sectionMaxSize(Section s, int count) const
case LastSection: return 0; case LastSection: return 0;
case AmPmSection: { case AmPmSection: {
const int lowerMax = qMin(getAmPmText(AmText, LowerCase).size(), const int lowerMax = qMax(getAmPmText(AmText, LowerCase).size(),
getAmPmText(PmText, LowerCase).size()); getAmPmText(PmText, LowerCase).size());
const int upperMax = qMin(getAmPmText(AmText, UpperCase).size(), const int upperMax = qMax(getAmPmText(AmText, UpperCase).size(),
getAmPmText(PmText, UpperCase).size()); getAmPmText(PmText, UpperCase).size());
return qMin(4, qMin(lowerMax, upperMax)); return qMax(lowerMax, upperMax);
} }
case Hour24Section: case Hour24Section:
@ -1664,13 +1664,16 @@ QDateTimeParser::findTimeZone(QStringRef str, const QDateTime &when,
/*! /*!
\internal \internal
Returns Compares str to the am/pm texts returned by getAmPmText().
AM if str == tr("AM") Returns AM or PM if str is one of those texts. Failing that, it looks to see
PM if str == tr("PM") whether, ignoring spaces and case, each character of str appears in one of
PossibleAM if str can become tr("AM") the am/pm texts.
PossiblePM if str can become tr("PM") If neither text can be the result of the user typing more into str, returns
PossibleBoth if str can become tr("PM") and can become tr("AM") Neither. If both texts are possible results of further typing, returns
Neither if str can't become anything sensible PossibleBoth. Otherwise, only one of them is a possible completion, so this
returns PossibleAM or PossiblePM to indicate which.
\sa getAmPmText()
*/ */
QDateTimeParser::AmPmFinder QDateTimeParser::findAmPm(QString &str, int sectionIndex, int *used) const QDateTimeParser::AmPmFinder QDateTimeParser::findAmPm(QString &str, int sectionIndex, int *used) const
{ {
@ -1699,10 +1702,10 @@ QDateTimeParser::AmPmFinder QDateTimeParser::findAmPm(QString &str, int sectionI
QDTPDEBUG << "findAmPm" << str << ampm[0] << ampm[1]; QDTPDEBUG << "findAmPm" << str << ampm[0] << ampm[1];
if (str.indexOf(ampm[amindex], 0, Qt::CaseInsensitive) == 0) { if (str.startsWith(ampm[amindex], Qt::CaseInsensitive)) {
str = ampm[amindex]; str = ampm[amindex];
return AM; return AM;
} else if (str.indexOf(ampm[pmindex], 0, Qt::CaseInsensitive) == 0) { } else if (str.startsWith(ampm[pmindex], Qt::CaseInsensitive)) {
str = ampm[pmindex]; str = ampm[pmindex];
return PM; return PM;
} else if (context == FromString || (str.count(space) == 0 && str.size() >= size)) { } else if (context == FromString || (str.count(space) == 0 && str.size() >= size)) {

View File

@ -327,7 +327,7 @@ static const uchar breakTable[BAfter + 1][QUnicodeTables::NumSentenceBreakClasse
// Any CR LF Sep Extend Sp Lower Upper OLetter Numeric ATerm SContinue STerm Close // Any CR LF Sep Extend Sp Lower Upper OLetter Numeric ATerm SContinue STerm Close
{ Initial, BAfterC, BAfter , BAfter , Initial, Initial, Lower , Upper , Initial, Initial, ATerm , Initial, STerm , Initial }, // Initial { Initial, BAfterC, BAfter , BAfter , Initial, Initial, Lower , Upper , Initial, Initial, ATerm , Initial, STerm , Initial }, // Initial
{ Initial, BAfterC, BAfter , BAfter , Lower , Initial, Initial, Initial, Initial, Initial, LUATerm, Initial, STerm , Initial }, // Lower { Initial, BAfterC, BAfter , BAfter , Lower , Initial, Initial, Initial, Initial, Initial, LUATerm, Initial, STerm , Initial }, // Lower
{ Initial, BAfterC, BAfter , BAfter , Upper , Initial, Initial, Upper , Initial, Initial, LUATerm, STerm , STerm , Initial }, // Upper { Initial, BAfterC, BAfter , BAfter , Upper , Initial, Initial, Upper , Initial, Initial, LUATerm, Initial, STerm , Initial }, // Upper
{ Lookup , BAfterC, BAfter , BAfter , LUATerm, ACS , Initial, Upper , Break , Initial, ATerm , STerm , STerm , ATermC }, // LUATerm { Lookup , BAfterC, BAfter , BAfter , LUATerm, ACS , Initial, Upper , Break , Initial, ATerm , STerm , STerm , ATermC }, // LUATerm
{ Lookup , BAfterC, BAfter , BAfter , ATerm , ACS , Initial, Break , Break , Initial, ATerm , STerm , STerm , ATermC }, // ATerm { Lookup , BAfterC, BAfter , BAfter , ATerm , ACS , Initial, Break , Break , Initial, ATerm , STerm , STerm , ATermC }, // ATerm

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
# Name of the project which must match the outputdir. Determines the .index file # Name of the project which must match the outputdir. Determines the .index file
project = QtDBus project = QtDBus

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
project = QtGui project = QtGui
description = Qt GUI Reference Documentation description = Qt GUI Reference Documentation

View File

@ -675,8 +675,9 @@ void QPainterPath::reserve(int size)
{ {
Q_D(QPainterPath); Q_D(QPainterPath);
if ((!d && size > 0) || (d && d->elements.capacity() < size)) { if ((!d && size > 0) || (d && d->elements.capacity() < size)) {
ensureData();
detach(); detach();
d->elements.reserve(size); d_func()->elements.reserve(size);
} }
} }

View File

@ -2306,6 +2306,10 @@ QString QTextHtmlExporter::toHtml(const QByteArray &encoding, ExportMode mode)
if (mode == ExportEntireDocument) { if (mode == ExportEntireDocument) {
html += QLatin1String(" style=\""); html += QLatin1String(" style=\"");
QStringList fontFamilies = defaultCharFormat.fontFamilies().toStringList();
if (!fontFamilies.isEmpty())
emitFontFamily(fontFamilies);
else
emitFontFamily(defaultCharFormat.fontFamily()); emitFontFamily(defaultCharFormat.fontFamily());
if (defaultCharFormat.hasProperty(QTextFormat::FontPointSize)) { if (defaultCharFormat.hasProperty(QTextFormat::FontPointSize)) {
@ -2368,8 +2372,12 @@ bool QTextHtmlExporter::emitCharFormatStyle(const QTextCharFormat &format)
bool attributesEmitted = false; bool attributesEmitted = false;
{ {
const QStringList families = format.fontFamilies().toStringList();
const QString family = format.fontFamily(); const QString family = format.fontFamily();
if (!family.isEmpty() && family != defaultCharFormat.fontFamily()) { if (!families.isEmpty() && families != defaultCharFormat.fontFamilies().toStringList()) {
emitFontFamily(families);
attributesEmitted = true;
} else if (!family.isEmpty() && family != defaultCharFormat.fontFamily()) {
emitFontFamily(family); emitFontFamily(family);
attributesEmitted = true; attributesEmitted = true;
} }
@ -2656,6 +2664,27 @@ void QTextHtmlExporter::emitFontFamily(const QString &family)
html += QLatin1Char(';'); html += QLatin1Char(';');
} }
void QTextHtmlExporter::emitFontFamily(const QStringList &families)
{
html += QLatin1String(" font-family:");
bool first = true;
for (const QString &family : families) {
QLatin1String quote("\'");
if (family.contains(QLatin1Char('\'')))
quote = QLatin1String("&quot;");
if (!first)
html += QLatin1String(",");
else
first = false;
html += quote;
html += family.toHtmlEscaped();
html += quote;
}
html += QLatin1Char(';');
}
void QTextHtmlExporter::emitMargins(const QString &top, const QString &bottom, const QString &left, const QString &right) void QTextHtmlExporter::emitMargins(const QString &top, const QString &bottom, const QString &left, const QString &right)
{ {
html += QLatin1String(" margin-top:"); html += QLatin1String(" margin-top:");

View File

@ -397,6 +397,7 @@ private:
void emitPageBreakPolicy(QTextFormat::PageBreakFlags policy); void emitPageBreakPolicy(QTextFormat::PageBreakFlags policy);
void emitFontFamily(const QString &family); void emitFontFamily(const QString &family);
void emitFontFamily(const QStringList &families);
void emitBackgroundAttribute(const QTextFormat &format); void emitBackgroundAttribute(const QTextFormat &format);
QString findUrlForImage(const QTextDocument *doc, qint64 cacheKey, bool isPixmap); QString findUrlForImage(const QTextDocument *doc, qint64 cacheKey, bool isPixmap);

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
project = QtNetwork project = QtNetwork
description = Qt Network Reference Documentation description = Qt Network Reference Documentation

View File

@ -1573,6 +1573,7 @@ bool QSslSocketBackendPrivate::checkOcspStatus()
// verify the responder's chain (see their commit 4ba9a4265bd). // verify the responder's chain (see their commit 4ba9a4265bd).
// Working this around - is too much fuss for ancient versions we // Working this around - is too much fuss for ancient versions we
// are dropping quite soon anyway. // are dropping quite soon anyway.
const unsigned long verificationFlags = 0; const unsigned long verificationFlags = 0;
const int success = q_OCSP_basic_verify(basicResponse, peerChain, store, verificationFlags); const int success = q_OCSP_basic_verify(basicResponse, peerChain, store, verificationFlags);
if (success <= 0) if (success <= 0)

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
# Name of the project which must match the outputdir. Determines the .index file # Name of the project which must match the outputdir. Determines the .index file
project = QtOpenGL project = QtOpenGL

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
project = QtPlatformHeaders project = QtPlatformHeaders
description = Qt Platform Headers Reference Documentation description = Qt Platform Headers Reference Documentation

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
project = QtPrintSupport project = QtPrintSupport
description = Qt Print Support Reference Documentation description = Qt Print Support Reference Documentation

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
project = QtSql project = QtSql
description = Qt SQL Reference Documentation description = Qt SQL Reference Documentation

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
project = QtTestLib project = QtTestLib
moduleheader = QtTest moduleheader = QtTest

View File

@ -150,8 +150,10 @@ static QSet<QByteArray> keywords()
<< "msvc-2013" << "msvc-2013"
# elif _MSC_VER <= 1900 # elif _MSC_VER <= 1900
<< "msvc-2015" << "msvc-2015"
# else # elif _MSC_VER <= 1916
<< "msvc-2017" << "msvc-2017"
# else
<< "msvc-2019"
# endif # endif
#endif #endif

View File

@ -59,7 +59,7 @@ enum {
CONSTANT_COMPRESSTHRESHOLD_DEFAULT = 70 CONSTANT_COMPRESSTHRESHOLD_DEFAULT = 70
}; };
#if QT_CONFIG(zstd) #if QT_CONFIG(zstd) && QT_VERSION >= QT_VERSION_CHECK(6,0,0)
# define CONSTANT_COMPRESSALGO_DEFAULT RCCResourceLibrary::CompressionAlgorithm::Zstd # define CONSTANT_COMPRESSALGO_DEFAULT RCCResourceLibrary::CompressionAlgorithm::Zstd
#elif !defined(QT_NO_COMPRESS) #elif !defined(QT_NO_COMPRESS)
# define CONSTANT_COMPRESSALGO_DEFAULT RCCResourceLibrary::CompressionAlgorithm::Zlib # define CONSTANT_COMPRESSALGO_DEFAULT RCCResourceLibrary::CompressionAlgorithm::Zlib

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
project = QtWidgets project = QtWidgets
description = Qt Widgets Reference Documentation description = Qt Widgets Reference Documentation

View File

@ -2306,13 +2306,31 @@ void QDateTimeEdit::paintEvent(QPaintEvent *event)
style()->drawComplexControl(QStyle::CC_ComboBox, &optCombo, &p, this); style()->drawComplexControl(QStyle::CC_ComboBox, &optCombo, &p, this);
} }
/*
Returns the string for AM and PM markers.
If a translation for "AM" and "PM" is installed, then use that.
Otherwise, use the default implementation, which uses the locale.
*/
QString QDateTimeEditPrivate::getAmPmText(AmPm ap, Case cs) const QString QDateTimeEditPrivate::getAmPmText(AmPm ap, Case cs) const
{ {
QString original;
QString translated;
if (ap == AmText) { if (ap == AmText) {
return (cs == UpperCase ? QDateTimeParser::tr("AM") : QDateTimeParser::tr("am")); original = QLatin1String(cs == UpperCase ? "AM" : "am");
translated = (cs == UpperCase ? QDateTimeParser::tr("AM") : QDateTimeParser::tr("am"));
} else { } else {
return (cs == UpperCase ? QDateTimeParser::tr("PM") : QDateTimeParser::tr("pm")); original = QLatin1String(cs == UpperCase ? "PM" : "pm");
translated = (cs == UpperCase ? QDateTimeParser::tr("PM") : QDateTimeParser::tr("pm"));
} }
// This logic fails if a translation exists but doesn't change the string,
// which we can accept as a corner-case for which a locale-derived answer
// will be acceptable.
if (original != translated)
return translated;
return QDateTimeParser::getAmPmText(ap, cs);
} }
int QDateTimeEditPrivate::absoluteIndex(QDateTimeEdit::Section s, int index) const int QDateTimeEditPrivate::absoluteIndex(QDateTimeEdit::Section s, int index) const

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf) include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
project = QtXml project = QtXml
description = Qt XML Reference Documentation description = Qt XML Reference Documentation

View File

@ -2,4 +2,6 @@ CONFIG += testcase
TARGET = tst_qglobal TARGET = tst_qglobal
QT = core testlib QT = core testlib
SOURCES = tst_qglobal.cpp qglobal.c SOURCES = tst_qglobal.cpp qglobal.c
contains(QT_CONFIG, c++1z): CONFIG += c++1z qtConfig(c++11): CONFIG += c++11
qtConfig(c++14): CONFIG += c++14
qtConfig(c++1z): CONFIG += c++1z

View File

@ -464,7 +464,7 @@ typedef int (Empty::*memFun) ();
QCOMPARE(Q_ALIGNOF(type), size_t(alignment)); \ QCOMPARE(Q_ALIGNOF(type), size_t(alignment)); \
/* Compare to native operator for compilers that support it, /* Compare to native operator for compilers that support it,
otherwise... erm... check consistency! :-) */ \ otherwise... erm... check consistency! :-) */ \
QCOMPARE(QT_EMULATED_ALIGNOF(type), Q_ALIGNOF(type)); \ QCOMPARE(alignof(type), Q_ALIGNOF(type)); \
} while (false) } while (false)
/**/ /**/
@ -517,7 +517,7 @@ void tst_QGlobal::qAlignOf()
TEST_AlignOf_impl(AlignmentInStruct<double>, Q_ALIGNOF(AlignmentInStruct<qint64>)); TEST_AlignOf_impl(AlignmentInStruct<double>, Q_ALIGNOF(AlignmentInStruct<qint64>));
// 32-bit x86 ABI, Clang disagrees with gcc // 32-bit x86 ABI, Clang disagrees with gcc
#if !defined(Q_PROCESSOR_X86_32) || !defined(Q_CC_CLANG) #if !defined(Q_PROCESSOR_X86_32) || !defined(Q_CC_CLANG) || defined(Q_OS_ANDROID)
TEST_AlignOf_impl(qint64 [5], Q_ALIGNOF(qint64)); TEST_AlignOf_impl(qint64 [5], Q_ALIGNOF(qint64));
#else #else
TEST_AlignOf_impl(qint64 [5], Q_ALIGNOF(AlignmentInStruct<qint64>)); TEST_AlignOf_impl(qint64 [5], Q_ALIGNOF(AlignmentInStruct<qint64>));

View File

@ -569,13 +569,7 @@ void tst_QTemporaryFile::rename()
void tst_QTemporaryFile::renameFdLeak() void tst_QTemporaryFile::renameFdLeak()
{ {
#ifdef Q_OS_UNIX #if defined(Q_OS_UNIX) && !defined(Q_OS_ANDROID)
# if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_EMBEDDED)
ChdirOnReturn cor(QDir::currentPath());
QDir::setCurrent(QStandardPaths::writableLocation(QStandardPaths::CacheLocation));
# endif
const QByteArray sourceFile = QFile::encodeName(QFINDTESTDATA(__FILE__)); const QByteArray sourceFile = QFile::encodeName(QFINDTESTDATA(__FILE__));
QVERIFY(!sourceFile.isEmpty()); QVERIFY(!sourceFile.isEmpty());
// Test this on Unix only // Test this on Unix only

View File

@ -41,7 +41,6 @@ class tst_QPlugin : public QObject
Q_OBJECT Q_OBJECT
QDir dir; QDir dir;
QString invalidPluginName;
public: public:
tst_QPlugin(); tst_QPlugin();
@ -64,15 +63,14 @@ void tst_QPlugin::initTestCase()
QVERIFY2(dir.exists(), QVERIFY2(dir.exists(),
qPrintable(QString::fromLatin1("Cannot find the 'plugins' directory starting from '%1'"). qPrintable(QString::fromLatin1("Cannot find the 'plugins' directory starting from '%1'").
arg(QDir::toNativeSeparators(QDir::currentPath())))); arg(QDir::toNativeSeparators(QDir::currentPath()))));
const auto fileNames = dir.entryList({"*invalid*"}, QDir::Files);
if (!fileNames.isEmpty())
invalidPluginName = dir.absoluteFilePath(fileNames.first());
} }
void tst_QPlugin::loadDebugPlugin() void tst_QPlugin::loadDebugPlugin()
{ {
const auto fileNames = dir.entryList(QStringList() << "*debug*", QDir::Files); const auto fileNames = dir.entryList(QStringList() << "*debug*", QDir::Files);
if (fileNames.isEmpty())
QSKIP("No debug plugins found - skipping test");
for (const QString &fileName : fileNames) { for (const QString &fileName : fileNames) {
if (!QLibrary::isLibrary(fileName)) if (!QLibrary::isLibrary(fileName))
continue; continue;
@ -100,6 +98,9 @@ void tst_QPlugin::loadDebugPlugin()
void tst_QPlugin::loadReleasePlugin() void tst_QPlugin::loadReleasePlugin()
{ {
const auto fileNames = dir.entryList(QStringList() << "*release*", QDir::Files); const auto fileNames = dir.entryList(QStringList() << "*release*", QDir::Files);
if (fileNames.isEmpty())
QSKIP("No release plugins found - skipping test");
for (const QString &fileName : fileNames) { for (const QString &fileName : fileNames) {
if (!QLibrary::isLibrary(fileName)) if (!QLibrary::isLibrary(fileName))
continue; continue;
@ -227,7 +228,13 @@ static qsizetype locateMetadata(const uchar *data, qsizetype len)
void tst_QPlugin::scanInvalidPlugin() void tst_QPlugin::scanInvalidPlugin()
{ {
QVERIFY(!invalidPluginName.isEmpty()); const auto fileNames = dir.entryList({"*invalid*"}, QDir::Files);
QString invalidPluginName;
if (fileNames.isEmpty())
QSKIP("No invalid plugin found - skipping test");
else
invalidPluginName = dir.absoluteFilePath(fileNames.first());
// copy the file // copy the file
QFileInfo fn(invalidPluginName); QFileInfo fn(invalidPluginName);

View File

@ -2489,17 +2489,20 @@ void tst_QDateTime::fromString_LOCALE_ILDATE()
void tst_QDateTime::fromStringToStringLocale_data() void tst_QDateTime::fromStringToStringLocale_data()
{ {
QTest::addColumn<QLocale>("locale");
QTest::addColumn<QDateTime>("dateTime"); QTest::addColumn<QDateTime>("dateTime");
QTest::newRow("data0") << QDateTime(QDate(1999, 1, 18), QTime(11, 49, 00)); QTest::newRow("frFR") << QLocale(QLocale::French, QLocale::France) << QDateTime(QDate(1999, 1, 18), QTime(11, 49, 00));
QTest::newRow("spCO") << QLocale(QLocale::Spanish, QLocale::Colombia) << QDateTime(QDate(1999, 1, 18), QTime(11, 49, 00));
} }
void tst_QDateTime::fromStringToStringLocale() void tst_QDateTime::fromStringToStringLocale()
{ {
QFETCH(QLocale, locale);
QFETCH(QDateTime, dateTime); QFETCH(QDateTime, dateTime);
QLocale def; QLocale def;
QLocale::setDefault(QLocale(QLocale::French, QLocale::France)); QLocale::setDefault(locale);
#define ROUNDTRIP(format) \ #define ROUNDTRIP(format) \
QCOMPARE(QDateTime::fromString(dateTime.toString(format), format), dateTime) QCOMPARE(QDateTime::fromString(dateTime.toString(format), format), dateTime)

View File

@ -539,6 +539,13 @@ void tst_QTextBoundaryFinder::sentenceBoundaries_manual_data()
QTest::newRow("data3") << testString << expectedBreakPositions; QTest::newRow("data3") << testString << expectedBreakPositions;
} }
{
QString testString(QString::fromUtf8("Doing TEST, doing another test."));
QList<int> expectedBreakPositions;
expectedBreakPositions << 0 << 31;
QTest::newRow("data4") << testString << expectedBreakPositions;
}
} }
void tst_QTextBoundaryFinder::sentenceBoundaries_manual() void tst_QTextBoundaryFinder::sentenceBoundaries_manual()

View File

@ -189,6 +189,10 @@ void tst_QPainterPath::reserveAndCapacity()
p.reserve(0); p.reserve(0);
QVERIFY(p.capacity() >= 1000); QVERIFY(p.capacity() >= 1000);
QPainterPath p2;
p2.reserve(10);
QVERIFY(p.capacity() >= 10);
} }
Q_DECLARE_METATYPE(QPainterPath) Q_DECLARE_METATYPE(QPainterPath)

View File

@ -861,6 +861,18 @@ void tst_QTextDocument::toHtml_data()
<< QString("<p DEFAULTBLOCKSTYLE><span style=\" font-family:'Foo&quot;s Family';\">Blah</span></p>"); << QString("<p DEFAULTBLOCKSTYLE><span style=\" font-family:'Foo&quot;s Family';\">Blah</span></p>");
} }
{
CREATE_DOC_AND_CURSOR();
QTextCharFormat fmt;
fmt.setFontFamily("Times");
fmt.setFontFamilies(QStringList{ "Times", "serif" });
cursor.insertText("Blah", fmt);
QTest::newRow("font-family-with-fallback") << QTextDocumentFragment(&doc)
<< QString("<p DEFAULTBLOCKSTYLE><span style=\" font-family:'Times','serif';\">Blah</span></p>");
}
{ {
CREATE_DOC_AND_CURSOR(); CREATE_DOC_AND_CURSOR();

View File

@ -5039,9 +5039,6 @@ public:
// very similar to ioPostToHttpUploadProgress but for SSL // very similar to ioPostToHttpUploadProgress but for SSL
void tst_QNetworkReply::ioPostToHttpsUploadProgress() void tst_QNetworkReply::ioPostToHttpsUploadProgress()
{ {
#ifdef Q_OS_WIN
QSKIP("QTBUG-76157: get rid of locking in TLS handshake (QSslSocket)");
#endif
//QFile sourceFile(testDataDir + "/bigfile"); //QFile sourceFile(testDataDir + "/bigfile");
//QVERIFY(sourceFile.open(QIODevice::ReadOnly)); //QVERIFY(sourceFile.open(QIODevice::ReadOnly));
qint64 wantedSize = 2*1024*1024; // 2 MB qint64 wantedSize = 2*1024*1024; // 2 MB
@ -6423,10 +6420,6 @@ void tst_QNetworkReply::encrypted()
void tst_QNetworkReply::abortOnEncrypted() void tst_QNetworkReply::abortOnEncrypted()
{ {
#ifdef Q_OS_WIN
QSKIP("QTBUG-76157: get rid of locking in TLS handshake (QSslSocket)");
#endif
SslServer server; SslServer server;
server.listen(); server.listen();
if (!server.isListening()) if (!server.isListening())
@ -8507,9 +8500,7 @@ void tst_QNetworkReply::ioHttpRedirectErrors_data()
QTest::newRow("too-many-redirects") << "http://localhost" << tempRedirectReply << QNetworkReply::TooManyRedirectsError; QTest::newRow("too-many-redirects") << "http://localhost" << tempRedirectReply << QNetworkReply::TooManyRedirectsError;
#if QT_CONFIG(ssl) #if QT_CONFIG(ssl)
#ifndef Q_OS_WIN // QTBUG-76157
QTest::newRow("insecure-redirect") << "https://localhost" << tempRedirectReply << QNetworkReply::InsecureRedirectError; QTest::newRow("insecure-redirect") << "https://localhost" << tempRedirectReply << QNetworkReply::InsecureRedirectError;
#endif // Q_OS_WIN
#endif #endif
QTest::newRow("unknown-redirect") << "http://localhost"<< tempRedirectReply.replace("http", "bad_protocol") << QNetworkReply::ProtocolUnknownError; QTest::newRow("unknown-redirect") << "http://localhost"<< tempRedirectReply.replace("http", "bad_protocol") << QNetworkReply::ProtocolUnknownError;
} }
@ -8586,11 +8577,9 @@ void tst_QNetworkReply::ioHttpRedirectPolicy_data()
QTest::newRow("nolesssafe-nossl") << QNetworkRequest::NoLessSafeRedirectPolicy << false << 1 << 200; QTest::newRow("nolesssafe-nossl") << QNetworkRequest::NoLessSafeRedirectPolicy << false << 1 << 200;
QTest::newRow("same-origin-nossl") << QNetworkRequest::SameOriginRedirectPolicy << false << 1 << 200; QTest::newRow("same-origin-nossl") << QNetworkRequest::SameOriginRedirectPolicy << false << 1 << 200;
#if QT_CONFIG(ssl) #if QT_CONFIG(ssl)
#ifndef Q_OS_WIN // QTBUG-76157
QTest::newRow("manual-ssl") << QNetworkRequest::ManualRedirectPolicy << true << 0 << 307; QTest::newRow("manual-ssl") << QNetworkRequest::ManualRedirectPolicy << true << 0 << 307;
QTest::newRow("nolesssafe-ssl") << QNetworkRequest::NoLessSafeRedirectPolicy << true << 1 << 200; QTest::newRow("nolesssafe-ssl") << QNetworkRequest::NoLessSafeRedirectPolicy << true << 1 << 200;
QTest::newRow("same-origin-ssl") << QNetworkRequest::SameOriginRedirectPolicy << true << 1 << 200; QTest::newRow("same-origin-ssl") << QNetworkRequest::SameOriginRedirectPolicy << true << 1 << 200;
#endif // Q_OS_WIN
#endif #endif
} }
@ -8644,41 +8633,33 @@ void tst_QNetworkReply::ioHttpRedirectPolicyErrors_data()
QTest::newRow("nolesssafe-nossl-nossl-too-many") << QNetworkRequest::NoLessSafeRedirectPolicy QTest::newRow("nolesssafe-nossl-nossl-too-many") << QNetworkRequest::NoLessSafeRedirectPolicy
<< false << QString("http://localhost:%1") << 0 << QNetworkReply::TooManyRedirectsError; << false << QString("http://localhost:%1") << 0 << QNetworkReply::TooManyRedirectsError;
#if QT_CONFIG(ssl) #if QT_CONFIG(ssl)
#ifndef Q_OS_WIN // QTBUG-76157
QTest::newRow("nolesssafe-ssl-ssl-too-many") << QNetworkRequest::NoLessSafeRedirectPolicy QTest::newRow("nolesssafe-ssl-ssl-too-many") << QNetworkRequest::NoLessSafeRedirectPolicy
<< true << QString("https:/localhost:%1") << 0 << QNetworkReply::TooManyRedirectsError; << true << QString("https:/localhost:%1") << 0 << QNetworkReply::TooManyRedirectsError;
QTest::newRow("nolesssafe-ssl-nossl-insecure-redirect") << QNetworkRequest::NoLessSafeRedirectPolicy QTest::newRow("nolesssafe-ssl-nossl-insecure-redirect") << QNetworkRequest::NoLessSafeRedirectPolicy
<< true << QString("http://localhost:%1") << 50 << QNetworkReply::InsecureRedirectError; << true << QString("http://localhost:%1") << 50 << QNetworkReply::InsecureRedirectError;
#endif // Q_OS_WIN
#endif #endif
// 2. SameOriginRedirectsPolicy // 2. SameOriginRedirectsPolicy
QTest::newRow("same-origin-nossl-nossl-too-many") << QNetworkRequest::SameOriginRedirectPolicy QTest::newRow("same-origin-nossl-nossl-too-many") << QNetworkRequest::SameOriginRedirectPolicy
<< false << QString("http://localhost:%1") << 0 << QNetworkReply::TooManyRedirectsError; << false << QString("http://localhost:%1") << 0 << QNetworkReply::TooManyRedirectsError;
#if QT_CONFIG(ssl) #if QT_CONFIG(ssl)
#ifndef Q_OS_WIN // QTBUG-76157
QTest::newRow("same-origin-ssl-ssl-too-many") << QNetworkRequest::SameOriginRedirectPolicy QTest::newRow("same-origin-ssl-ssl-too-many") << QNetworkRequest::SameOriginRedirectPolicy
<< true << QString("https://localhost:%1") << 0 << QNetworkReply::TooManyRedirectsError; << true << QString("https://localhost:%1") << 0 << QNetworkReply::TooManyRedirectsError;
QTest::newRow("same-origin-https-http-wrong-protocol") << QNetworkRequest::SameOriginRedirectPolicy QTest::newRow("same-origin-https-http-wrong-protocol") << QNetworkRequest::SameOriginRedirectPolicy
<< true << QString("http://localhost:%1") << 50 << QNetworkReply::InsecureRedirectError; << true << QString("http://localhost:%1") << 50 << QNetworkReply::InsecureRedirectError;
#endif // Q_OS_WIN
#endif #endif
QTest::newRow("same-origin-http-https-wrong-protocol") << QNetworkRequest::SameOriginRedirectPolicy QTest::newRow("same-origin-http-https-wrong-protocol") << QNetworkRequest::SameOriginRedirectPolicy
<< false << QString("https://localhost:%1") << 50 << QNetworkReply::InsecureRedirectError; << false << QString("https://localhost:%1") << 50 << QNetworkReply::InsecureRedirectError;
QTest::newRow("same-origin-http-http-wrong-host") << QNetworkRequest::SameOriginRedirectPolicy QTest::newRow("same-origin-http-http-wrong-host") << QNetworkRequest::SameOriginRedirectPolicy
<< false << QString("http://not-so-localhost:%1") << 50 << QNetworkReply::InsecureRedirectError; << false << QString("http://not-so-localhost:%1") << 50 << QNetworkReply::InsecureRedirectError;
#if QT_CONFIG(ssl) #if QT_CONFIG(ssl)
#ifndef Q_OS_WIN // QTBUG-76157
QTest::newRow("same-origin-https-https-wrong-host") << QNetworkRequest::SameOriginRedirectPolicy QTest::newRow("same-origin-https-https-wrong-host") << QNetworkRequest::SameOriginRedirectPolicy
<< true << QString("https://not-so-localhost:%1") << 50 << QNetworkReply::InsecureRedirectError; << true << QString("https://not-so-localhost:%1") << 50 << QNetworkReply::InsecureRedirectError;
#endif // Q_OS_WIN
#endif #endif
QTest::newRow("same-origin-http-http-wrong-port") << QNetworkRequest::SameOriginRedirectPolicy QTest::newRow("same-origin-http-http-wrong-port") << QNetworkRequest::SameOriginRedirectPolicy
<< false << QString("http://localhost/%1") << 50 << QNetworkReply::InsecureRedirectError; << false << QString("http://localhost/%1") << 50 << QNetworkReply::InsecureRedirectError;
#if QT_CONFIG(ssl) #if QT_CONFIG(ssl)
#ifndef Q_OS_WIN // QTBUG-76157
QTest::newRow("same-origin-https-https-wrong-port") << QNetworkRequest::SameOriginRedirectPolicy QTest::newRow("same-origin-https-https-wrong-port") << QNetworkRequest::SameOriginRedirectPolicy
<< true << QString("https://localhost/%1") << 50 << QNetworkReply::InsecureRedirectError; << true << QString("https://localhost/%1") << 50 << QNetworkReply::InsecureRedirectError;
#endif // Q_OS_WIN
#endif #endif
} }
@ -9153,10 +9134,6 @@ void tst_QNetworkReply::putWithServerClosingConnectionImmediately()
for (int s = 0; s <= 1; s++) { for (int s = 0; s <= 1; s++) {
withSsl = (s == 1); withSsl = (s == 1);
#ifdef Q_OS_WIN
if (withSsl)
QSKIP("QTBUG-76157: get rid of locking in TLS handshake (QSslSocket)");
#endif // Q_OS_WIN
// Test also needs to run several times because of 9c2ecf89 // Test also needs to run several times because of 9c2ecf89
for (int j = 0; j < 20; j++) { for (int j = 0; j < 20; j++) {
// emulate a minimal https server // emulate a minimal https server