diff options
author | Liang Qi <liang.qi@theqtcompany.com> | 2016-04-07 10:47:20 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@theqtcompany.com> | 2016-04-07 10:47:20 +0200 |
commit | ee0951d69b38f766e67262487be95b88501aa4a5 (patch) | |
tree | 116c334060500be340d4d61c99026316b0df3ce9 /tests | |
parent | 0bb645b1ccc5a9d57b21cf0b2c4306b8e48c611c (diff) | |
parent | d37239aa419ee4adff4b0a8d5c1403cadff72319 (diff) |
Merge remote-tracking branch 'origin/5.6' into 5.7
Conflicts:
src/network/access/qftp.cpp
src/widgets/itemviews/qheaderview.cpp
src/widgets/itemviews/qlistview.cpp
tests/auto/network/access/qftp/tst_qftp.cpp
Change-Id: I9f928f25d45d8944dd60bb583f649fc1615bc5d9
Diffstat (limited to 'tests')
4 files changed, 116 insertions, 4 deletions
diff --git a/tests/auto/network-settings.h b/tests/auto/network-settings.h index 236cdb17ce..d6b63c6100 100644 --- a/tests/auto/network-settings.h +++ b/tests/auto/network-settings.h @@ -66,7 +66,12 @@ public: #ifdef QT_NETWORK_LIB static QHostAddress serverIP() { - return QHostInfo::fromName(serverName()).addresses().first(); + const QHostInfo info = QHostInfo::fromName(serverName()); + if (info.error()) { + QTest::qFail(qPrintable(info.errorString()), __FILE__, __LINE__); + return QHostAddress(); + } + return info.addresses().constFirst(); } #endif diff --git a/tests/auto/network/access/qftp/tst_qftp.cpp b/tests/auto/network/access/qftp/tst_qftp.cpp index eca913fe08..edeb471401 100644 --- a/tests/auto/network/access/qftp/tst_qftp.cpp +++ b/tests/auto/network/access/qftp/tst_qftp.cpp @@ -722,10 +722,11 @@ void tst_QFtp::put_data() QByteArray bigData( 10*1024*1024, 0 ); bigData.fill( 'A' ); - // test the two put() overloads in one routine + // test the two put() overloads in one routine with a file name containing + // U+0x00FC (latin small letter u with diaeresis) for QTBUG-52303, testing UTF-8 for ( int i=0; i<2; i++ ) { QTest::newRow(("relPath01_" + QByteArray::number(i)).constData()) << QtNetworkSettings::serverName() << (uint)21 << QString() << QString() - << QString("qtest/upload/rel01_%1") << rfc3252 + << (QLatin1String("qtest/upload/rel01_") + QChar(0xfc) + QLatin1String("%1")) << rfc3252 << (bool)(i==1) << 1; /* QTest::newRow( QString("relPath02_%1").arg(i).toLatin1().constData() ) << QtNetworkSettings::serverName() << (uint)21 << QString("ftptest") << QString("password") diff --git a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp index ceecd70cad..5794c32803 100644 --- a/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp +++ b/tests/auto/widgets/graphicsview/qgraphicslinearlayout/tst_qgraphicslinearlayout.cpp @@ -1,4 +1,3 @@ - /**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. diff --git a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp index 37b72cc99c..d4f398a61c 100644 --- a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp +++ b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp @@ -126,6 +126,7 @@ private slots: void testFrameOnlyAroundContents(); void testProxyCalled(); + void testStyleOptionInit(); private: void lineUpLayoutTest(QStyle *); QWidget *testWidget; @@ -837,5 +838,111 @@ void tst_QStyle::testProxyCalled() } } + +class TestStyleOptionInitProxy: public QProxyStyle +{ + Q_OBJECT +public: + mutable bool invalidOptionsDetected; + explicit TestStyleOptionInitProxy(QStyle *style = Q_NULLPTR) + : QProxyStyle(style), + invalidOptionsDetected(false) + {} + + void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p, const QWidget *w) const Q_DECL_OVERRIDE { + checkStyleEnum<QStyle::PrimitiveElement>(pe, opt); + return QProxyStyle::drawPrimitive(pe, opt, p, w); + } + + void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p, const QWidget *w) const Q_DECL_OVERRIDE { + checkStyleEnum<QStyle::ControlElement>(element, opt); + return QProxyStyle::drawControl(element, opt, p, w); + } + + QRect subElementRect(SubElement subElement, const QStyleOption *option, const QWidget *widget) const Q_DECL_OVERRIDE { + checkStyleEnum<QStyle::SubElement>(subElement, option); + return QProxyStyle::subElementRect(subElement, option, widget); + } + + void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p, const QWidget *widget) const Q_DECL_OVERRIDE { + checkStyleEnum<QStyle::ComplexControl>(cc, opt); + return QProxyStyle::drawComplexControl(cc, opt, p, widget); + } + + QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const Q_DECL_OVERRIDE { + checkStyleEnum<QStyle::ComplexControl>(cc, opt); + return QProxyStyle::subControlRect(cc, opt, sc, widget); + } + + int pixelMetric(PixelMetric metric, const QStyleOption *option, const QWidget *widget) const Q_DECL_OVERRIDE { + checkStyleEnum<QStyle::PixelMetric>(metric, option); + return QProxyStyle::pixelMetric(metric, option, widget); + } + + QSize sizeFromContents(ContentsType ct, const QStyleOption *opt, const QSize &contentsSize, const QWidget *w) const Q_DECL_OVERRIDE { + checkStyleEnum<QStyle::ContentsType>(ct, opt); + return QProxyStyle::sizeFromContents(ct, opt, contentsSize, w); + } + + int styleHint(StyleHint stylehint, const QStyleOption *opt, const QWidget *widget, QStyleHintReturn *returnData) const Q_DECL_OVERRIDE { + checkStyleEnum<QStyle::StyleHint>(stylehint, opt); + return QProxyStyle::styleHint(stylehint, opt, widget, returnData); + } + + QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget) const Q_DECL_OVERRIDE { + checkStyleEnum<QStyle::StandardPixmap>(standardPixmap, opt); + return QProxyStyle::standardPixmap(standardPixmap, opt, widget); + } + + QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option, const QWidget *widget) const Q_DECL_OVERRIDE { + checkStyleEnum<QStyle::StandardPixmap>(standardIcon, option); + return QProxyStyle::standardIcon(standardIcon, option, widget); + } + + QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const Q_DECL_OVERRIDE { + checkStyle(QString::asprintf("QIcon::Mode(%i)", iconMode).toLatin1(), opt); + return QProxyStyle::generatedIconPixmap(iconMode, pixmap, opt); + } + + int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2, Qt::Orientation orientation, const QStyleOption *option, const QWidget *widget) const Q_DECL_OVERRIDE { + checkStyle(QString::asprintf("QSizePolicy::ControlType(%i), QSizePolicy::ControlType(%i)", control1, control2).toLatin1(), option); + return QProxyStyle::layoutSpacing(control1, control2, orientation, option, widget); + } + +private: + void checkStyle(const QByteArray &info, const QStyleOption *opt) const { + if (opt && (opt->version == 0 || opt->styleObject == Q_NULLPTR) ) { + invalidOptionsDetected = true; + qWarning() << baseStyle()->metaObject()->className() + << "Invalid QStyleOption found for" + << info; + qWarning() << "Version:" << opt->version << "StyleObject:" << opt->styleObject; + } + } + + template<typename MEnum> + void checkStyleEnum(MEnum element, const QStyleOption *opt) const { + static QMetaEnum _enum = QMetaEnum::fromType<MEnum>(); + checkStyle(_enum.valueToKey(element), opt); + } +}; + +void tst_QStyle::testStyleOptionInit() +{ + QStringList keys = QStyleFactory::keys(); + QVector<QStyle*> styles; + styles.reserve(keys.size() + 1); + + styles << new QCommonStyle(); + + Q_FOREACH (QStyle *style, styles) { + TestStyleOptionInitProxy testStyle; + testStyle.setBaseStyle(style); + testAllFunctions(style); + QVERIFY(!testStyle.invalidOptionsDetected); + delete style; + } +} + QTEST_MAIN(tst_QStyle) #include "tst_qstyle.moc" |