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();
}
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()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
@ -93,26 +119,26 @@ QSqlError initDb()
return QSqlError();
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();
if (!q.exec(QLatin1String("create table authors(id integer primary key, name varchar, birthdate date)")))
if (!q.exec(AUTHORS_SQL))
return q.lastError();
if (!q.exec(QLatin1String("create table genres(id integer primary key, name varchar)")))
if (!q.exec(GENRES_SQL))
return q.lastError();
if (!q.prepare(QLatin1String("insert into authors(name, birthdate) values(?, ?)")))
if (!q.prepare(INSERT_AUTHOR_SQL))
return q.lastError();
QVariant asimovId = addAuthor(q, QLatin1String("Isaac Asimov"), QDate(1920, 2, 1));
QVariant greeneId = addAuthor(q, QLatin1String("Graham Greene"), QDate(1904, 10, 2));
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();
QVariant sfiction = addGenre(q, QLatin1String("Science Fiction"));
QVariant fiction = addGenre(q, QLatin1String("Fiction"));
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();
addBook(q, QLatin1String("Foundation"), 1951, asimovId, sfiction, 3);
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]*=\")
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]+\" \";\" _standard_libraries ${CMAKE_CXX_STANDARD_LIBRARIES})
string(REGEX REPLACE \"[ \\t]+\" \";\" _standard_libraries \"${CMAKE_CXX_STANDARD_LIBRARIES}\")
set(_search_paths)
string(REPLACE \"\\$\\$[QT_INSTALL_LIBS]\" \"${_qt5_install_libs}\" _static_depends \"${_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
# 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
@ -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_CXXFLAGS_LTCG += $$QMAKE_CXXFLAGS_LTCG_FATOBJECTS
}

View File

@ -250,7 +250,7 @@ void MingwMakefileGenerator::init()
}
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;
}
QDebug operator<<(QDebug debug, const ProString &str)
{
return debug << str.toQString();
}
QT_END_NAMESPACE

View File

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

View File

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

View File

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

View File

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

View File

@ -621,11 +621,11 @@ int QDateTimeParser::sectionMaxSize(Section s, int count) const
case LastSection: return 0;
case AmPmSection: {
const int lowerMax = qMin(getAmPmText(AmText, LowerCase).size(),
const int lowerMax = qMax(getAmPmText(AmText, 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());
return qMin(4, qMin(lowerMax, upperMax));
return qMax(lowerMax, upperMax);
}
case Hour24Section:
@ -1664,13 +1664,16 @@ QDateTimeParser::findTimeZone(QStringRef str, const QDateTime &when,
/*!
\internal
Returns
AM if str == tr("AM")
PM if str == tr("PM")
PossibleAM if str can become tr("AM")
PossiblePM if str can become tr("PM")
PossibleBoth if str can become tr("PM") and can become tr("AM")
Neither if str can't become anything sensible
Compares str to the am/pm texts returned by getAmPmText().
Returns AM or PM if str is one of those texts. Failing that, it looks to see
whether, ignoring spaces and case, each character of str appears in one of
the am/pm texts.
If neither text can be the result of the user typing more into str, returns
Neither. If both texts are possible results of further typing, returns
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
{
@ -1699,10 +1702,10 @@ QDateTimeParser::AmPmFinder QDateTimeParser::findAmPm(QString &str, int sectionI
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];
return AM;
} else if (str.indexOf(ampm[pmindex], 0, Qt::CaseInsensitive) == 0) {
} else if (str.startsWith(ampm[pmindex], Qt::CaseInsensitive)) {
str = ampm[pmindex];
return PM;
} 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
{ 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 , 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 , 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/config/exampleurl-qtbase.qdocconf)
# Name of the project which must match the outputdir. Determines the .index file
project = QtDBus

View File

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

View File

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

View File

@ -2306,7 +2306,11 @@ QString QTextHtmlExporter::toHtml(const QByteArray &encoding, ExportMode mode)
if (mode == ExportEntireDocument) {
html += QLatin1String(" style=\"");
emitFontFamily(defaultCharFormat.fontFamily());
QStringList fontFamilies = defaultCharFormat.fontFamilies().toStringList();
if (!fontFamilies.isEmpty())
emitFontFamily(fontFamilies);
else
emitFontFamily(defaultCharFormat.fontFamily());
if (defaultCharFormat.hasProperty(QTextFormat::FontPointSize)) {
html += QLatin1String(" font-size:");
@ -2368,8 +2372,12 @@ bool QTextHtmlExporter::emitCharFormatStyle(const QTextCharFormat &format)
bool attributesEmitted = false;
{
const QStringList families = format.fontFamilies().toStringList();
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);
attributesEmitted = true;
}
@ -2656,6 +2664,27 @@ void QTextHtmlExporter::emitFontFamily(const QString &family)
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)
{
html += QLatin1String(" margin-top:");

View File

@ -397,6 +397,7 @@ private:
void emitPageBreakPolicy(QTextFormat::PageBreakFlags policy);
void emitFontFamily(const QString &family);
void emitFontFamily(const QStringList &families);
void emitBackgroundAttribute(const QTextFormat &format);
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/config/exampleurl-qtbase.qdocconf)
project = QtNetwork
description = Qt Network Reference Documentation

View File

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

View File

@ -1,4 +1,5 @@
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
project = QtOpenGL

View File

@ -1,4 +1,5 @@
include($QT_INSTALL_DOCS/global/qt-module-defaults.qdocconf)
include($QT_INSTALL_DOCS/config/exampleurl-qtbase.qdocconf)
project = QtPlatformHeaders
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/config/exampleurl-qtbase.qdocconf)
project = QtPrintSupport
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/config/exampleurl-qtbase.qdocconf)
project = QtSql
description = Qt SQL Reference Documentation

View File

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

View File

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

View File

@ -59,7 +59,7 @@ enum {
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
#elif !defined(QT_NO_COMPRESS)
# 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/config/exampleurl-qtbase.qdocconf)
project = QtWidgets
description = Qt Widgets Reference Documentation

View File

@ -2306,13 +2306,31 @@ void QDateTimeEdit::paintEvent(QPaintEvent *event)
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 original;
QString translated;
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 {
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

View File

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

View File

@ -2,4 +2,6 @@ CONFIG += testcase
TARGET = tst_qglobal
QT = core testlib
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)); \
/* Compare to native operator for compilers that support it,
otherwise... erm... check consistency! :-) */ \
QCOMPARE(QT_EMULATED_ALIGNOF(type), Q_ALIGNOF(type)); \
QCOMPARE(alignof(type), Q_ALIGNOF(type)); \
} while (false)
/**/
@ -517,7 +517,7 @@ void tst_QGlobal::qAlignOf()
TEST_AlignOf_impl(AlignmentInStruct<double>, Q_ALIGNOF(AlignmentInStruct<qint64>));
// 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));
#else
TEST_AlignOf_impl(qint64 [5], Q_ALIGNOF(AlignmentInStruct<qint64>));

View File

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

View File

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

View File

@ -2489,17 +2489,20 @@ void tst_QDateTime::fromString_LOCALE_ILDATE()
void tst_QDateTime::fromStringToStringLocale_data()
{
QTest::addColumn<QLocale>("locale");
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()
{
QFETCH(QLocale, locale);
QFETCH(QDateTime, dateTime);
QLocale def;
QLocale::setDefault(QLocale(QLocale::French, QLocale::France));
QLocale::setDefault(locale);
#define ROUNDTRIP(format) \
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;
}
{
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()

View File

@ -189,6 +189,10 @@ void tst_QPainterPath::reserveAndCapacity()
p.reserve(0);
QVERIFY(p.capacity() >= 1000);
QPainterPath p2;
p2.reserve(10);
QVERIFY(p.capacity() >= 10);
}
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>");
}
{
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();

View File

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